diff options
Diffstat (limited to 'web/panettone/src')
-rw-r--r-- | web/panettone/src/migrations/3921488651-create-users-table.lisp | 6 | ||||
-rw-r--r-- | web/panettone/src/model.lisp | 32 | ||||
-rw-r--r-- | web/panettone/src/packages.lisp | 5 |
3 files changed, 41 insertions, 2 deletions
diff --git a/web/panettone/src/migrations/3921488651-create-users-table.lisp b/web/panettone/src/migrations/3921488651-create-users-table.lisp new file mode 100644 index 000000000000..2598ab101e7f --- /dev/null +++ b/web/panettone/src/migrations/3921488651-create-users-table.lisp @@ -0,0 +1,6 @@ +"Add a table to store information about users, load the initial set of users +from the authentication provider, and change fks for other tables" + +(defun up () + (panettone.model:create-table-if-not-exists + 'panettone.model:user)) diff --git a/web/panettone/src/model.lisp b/web/panettone/src/model.lisp index 15fe4815be1a..a106e9479bb2 100644 --- a/web/panettone/src/model.lisp +++ b/web/panettone/src/model.lisp @@ -39,6 +39,22 @@ initialised at launch time.") ;;; Schema ;;; +(defclass user () + ((sub :col-type uuid :initarg :sub :accessor sub + :documentation + "ID for the user in the authentication provider. Taken from the `:SUB' + field in the JWT when the user first logged in") + (username :col-type string :initarg :username :accessor username) + (email :col-type string :initarg :email :accessor email)) + (:metaclass dao-class) + (:keys sub) + (:table-name users) + (:documentation + "Panettone users. Uses an external authentication provider.")) + +(deftable (user "users") + (!dao-def)) + (defclass user-settings () ((user-dn :col-type string :initarg :user-dn :accessor user-dn) (enable-email-notifications @@ -220,6 +236,17 @@ its new value will be formatted using ~A into NEW-VALUE")) (deftable migration (!dao-def)) ;;; +;;; Utils +;;; + +(defun create-table-if-not-exists (name) + " Takes the name of a dao-class and creates the table identified by symbol by +executing all forms in its definition as found in the *tables* list, if it does +not already exist." + (unless (table-exists-p (dao-table-name name)) + (create-table name))) + +;;; ;;; Migrations ;;; @@ -571,8 +598,9 @@ explicitly subscribing to / unsubscribing from individual issues." ;; Creating new migrations (setq *migrations-dir* (merge-pathnames "migrations/")) - (generate-migration "add-issue-tsv" - :documentation "Add tsvector for full-text search of issues") + (generate-migration "create-users-table" + :documentation "Add a table to store information about users") + (load-migrations) ;; Running migrations (with-connection *pg-spec* diff --git a/web/panettone/src/packages.lisp b/web/panettone/src/packages.lisp index cc53be6cb02f..8e77c0ff2b5f 100644 --- a/web/panettone/src/packages.lisp +++ b/web/panettone/src/packages.lisp @@ -42,6 +42,11 @@ :migrate :*pg-spec* + :create-table-if-not-exists + + :user + :sub :username :email + :user-settings :user-dn :enable-email-notifications-p :settings-for-user :update-user-settings :enable-email-notifications |