Files
integreat/src/clj/auto_ap/ssr/vendor.clj
2025-01-17 23:10:42 -08:00

77 lines
3.4 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))
#_(comment
(solr/delete solr/impl "vendors")
(count (let [valid-ids (->> (dc/q '[:find ?v
:in $
:where [?v :vendor/name]]
(dc/db conn))
(map first)
(into #{}))]
(for [v (solr/query solr/impl "vendors"
{"query" "*"
"limit" 10000})
:when (not (valid-ids (Long/parseLong (:id v))))]
v)))
(let [name-like-ids (when (not-empty "A&J")
(map (comp (juxt identity #(Long/parseLong %)) :id)
(solr/query solr/impl "vendors"
{"query" (cond-> (format "name:(%s*)" (str/upper-case "A&J"))
(not (is-admin? identity)) (str " hidden:false"))
"fields" "id,name"
"limit" 300})))
valid-clients (for [[z n] name-like-ids]
{"value" n "internal-label" z "label" (dc/pull (dc/db conn) '[*] n)})]
(take 5 valid-clients))
(solr/query solr/impl "vendors"
{"query" (cond-> (format "name:(%s*)" (str/upper-case (solr/escape "A&J Pr")))
(not true) (str " hidden:false"))
"fields" "id, name"
"limit" 300})
(solr/escape "A&J")
(first (solr/query solr/impl "vendors"
{"query" (cond-> (format "name:(A\\&J PRO*)")
(not true) (str " hidden:false"))
"fields" "id, name"
"limit" 300})))