pinkblackrose/src/clj/pinkblackrose/routes/services/graphql.clj

42 lines
1.3 KiB
Clojure

(ns pinkblackrose.routes.services.graphql
(:require
[com.walmartlabs.lacinia.util :refer [attach-resolvers]]
[com.walmartlabs.lacinia.schema :as schema]
[com.walmartlabs.lacinia :as lacinia]
[clojure.data.json :as json]
[clojure.edn :as edn]
[clojure.java.io :as io]
[ring.util.http-response :refer :all]
[mount.core :refer [defstate]]))
(defn get-hero [context args value]
(let [data [{:id 1000
:name "Luke"
:home_planet "Tatooine"
:appears_in ["NEWHOPE" "EMPIRE" "JEDI"]}
{:id 2000
:name "Lando Calrissian"
:home_planet "Socorro"
:appears_in ["EMPIRE" "JEDI"]}]]
(first data)))
(defstate compiled-schema
:start
(-> "graphql/schema.edn"
io/resource
slurp
edn/read-string
(attach-resolvers {:get-hero get-hero
:get-droid (constantly {})})
schema/compile))
(defn format-params [query]
(let [parsed (json/read-str query)] ;;-> placeholder - need to ensure query meets graphql syntax
(str "query { hero(id: \"1000\") { name appears_in }}")))
(defn execute-request [query]
(let [vars nil
context nil]
(-> (lacinia/execute compiled-schema query vars context)
(json/write-str))))