Fork me on GitHub
#graphql
<
2022-04-04
>
fabrao01:04:43

the most boring thing about lacinia is mapping resolvers, I always forget something. Is there any way to map it automatic using somekind of metadata stuff? Like (defn ^{:resolver :query/something} something ...) ?

fabrao02:04:27

I solved it with anything named *.resolver.* like:

(defn ^{:resolver :query/todas_empresas} todas-empresas []
  (fn [_ _ _]
    "OK"))

with

{:queries
 {:todas_empresas
  {:type :String
   :resolve :query/todas_empresas}}}

(defn filter-resolver [functions]
  (->>
   (filter
    (fn [v] (contains? (meta v) :resolver))
    (vals (ns-publics functions)))
   (reduce #(conj %1 {(-> (meta %2) :resolver) (%2)}) {})))

(defn get-all-resovers []
  (->>
   (all-ns)
   (map ns-name)
   (filter #(.contains (name %) "resolvers"))
   (reduce #(conj %1 (filter-resolver %2)) {})))

(defn- configurar-schema [arquivo-esquema]
  (-> (io/resource arquivo-esquema)
      slurp
      edn/read-string
      (util/attach-resolvers (get-all-resovers))
      schema/compile))