-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.clj
53 lines (49 loc) · 1.22 KB
/
utils.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
(ns connective.firestore.utils
(:require
[ring.util.codec :as codec]
[connective.entity :as entity]))
(defn coll-id-of-ident
[{::entity/keys [kind]}]
(assert (some? kind))
(->
kind
pr-str
codec/url-encode))
(defn doc-id
[{::entity/keys [ident] :as entity}]
(assert (some? ident))
(let [c-id (coll-id-of-ident ident)
ident (entity/id-of-ident ident)
_ (assert (some? ident))
d-id (->
ident
pr-str
codec/url-encode)]
(str c-id "/" d-id)))
(defn doc-attributes
[entity]
(reduce
(fn
[attrs [k v]]
(assoc attrs (name k) v))
{}
(entity/attributes-of-entity entity)))
(defn assoc-entity-attributes
[context entity doc]
(let [schema (entity/schema-of-entity context entity)
relations (entity/relationships-of-schema schema)
rels (reduce
(fn
[r* [k _]]
(assoc r* k ::entity/pending))
{}
relations)
attrs (reduce
(fn
[e [k v]]
(assoc e (keyword k) v))
{} doc)]
(->
entity
(assoc ::entity/attributes attrs)
(assoc ::entity/relationships rels))))