blob: 1b5a4e11ecd7b30d989ec202cd89a64c45205c73 (
plain) (
tree)
|
|
(ns bbbg.db.event
(:require
[bbbg.attendee :as attendee]
[bbbg.db :as db]
[bbbg.event :as event]
[bbbg.util.sql :refer [count-where]]
[honeysql.helpers
:refer [merge-group-by merge-left-join merge-select merge-where]]
[java-time :refer [local-date local-date-time local-time]]))
(defn create! [db event]
(db/insert! db :event (select-keys event [::event/date])))
(defn attended!
[db params]
(db/execute!
db
{:insert-into :event-attendee
:values [{:event_id (::event/id params)
:attendee_id (::attendee/id params)
:attended true}]
:upsert {:on-conflict [:event-id :attendee-id]
:do-update-set! {:attended true}}}))
(defn on-day
([day] {:select [:event.*]
:from [:event]
:where [:= :date (str day)]})
([db day]
(db/list db (on-day day))))
(def end-of-day-hour
;; 7am utc = 3am nyc
7)
(defn current-day
([] (current-day (local-date-time)))
([dt]
(if (<= 0
(.getHour (local-time dt))
end-of-day-hour)
(java-time/minus
(local-date dt)
(java-time/days 1))
(local-date dt))))
(comment
(current-day
(local-date-time
2022 5 1
1 13 0))
)
(defn today
([] (on-day (current-day)))
([db] (db/list db (today))))
(defn upcoming
([] (upcoming {:select [:event.*] :from [:event]}))
([query]
(merge-where query [:>= :date (local-date)])))
(defn past
([] (past {:select [:event.*] :from [:event]}))
([query]
(merge-where query [:< :date (local-date)])))
(defn with-attendee-counts
[query]
(-> query
(merge-left-join :event_attendee [:= :event.id :event_attendee.event-id])
(merge-select :%count.event_attendee.attendee_id)
(merge-group-by :event.id :event_attendee.event-id)))
(defn with-stats
[query]
(-> query
(merge-left-join :event_attendee [:= :event.id :event_attendee.event-id])
(merge-select
[(count-where :event-attendee.rsvpd_attending) :num-rsvps]
[(count-where :event-attendee.attended) :num-attendees])
(merge-group-by :event.id)))
(comment
(def db (:db bbbg.core/system))
(db/list db (-> (today) (with-attendee-counts)))
(honeysql.format/format
(honeysql-postgres.helpers/upsert {:insert-into :foo
:values {:bar 1}}
(-> (honeysql-postgres.helpers/on-conflict :did)
(honeysql-postgres.helpers/do-update-set! [:did true]))))
)
|