very easy to lookup customized accounts.

This commit is contained in:
2022-04-10 21:46:58 -07:00
parent 53de49d758
commit b4d5b7fde6
5 changed files with 87 additions and 57 deletions

View File

@@ -1,19 +1,21 @@
(ns auto-ap.datomic.accounts
(:require [datomic.api :as d]
[auto-ap.graphql.utils :refer [->graphql]]
[auto-ap.datomic :refer [uri merge-query]]))
[auto-ap.datomic :refer [uri merge-query conn]]))
(defn <-datomic [a]
(update a :account/applicability :db/ident))
(def default-read ['* {:account/type [:db/ident :db/id]
:account/applicability [:db/ident :db/id]
:account/client-overrides [:db/id
:account-client-override/name
{:account-client-override/client [:db/id :client/name]}]}])
(defn get-accounts
([]
(get-accounts {}))
([args]
(let [query (cond-> {:query {:find ['(pull ?e [* {:account/type [:db/ident :db/id]
:account/applicability [:db/ident :db/id]
:account/client-overrides [:db/id
:account-client-override/name
{:account-client-override/client [:db/id :client/name]}]}])]
(let [query (cond-> {:query {:find [(list 'pull '?e default-read)]
:in ['$]
:where [['?e :account/name]]}
:args [(d/db (d/connect uri))]}
@@ -26,11 +28,7 @@
(map <-datomic)))))
(defn get-by-id [id]
(let [query {:query {:find ['(pull ?e [* {:account/type [:db/ident :db/id]
:account/applicability [:db/ident :db/id]
:account/client-overrides [:db/id
:account-client-override/name
{:account-client-override/client [:db/id :client/name]}]}])]
(let [query {:query {:find [(list 'pull '?e default-read)]
:in ['$ '?e]}
:args [(d/db (d/connect uri) ) id]}]
(->>
@@ -39,6 +37,34 @@
(map <-datomic)
first)))
(defn get-for-vendor [vendor-id client-id]
(if client-id
(->>
(d/q [:find (list 'pull '?e default-read)
:in '$ '?v '?c
:where '(or-join [?v ?c ?e]
(and [?v :vendor/account-overrides ?ao]
[?ao :vendor-account-override/client ?c]
[?ao :vendor-account-override/account ?e])
(and [?v :vendor/account-overrides ?ao]
(not [?ao vendor-account-override/client ?c])
[?v :vendor/default-account ?e])
(and (not [?v :vendor/account-overrides])
[?v :vendor/default-account ?e]))]
(d/db conn )
vendor-id
client-id)
(map first)
(map <-datomic)
first)
(d/q [:find (list 'pull '?e default-read)
:in '$ '?v
:where '[?v :vendor/default-account ?e]]
(d/db conn )
vendor-id)))
(defn get-account-by-numeric-code-and-sets [numeric-code sets]
(let [query (cond-> {:query {:find ['(pull ?e [* {:account/type [:db/ident :db/id]}])]
:in ['$ '?numeric-code]

View File

@@ -404,7 +404,11 @@
:resolve :get-user}
:vendor_by_id {:type :vendor
:args {:id {:type :id}}
:resolve :vendor-by-id}}
:resolve :vendor-by-id}
:account_for_vendor {:type :account
:args {:client_id {:type :id}
:vendor_id {:type :id}}
:resolve :account-for-vendor}}
:input-objects
{
@@ -789,6 +793,7 @@
:get-yodlee-merchants ym/get-yodlee-merchants
:get-intuit-bank-accounts gq-intuit-bank-accounts/get-intuit-bank-accounts
:vendor-by-id gq-vendors/get-by-id
:account-for-vendor gq-accounts/default-for-vendor
:get-user get-user
:mutation/delete-transaction-rule gq-transaction-rules/delete-transaction-rule
:mutation/edit-user gq-users/edit-user

View File

@@ -1,15 +1,27 @@
(ns auto-ap.graphql.accounts
(:require [datomic.api :as d]
[auto-ap.datomic.accounts :as d-accounts]
[auto-ap.graphql.utils :refer [->graphql <-graphql enum->keyword] ]
[auto-ap.datomic :refer [uri merge-query remove-nils audit-transact]]
[clojure.tools.logging :as log]))
(:require
[auto-ap.datomic :refer [audit-transact remove-nils uri]]
[auto-ap.datomic.accounts :as d-accounts]
[auto-ap.graphql.utils
:refer [->graphql <-graphql assert-can-see-client enum->keyword]]
[datomic.api :as d]))
(defn get-accounts [context args value]
(->graphql (d-accounts/get-accounts (<-graphql args))))
(defn default-for-vendor [context args value]
(assert-can-see-client (:id context) (:client_id args))
(let [result (d-accounts/get-for-vendor (:vendor_id args) (:client_id args))]
(->graphql
(if-let [override-name (->> result
:account/client-overrides
(filter #(= (:client_id args)
(:db/id (:account-client-override/client %))))
first
:account-client-override/name)]
(assoc result :account/name override-name)
result))))
(defn upsert-account [context args value]
(let [{{:keys [id client-overrides numeric-code location applicability account-set name type]} :account} (<-graphql args)]
(when-not id