29 lines
1.4 KiB
Clojure
29 lines
1.4 KiB
Clojure
(ns auto-ap.datomic.users
|
|
(:require
|
|
[auto-ap.datomic :refer [conn]]
|
|
[datomic.api :as dc]
|
|
[datomic.api :as d]))
|
|
|
|
(defn find-or-insert! [{:keys [:user/provider :user/provider-id ] :as new-user}]
|
|
(let [is-first-user? (not (seq (dc/q [:find '?e
|
|
:in '$
|
|
:where '[?e :user/provider]]
|
|
(dc/db conn))))
|
|
user-id (ffirst (dc/q '[:find ?e
|
|
:in $ ?provider ?provider-id
|
|
:where [?e :user/provider ?provider]
|
|
[?e :user/provider-id ?provider-id]]
|
|
(dc/db conn) provider provider-id))
|
|
result @(dc/transact conn [[:upsert-entity (cond-> (assoc new-user :db/id (or user-id "user")
|
|
:user/last-login (java.util.Date.))
|
|
(not user-id) (assoc :user/role :user-role/none)
|
|
is-first-user? (assoc :user/role :user-role/admin))]])
|
|
user-id (or user-id (get-in result [:tempids "user"]))]
|
|
(update (dc/pull (dc/db conn)
|
|
'[*
|
|
{:user/clients [*]}
|
|
{:user/role [:db/ident]}]
|
|
user-id)
|
|
:user/role :db/ident)))
|
|
|