105 lines
4.5 KiB
Clojure
105 lines
4.5 KiB
Clojure
(ns auto-ap.graphql.import-batch
|
|
(:require
|
|
[auto-ap.datomic
|
|
:refer [add-sorter-fields
|
|
apply-pagination
|
|
apply-sort-3
|
|
conn
|
|
merge-query
|
|
pull-many-by-id
|
|
query2]]
|
|
[auto-ap.graphql.utils
|
|
:refer [<-graphql
|
|
assert-admin
|
|
attach-tracing-resolvers
|
|
ident->enum-f
|
|
result->page]]
|
|
[clj-time.coerce :as coerce]
|
|
[datomic.api :as dc]))
|
|
|
|
(def default-read '[:db/id
|
|
:import-batch/external-id
|
|
:import-batch/date
|
|
:import-batch/imported
|
|
:import-batch/suppressed
|
|
:import-batch/extant
|
|
:import-batch/user-name
|
|
{:import-batch/source [:db/ident]}
|
|
{:import-batch/status [:db/ident]}])
|
|
|
|
(defn raw-graphql-ids [db args]
|
|
(let [query (cond-> {:query {:find []
|
|
:in ['$]
|
|
:where []}
|
|
:args [db]}
|
|
|
|
(:sort args) (add-sorter-fields {"date" ['[?e :import-batch/date ?sort-date]]}
|
|
args)
|
|
|
|
true
|
|
(merge-query {:query {:find ['?e]
|
|
:where ['[?e :import-batch/date]]}}))]
|
|
|
|
|
|
(cond->> (query2 query)
|
|
true (apply-sort-3 args)
|
|
true (apply-pagination args))))
|
|
|
|
(defn graphql-results [ids db _]
|
|
(let [results (pull-many-by-id db default-read ids)]
|
|
(->> ids
|
|
(map results))))
|
|
|
|
(defn get-graphql [args]
|
|
(let [db (dc/db conn)
|
|
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
|
|
[(graphql-results ids-to-retrieve db args)
|
|
matching-count]))
|
|
|
|
(defn get-import-batch-page [context args _]
|
|
(let [_ (assert-admin (:id context))
|
|
args (assoc (:filters args) :id (:id context))
|
|
[values matching-count] (get-graphql (<-graphql args))]
|
|
(result->page (->> values
|
|
(map (ident->enum-f :import-batch/source))
|
|
(map (ident->enum-f :import-batch/status))
|
|
(map #(update % :import-batch/date coerce/to-date-time)))
|
|
matching-count :data args)))
|
|
|
|
|
|
(defn attach [schema]
|
|
(->
|
|
(merge-with merge schema
|
|
{:objects {:import_batch {:fields {:user_name {:type 'String}
|
|
:id {:type :id}
|
|
:date {:type :iso_date_time}
|
|
:imported {:type 'Int}
|
|
:extant {:type 'Int}
|
|
:suppressed {:type 'Int}
|
|
:status {:type :import_batch_status}
|
|
:source {:type :import_batch_source}}}
|
|
|
|
:import_batch_page {:fields {:data {:type '(list :import_batch)}
|
|
:count {:type 'Int}
|
|
:total {:type 'Int}
|
|
:start {:type 'Int}
|
|
:end {:type 'Int}}}
|
|
|
|
}
|
|
:queries {:import_batch_page {:type :import_batch_page
|
|
:args {:filters {:type :import_batch_filters}}
|
|
|
|
:resolve :get-import-batch-page}}
|
|
:mutations {}
|
|
:input-objects {:import_batch_filters {:fields {:start {:type 'Int}
|
|
:per_page {:type 'Int}
|
|
:sort {:type '(list :sort_item)}}}}
|
|
:enums {:import_batch_status {:values [{:enum-value :started}
|
|
{:enum-value :completed}]}
|
|
:import_batch_source {:values [{:enum-value :intuit}
|
|
{:enum-value :yodlee}
|
|
{:enum-value :yodlee2}
|
|
{:enum-value :plaid}
|
|
{:enum-value :manual}]}}})
|
|
(attach-tracing-resolvers {:get-import-batch-page get-import-batch-page})))
|