47 lines
1.4 KiB
Clojure
47 lines
1.4 KiB
Clojure
(ns auto-ap.graphql.ezcater
|
|
(:require
|
|
[auto-ap.datomic :refer [conn]]
|
|
[auto-ap.graphql.utils :refer [assert-admin cleanse-query]]
|
|
[auto-ap.graphql.vendors :refer [partial-match-first]]
|
|
[com.walmartlabs.lacinia.util :refer [attach-resolvers]]
|
|
[datomic.api :as d]))
|
|
|
|
(defn search [context args _]
|
|
(assert-admin (:id context))
|
|
(let [search-query (cleanse-query (:query args))
|
|
data (d/q '[:find ?n ?i ?s
|
|
:in $ ?q
|
|
:where [(fulltext $ :ezcater-caterer/search-terms ?q) [[?i ?n _ ?s]]]]
|
|
(d/db conn)
|
|
search-query)]
|
|
(->> data
|
|
(sort-by (comp - last))
|
|
(partial-match-first (:query args))
|
|
(map (fn [[n i]]
|
|
{:name n
|
|
:id i})))))
|
|
|
|
|
|
(def objects
|
|
{:ezcater_caterer {:fields {:name {:type 'String}
|
|
:id {:type :id}}}})
|
|
|
|
(def queries
|
|
{:search_ezcater_caterer {:type '(list :search_result)
|
|
:args {:query {:type 'String}}
|
|
:resolve :search-ezcater-caterer}})
|
|
|
|
(def enums
|
|
{})
|
|
|
|
(def resolvers
|
|
{:search-ezcater-caterer search})
|
|
|
|
(defn attach [schema]
|
|
(->
|
|
(merge-with merge schema
|
|
{:objects objects
|
|
:queries queries
|
|
:enums enums})
|
|
(attach-resolvers resolvers)))
|