Files
integreat/src/clj/auto_ap/graphql/sales_orders.clj

108 lines
4.1 KiB
Clojure

(ns auto-ap.graphql.sales-orders
(:require [auto-ap.datomic.sales-orders :as d-sales-orders2]
[auto-ap.graphql.utils :refer [->graphql <-graphql result->page assert-admin] ]
[com.walmartlabs.lacinia.util :refer [attach-resolvers]]
[auto-ap.graphql.utils :refer [attach-tracing-resolvers]]))
(defn get-sales-orders-page [context args _]
(let [args (assoc args :clients (:clients context))
[sales-orders sales-orders-count {:keys [total tax]}] (d-sales-orders2/get-graphql (<-graphql args))]
(assoc (result->page sales-orders sales-orders-count :sales_orders args)
:sales_order_total total
:sales_order_tax tax)))
(defn get-all-sales-orders [context args _]
(assert-admin (:id context))
(map
->graphql
(first (d-sales-orders2/get-graphql (assoc (<-graphql args) :count Integer/MAX_VALUE)))))
(def objects
{:sales_order_page
{:fields {:sales_orders {:type '(list :sales_order)}
:count {:type 'Int}
:total {:type 'Int}
:start {:type 'Int}
:end {:type 'Int}
:sales_order_total {:type :money}
:sales_order_tax {:type :money}}}
:sales_order
{:fields {:id {:type :id}
:location {:type 'String}
:external_id {:type 'String}
:reference_link {:type 'String}
:source {:type 'String}
:total {:type :money}
:tip {:type :money}
:tax {:type :money}
:discount {:type :money}
:service_charge {:type :money}
:returns {:type :money}
:client {:type :client}
:date {:type 'String}
:charges {:type '(list :charge)}
:line_items {:type '(list :order_line_item)}}}
:order_line_item
{:fields {:id {:type :id}
:item_name {:type 'String}
:total {:type :money}
:tax {:type :money}
:category {:type 'String}
:discount {:type :money}}}
:charge
{:fields {:id {:type :id}
:processor {:type :processor}
:reference_link {:type 'String}
:note {:type 'String}
:type_name {:type 'String}
:total {:type :money}
:tip {:type :money}
:expected_deposit {:type :expected_deposit}}}})
(def queries
{:all_sales_orders {:type '(list :sales_order)
:args {:client_id {:type :id}
:date_range {:type :date_range}
:client_code {:type 'String}}
:resolve :get-all-sales-orders}
:sales_order_page {:type :sales_order_page
:args {:client_id {:type :id}
:date_range {:type :date_range}
:total_lte {:type :money}
:total_gte {:type :money}
:type_name {:type 'String}
:processor {:type :processor}
:category {:type 'String}
:start {:type 'Int}
:per_page {:type 'Int}
:sort {:type '(list :sort_item)}}
:resolve :get-sales-order-page}})
(def mutations
{})
(def input-objects
{})
(def enums
{})
(def resolvers
{:get-all-sales-orders get-all-sales-orders
:get-sales-order-page get-sales-orders-page
})
(defn attach [schema]
(->
(merge-with merge schema
{:objects objects
:queries queries
:mutations mutations
:input-objects input-objects
:enums enums})
(attach-tracing-resolvers resolvers)))