(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))