83 lines
2.6 KiB
Clojure
83 lines
2.6 KiB
Clojure
(ns auto-ap.graphql.reports
|
|
(:require
|
|
[amazonica.aws.s3 :as s3]
|
|
[auto-ap.datomic :refer [conn]]
|
|
[auto-ap.datomic.reports :as r]
|
|
[auto-ap.graphql.utils
|
|
:refer [<-graphql assert-admin attach-tracing-resolvers result->page]]
|
|
[config.core :refer [env]]
|
|
[datomic.client.api :as dc]))
|
|
|
|
(defn get-report-page [context args _]
|
|
(let [args (assoc args :id (:id context))
|
|
[reports reports-count] (r/get-graphql (assoc (<-graphql (:filters args))
|
|
:id (:id context)))]
|
|
(result->page reports reports-count :reports (:filters args)))
|
|
)
|
|
|
|
(defn delete-report [context args _]
|
|
(assert-admin (:id context))
|
|
(let [[id-to-delete key] (first (dc/q '[:find ?i ?k
|
|
:in $ ?i
|
|
:where [?i :report/key ?k]]
|
|
(dc/db conn)
|
|
(:id args)))]
|
|
(when id-to-delete
|
|
(s3/delete-object :bucket-name (:data-bucket env)
|
|
:key key)
|
|
(dc/transact conn {:tx-data [[:db/retractEntity id-to-delete]]}))
|
|
{:message (format "deleted %s successfully" key)}))
|
|
|
|
|
|
|
|
|
|
(def objects
|
|
{:report
|
|
{:fields {:url {:type 'String}
|
|
:name {:type 'String}
|
|
:created {:type :iso_date}
|
|
:creator {:type 'String}
|
|
:id {:type :id}}}
|
|
|
|
:report_page
|
|
{:fields {:reports {:type '(list :report)}
|
|
:count {:type 'Int}
|
|
:total {:type 'Int}
|
|
:start {:type 'Int}
|
|
:end {:type 'Int}}}})
|
|
|
|
(def queries
|
|
{:report_page {:type :report_page
|
|
:args {:filters {:type :report_filters}}
|
|
:resolve :get-report-page}})
|
|
|
|
(def mutations
|
|
{:delete_report {:type :message
|
|
:args {:id {:type :id}}
|
|
:resolve :mutation/delete-report}})
|
|
|
|
(def input-objects
|
|
{:report_filters
|
|
{:fields {:client_id {:type :id}
|
|
:start {:type 'Int}
|
|
:per_page {:type 'Int}
|
|
:sort {:type '(list :sort_item)}}}})
|
|
|
|
(def enums
|
|
{})
|
|
|
|
(def resolvers
|
|
{:get-report-page get-report-page
|
|
:mutation/delete-report delete-report})
|
|
|
|
|
|
(defn attach [schema]
|
|
(->
|
|
(merge-with merge schema
|
|
{:objects objects
|
|
:queries queries
|
|
:mutations mutations
|
|
:input-objects input-objects
|
|
:enums enums})
|
|
(attach-tracing-resolvers resolvers)))
|