Files
integreat/src/clj/auto_ap/graphql/plaid.clj
2023-07-24 20:55:40 -07:00

57 lines
2.4 KiB
Clojure

(ns auto-ap.graphql.plaid
(:require
[auto-ap.datomic :refer [conn]]
[auto-ap.graphql.utils
:refer [assert-admin assert-present attach-tracing-resolvers cleanse-query]]
[auto-ap.solr :as solr]
[datomic.api :as dc]))
(defn delete-plaid-item [context args _]
(assert-admin (:id context))
(assert-present args :id)
@(dc/transact conn [[:db/retractEntity (:id args)]])
{:message "Item deleted."})
(defn search-merchants [context args _]
(if-let [query (not-empty (cleanse-query (:query args)))]
(let [search-query (str "name:(" query ")")]
(for [{:keys [id name]} (solr/query solr/impl "plaid_merchants" {"query" search-query
"fields" "id, name"})]
{:id (Long/parseLong id)
:name (first name)}))
[]))
(defn attach [schema]
(->
(merge-with merge schema
{:objects {:plaid_link_result
{:fields {:token {:type 'String}} }
:plaid_item
{:fields {:external_id {:type 'String}
:id {:type :id}
:client {:type :client}
:status {:type 'String}
:last_updated {:type :iso_date}
:accounts {:type '(list :plaid_account)}}}
:plaid_item_page {:fields {:plaid_items {:type '(list :plaid_item)}
:count {:type 'Int}
:total {:type 'Int}
:start {:type 'Int}
:end {:type 'Int}}}
:plaid_account
{:fields {:external_id {:type 'String}
:id {:type :id}
:balance {:type :money}
:name {:type 'String}
:number {:type 'String}}}}
:queries {:search_plaid_merchants {:type '(list :plaid_merchant)
:args {:query {:type 'String}}
:resolve :search-plaid-merchants}}})
(attach-tracing-resolvers {:search-plaid-merchants search-merchants})))