-
Notifications
You must be signed in to change notification settings - Fork 160
/
mock_data.clj
72 lines (59 loc) · 2.26 KB
/
mock_data.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
(ns mock-data
(:require [user :as user]
[clojure.edn :as edn]
[clojure.string :as string]
[crux.api :as crux]))
(defn read-doc
[doc-title]
(edn/read-string (slurp (str "dev/mock-data/" doc-title))))
(def employees (read-doc "employees.edn"))
(def customers (read-doc "customers.edn"))
(def addresses (read-doc "addresses.edn"))
(def cars (read-doc "cars.edn"))
(def employee-count 80)
(def customer-count 200)
(defn get-n
[n strs data]
(apply concat
(map
(fn [x]
(take n (filter #(= x (:position %)) data))) strs)))
(defn link-address
[data addresses]
(map (fn [x address]
(assoc x :address
(:crux.db/id address))) data addresses))
(def final-employees
(let [top-management (get-n 1 ["CEO" "CTO" "COO" "CMO"] employees)
regular-employees (take (- employee-count 4)
(remove
(fn [x]
(some #(= % (:position x)) ["CEO" "CTO" "COO" "CMO"]))
employees))
full-employees (concat top-management regular-employees)]
(link-address full-employees (take employee-count addresses))))
(def final-customers (link-address
(take customer-count customers)
(drop employee-count addresses)))
(def final-address (take (+ customer-count employee-count) addresses))
(def final-cars (take 200 cars))
(def final-sales
(let [sales-employees (filter (every-pred
#(not (string/includes? (:position %) "Engineer"))
#(string/includes? (:position %) "Sales"))
final-employees)]
(map (fn [{:keys [crux.db/id]}]
{:crux.db/id (java.util.UUID/randomUUID)
:car (:crux.db/id (rand-nth final-cars))
:type :sale
:employee (:crux.db/id (rand-nth sales-employees))
:customer id
:status (rand-nth ["Shipped" "Processed" "Delivered"])}) final-customers)))
(defn ingest-data
[data]
(crux/submit-tx
(user/crux-node)
(mapv #(do [:crux.tx/put %]) data)))
(comment
(ingest-data
(concat final-employees final-customers final-address final-cars final-sales)))