diff --git a/backend/resources/migrations/0001.main.sql b/backend/resources/migrations/0001-add-extensions.sql similarity index 100% rename from backend/resources/migrations/0001.main.sql rename to backend/resources/migrations/0001-add-extensions.sql diff --git a/backend/resources/migrations/0002.users.sql b/backend/resources/migrations/0002-add-profile-tables.sql similarity index 77% rename from backend/resources/migrations/0002.users.sql rename to backend/resources/migrations/0002-add-profile-tables.sql index 6a58e4187..230a35a5b 100644 --- a/backend/resources/migrations/0002.users.sql +++ b/backend/resources/migrations/0002-add-profile-tables.sql @@ -6,10 +6,7 @@ CREATE TABLE profile ( deleted_at timestamptz NULL, fullname text NOT NULL DEFAULT '', - email text NOT NULL, - pending_email text NULL, - photo text NOT NULL, password text NOT NULL, @@ -35,6 +32,27 @@ VALUES ('00000000-0000-0000-0000-000000000000'::uuid, '!'); +--- NOTE: this table is deleted in the next migrations + +CREATE TABLE profile_email ( + profile_id uuid NOT NULL REFERENCES profile(id) ON DELETE CASCADE, + + created_at timestamptz NOT NULL DEFAULT clock_timestamp(), + verified_at timestamptz NULL DEFAULT NULL, + + email text NOT NULL, + + is_main boolean NOT NULL DEFAULT false, + is_verified boolean NOT NULL DEFAULT false +); + +CREATE INDEX profile_email__profile_id__idx + ON profile_email (profile_id); + +CREATE UNIQUE INDEX profile_email__email__idx + ON profile_email (email); + + CREATE TABLE team ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), @@ -104,6 +122,20 @@ BEFORE UPDATE ON profile_attr FOR EACH ROW EXECUTE PROCEDURE update_modified_at(); +--- NOTE: this table is removed in the following migrations + +CREATE TABLE password_recovery_token ( + profile_id uuid NOT NULL REFERENCES profile(id) ON DELETE CASCADE, + token text NOT NULL, + + created_at timestamptz NOT NULL DEFAULT clock_timestamp(), + used_at timestamptz NULL, + + PRIMARY KEY (profile_id, token) +); + + + CREATE TABLE session ( id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), diff --git a/backend/resources/migrations/0003.projects.sql b/backend/resources/migrations/0003-add-project-tables.sql similarity index 100% rename from backend/resources/migrations/0003.projects.sql rename to backend/resources/migrations/0003-add-project-tables.sql diff --git a/backend/resources/migrations/0004.tasks.sql b/backend/resources/migrations/0004-add-tasks-tables.sql similarity index 100% rename from backend/resources/migrations/0004.tasks.sql rename to backend/resources/migrations/0004-add-tasks-tables.sql diff --git a/backend/resources/migrations/0005.libraries.sql b/backend/resources/migrations/0005-add-libraries-tables.sql similarity index 100% rename from backend/resources/migrations/0005.libraries.sql rename to backend/resources/migrations/0005-add-libraries-tables.sql diff --git a/backend/resources/migrations/0006.presence.sql b/backend/resources/migrations/0006-add-presence-tables.sql similarity index 100% rename from backend/resources/migrations/0006.presence.sql rename to backend/resources/migrations/0006-add-presence-tables.sql diff --git a/backend/resources/migrations/0007.remove-version.sql b/backend/resources/migrations/0007-drop-version-field-from-page-table.sql similarity index 100% rename from backend/resources/migrations/0007.remove-version.sql rename to backend/resources/migrations/0007-drop-version-field-from-page-table.sql diff --git a/backend/resources/migrations/0008-add-generic-token-table.sql b/backend/resources/migrations/0008-add-generic-token-table.sql new file mode 100644 index 000000000..2f2c7322e --- /dev/null +++ b/backend/resources/migrations/0008-add-generic-token-table.sql @@ -0,0 +1,14 @@ +--- Delete previously token related tables + +DROP TABLE password_recovery_token; + +--- Create a new generic table for store tokens. + +CREATE TABLE generic_token ( + token text PRIMARY KEY, + created_at timestamptz NOT NULL DEFAULT clock_timestamp(), + valid_until timestamptz NOT NULL, + content bytea NOT NULL +); + +COMMENT ON TABLE generic_token IS 'Table for generic tokens storage'; diff --git a/backend/resources/migrations/0008.generic-token.sql b/backend/resources/migrations/0008.generic-token.sql deleted file mode 100644 index 113917d0e..000000000 --- a/backend/resources/migrations/0008.generic-token.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE generic_token ( - token text PRIMARY KEY, - created_at timestamptz NOT NULL DEFAULT clock_timestamp(), - valid_until timestamptz NOT NULL, - content bytea NOT NULL -); diff --git a/backend/resources/migrations/0009-drop-profile-email-table.sql b/backend/resources/migrations/0009-drop-profile-email-table.sql new file mode 100644 index 000000000..467235e3b --- /dev/null +++ b/backend/resources/migrations/0009-drop-profile-email-table.sql @@ -0,0 +1,3 @@ +DROP INDEX profile_email__profile_id__idx; +DROP INDEX profile_email__email__idx; +DROP TABLE profile_email; diff --git a/backend/src/uxbox/migrations.clj b/backend/src/uxbox/migrations.clj index 62ae24c2f..f356af187 100644 --- a/backend/src/uxbox/migrations.clj +++ b/backend/src/uxbox/migrations.clj @@ -15,30 +15,41 @@ (def +migrations+ {:name "uxbox-main" :steps - [{:desc "Initial triggers and utils." - :name "0001-main" - :fn (mg/resource "migrations/0001.main.sql")} - {:desc "Initial auth related tables" - :name "0002-users" - :fn (mg/resource "migrations/0002.users.sql")} - {:desc "Initial projects tables" - :name "0003-projects" - :fn (mg/resource "migrations/0003.projects.sql")} - {:desc "Initial tasks related tables" - :name "0004-tasks" - :fn (mg/resource "migrations/0004.tasks.sql")} - {:desc "Initial libraries tables" - :name "0005-libraries" - :fn (mg/resource "migrations/0005.libraries.sql")} - {:desc "Initial presence tables" - :name "0006-presence" - :fn (mg/resource "migrations/0006.presence.sql")} - {:desc "Remove version" - :name "0007-remove-version" - :fn (mg/resource "migrations/0007.remove-version.sql")}]}) - {:desc "Initial generic token tables" - :name "0008-generic-token" - :fn (mg/resource "migrations/0007.generic-token.sql")}]}) + [{:desc "Add initial extensions and functions." + :name "0001-add-extensions" + :fn (mg/resource "migrations/0001-add-extensions.sql")} + + {:desc "Add profile related tables" + :name "0002-add-profile-tables" + :fn (mg/resource "migrations/0002-add-profile-tables.sql")} + + {:desc "Add project related tables" + :name "0003-add-project-tables" + :fn (mg/resource "migrations/0003-add-project-tables.sql")} + + {:desc "Add tasks related tables" + :name "0004-add-tasks-tables" + :fn (mg/resource "migrations/0004-add-tasks-tables.sql")} + + {:desc "Add libraries related tables" + :name "0005-add-libraries-tables" + :fn (mg/resource "migrations/0005-add-libraries-tables.sql")} + + {:desc "Add presence related tables" + :name "0006-add-presence-tables" + :fn (mg/resource "migrations/0006-add-presence-tables.sql")} + + {:desc "Drop version field from page table." + :name "0007-drop-version-field-from-page-table" + :fn (mg/resource "migrations/0007-drop-version-field-from-page-table.sql")} + + {:desc "Add generic token related tables." + :name "0008-add-generic-token-table.sql" + :fn (mg/resource "migrations/0008-add-generic-token-table.sql")} + + {:desc "Drop the profile_email table" + :name "0009-drop-profile-email-table.sql" + :fn (mg/resource "migrations/0009-drop-profile-email-table.sql")}]}) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Entry point