feat(panettone): Add a user settings table
Add a new user-settings table and dao class, with a flag that allows an individual user to disable receiving email notifications Change-Id: I537bfca74490941934c0adc7328bcd6ed5c9c0b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2803 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
parent
9551b628d0
commit
37d573479b
2 changed files with 33 additions and 1 deletions
|
@ -14,6 +14,34 @@
|
|||
;;; Schema
|
||||
;;;
|
||||
|
||||
(defclass user-settings ()
|
||||
((user-dn :col-type string :initarg :user-dn :accessor user-dn)
|
||||
(enable-email-notifications
|
||||
:col-type boolean
|
||||
:initarg :enable-email-notifications
|
||||
:accessor enable-email-notifications-p
|
||||
:initform t
|
||||
:col-default t))
|
||||
(:metaclass dao-class)
|
||||
(:keys user-dn)
|
||||
(:table-name user_settings)
|
||||
(:documentation
|
||||
"Panettone settings for an individual user DN"))
|
||||
|
||||
(deftable (user-settings "user_settings")
|
||||
(!dao-def))
|
||||
|
||||
(defun settings-for-user (dn)
|
||||
"Retrieve the settings for the user with the given DN, creating a new row in
|
||||
the database if not yet present"
|
||||
(or
|
||||
(car
|
||||
(query-dao
|
||||
'user-settings
|
||||
(:select '* :from 'user-settings :where (:= 'user-dn dn))))
|
||||
(insert-dao (make-instance 'user-settings :user-dn dn))))
|
||||
|
||||
|
||||
(define-constant +issue-statuses+ '(:open :closed)
|
||||
:test #'equal)
|
||||
|
||||
|
@ -134,7 +162,8 @@ its new value will be formatted using ~A into NEW-VALUE"))
|
|||
(define-constant +all-tables+
|
||||
'(issue
|
||||
issue-comment
|
||||
issue-event)
|
||||
issue-event
|
||||
user-settings)
|
||||
:test #'equal)
|
||||
|
||||
(defun ddl/create-tables ()
|
||||
|
|
|
@ -34,6 +34,9 @@
|
|||
(:export
|
||||
:connect-postgres :ddl/init
|
||||
|
||||
:user-settings
|
||||
:user-dn :enable-email-notifications-p :settings-for-user
|
||||
|
||||
:issue :issue-comment :issue-event
|
||||
:id :subject :body :author-dn :issue-id :status :created-at :acting-user-dn
|
||||
:field :previous-value :new-value
|
||||
|
|
Loading…
Reference in a new issue