aretherecookies-server/src/aretherecookies/search/search.clj
2020-06-07 16:11:30 -05:00

34 lines
1,014 B
Clojure

(ns aretherecookies.search.search
(:require [clojure.core.async :as async :refer [chan, sliding-buffer, go, >!!, <!]]
[aretherecookies.db :refer [get-search-term, add-products, update-search-term]]
[aretherecookies.search.heb :refer [search-heb]])
(:import [java.util Calendar]))
(def searches-chan (chan (sliding-buffer 500)))
(defn queue-search
""
[term]
(let [cutoff (doto (Calendar/getInstance) (.add Calendar/DATE -1))
last-queried (:last_queried (first (get-search-term term)))
is-outdated (or (nil? last-queried) (>= (.getTimeInMillis cutoff) (.getTime last-queried)))]
(if is-outdated (>!! searches-chan term) nil)))
(defn search-all-sources
""
[term]
(let [heb-result (go (search-heb term))]
(update-search-term term)
(async/map #(add-products term %) [heb-result])))
(defn init-search
""
[]
(go (while true
(try (search-all-sources (<! searches-chan))
(catch Exception e (println "CAUGHT:" e))))))