cleanses user's queries.
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
[auto-ap.graphql.utils
|
[auto-ap.graphql.utils
|
||||||
:refer [->graphql
|
:refer [->graphql
|
||||||
<-graphql
|
<-graphql
|
||||||
|
cleanse-query
|
||||||
assert-admin
|
assert-admin
|
||||||
assert-can-see-client
|
assert-can-see-client
|
||||||
enum->keyword
|
enum->keyword
|
||||||
@@ -66,7 +67,8 @@
|
|||||||
(defn search [context {query :query client :client_id} _]
|
(defn search [context {query :query client :client_id} _]
|
||||||
(when client
|
(when client
|
||||||
(assert-can-see-client (:id context) client))
|
(assert-can-see-client (:id context) client))
|
||||||
(let [num (some-> (re-find #"([0-9]+)" query)
|
(let [query (cleanse-query query)
|
||||||
|
num (some-> (re-find #"([0-9]+)" query)
|
||||||
second
|
second
|
||||||
(not-empty )
|
(not-empty )
|
||||||
Integer/parseInt)]
|
Integer/parseInt)]
|
||||||
|
|||||||
@@ -123,3 +123,14 @@
|
|||||||
(defn assert-none-locked [client-id dates]
|
(defn assert-none-locked [client-id dates]
|
||||||
(doseq [d dates]
|
(doseq [d dates]
|
||||||
(assert-not-locked client-id d)))
|
(assert-not-locked client-id d)))
|
||||||
|
|
||||||
|
(defn cleanse-query [q]
|
||||||
|
(let [parts (-> q
|
||||||
|
(str/replace #"[\[\]\+\*]" "")
|
||||||
|
(str/split #"\s+"))
|
||||||
|
exacts (butlast parts)
|
||||||
|
partial (last parts)]
|
||||||
|
(as-> exacts e
|
||||||
|
(mapv #(str "+" %) e)
|
||||||
|
(conj e (str partial "*"))
|
||||||
|
(str/join " " e))))
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
[auto-ap.graphql.utils
|
[auto-ap.graphql.utils
|
||||||
:refer [->graphql
|
:refer [->graphql
|
||||||
<-graphql
|
<-graphql
|
||||||
|
cleanse-query
|
||||||
assert-admin
|
assert-admin
|
||||||
assert-failure
|
assert-failure
|
||||||
enum->keyword
|
enum->keyword
|
||||||
@@ -148,19 +149,19 @@
|
|||||||
(:id args))))
|
(:id args))))
|
||||||
|
|
||||||
(defn search [context args _]
|
(defn search [context args _]
|
||||||
(let [data (if (is-admin? (:id context))
|
(let [search-query (cleanse-query (:query args))
|
||||||
|
data (if (is-admin? (:id context))
|
||||||
(d/q '[:find ?n ?i ?s
|
(d/q '[:find ?n ?i ?s
|
||||||
:in $ ?q
|
:in $ ?q
|
||||||
:where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]]]
|
:where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]]]
|
||||||
(d/db conn)
|
(d/db conn)
|
||||||
(:query args))
|
search-query)
|
||||||
(d/q '[:find ?n ?i ?s
|
(d/q '[:find ?n ?i ?s
|
||||||
:in $ ?q
|
:in $ ?q
|
||||||
:where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]]
|
:where [(fulltext $ :vendor/search-terms ?q) [[?i ?n _ ?s]]]
|
||||||
(not [?i :vendor/hidden true])]
|
(not [?i :vendor/hidden true])]
|
||||||
(d/db conn)
|
(d/db conn)
|
||||||
(:query args)))]
|
search-query))]
|
||||||
|
|
||||||
(->> data
|
(->> data
|
||||||
(sort-by (comp - last))
|
(sort-by (comp - last))
|
||||||
(map (fn [[n i]]
|
(map (fn [[n i]]
|
||||||
|
|||||||
Reference in New Issue
Block a user