blob: 492f786bd660368e5cc627cb0f12f55516c97497 (
plain) (
blame)
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
|
(ns bbbg.db.attendee-check
(:require
[bbbg.attendee :as attendee]
[bbbg.attendee-check :as attendee-check]
[bbbg.db :as db]
[bbbg.user :as user]
[bbbg.util.core :as u]))
(defn create! [db params]
(db/insert! db :attendee-check
(select-keys params [::attendee/id
::user/id
::attendee-check/last-dose-at])))
(defn attendees-with-last-checks
[db attendees]
(when (seq attendees)
(let [ids (map ::attendee/id attendees)
checks
(db/list db {:select [:attendee-check.*]
:from [:attendee-check]
:join [[{:select [:%max.attendee-check.checked-at
:attendee-check.attendee-id]
:from [:attendee-check]
:group-by [:attendee-check.attendee-id]
:where [:in :attendee-check.attendee-id ids]}
:last-check]
[:=
:attendee-check.attendee-id
:last-check.attendee-id]]})
users (if (seq checks)
(u/key-by
::user/id
(db/list db {:select [:public.user.*]
:from [:public.user]
:where [:in :id (map ::user/id checks)]}))
{})
checks (map #(assoc % :user (users (::user/id %))) checks)
attendee-id->check (u/key-by ::attendee/id checks)]
(map #(assoc % :last-check (attendee-id->check (::attendee/id %)))
attendees))))
(comment
(def db (:db bbbg.core/system))
(attendees-with-last-checks
db
(db/list db :attendee)
)
(db/insert! db :attendee-check
{::attendee/id #uuid "58bcd372-ff6e-49df-b280-23d24c5ba0f0"
::user/id #uuid "303fb606-5ef0-4682-ad7d-6429c670cd78"
::attendee-check/last-dose-at "2021-12-19"})
)
|