Files
integreat/src/clj/auto_ap/ssr/vendor.clj
2024-10-15 19:22:19 -07:00

37 lines
1.7 KiB
Clojure

(ns auto-ap.ssr.vendor
(:require
[auto-ap.datomic :refer [conn pull-attr]]
[auto-ap.graphql.utils :refer [is-admin?]]
[auto-ap.solr :as solr]
[clojure.string :as str]
[datomic.api :as dc]
[ring.middleware.json :refer [wrap-json-response]]))
(defn best-match [q]
(let [name-like-ids (when (not-empty q)
(map (comp #(Long/parseLong %) :id)
(solr/query solr/impl "vendors"
{"query" (cond-> (format "name:(%s*)" (str/upper-case (solr/escape q)))
true (str " hidden:false"))
"fields" "id"
"limit" 300})))
valid-clients (for [n name-like-ids]
{"value" n "label" (pull-attr (dc/db conn) :vendor/name n)})]
(first valid-clients)))
(defn search [{:keys [clients query-params identity]}]
(let [name-like-ids (when (not-empty (get query-params "q"))
(map (comp #(Long/parseLong %) :id)
(solr/query solr/impl "vendors"
{"query" (cond-> (format "name:(%s*)" (str/upper-case (solr/escape (get query-params "q"))))
(not (is-admin? identity)) (str " hidden:false"))
"fields" "id"
"limit" 300})))
valid-clients (for [n name-like-ids]
{"value" n "label" (pull-attr (dc/db conn) :vendor/name n)} )]
{:body (take 10 valid-clients)}))
(def search (wrap-json-response search))