diff --git a/internal/db/migrations/00022_recreate_space_tables.sql b/internal/db/migrations/00022_recreate_space_tables.sql new file mode 100644 index 0000000..4514608 --- /dev/null +++ b/internal/db/migrations/00022_recreate_space_tables.sql @@ -0,0 +1,38 @@ +-- +goose Up +-- +goose StatementBegin +CREATE TABLE IF NOT EXISTS spaces ( + id TEXT PRIMARY KEY NOT NULL, + name TEXT NOT NULL, + owner_id TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS space_members ( + space_id TEXT NOT NULL, + user_id TEXT NOT NULL, + role TEXT NOT NULL CHECK (role IN ('owner', 'member')), + joined_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (space_id, user_id), + FOREIGN KEY (space_id) REFERENCES spaces(id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS space_invitations ( + token TEXT PRIMARY KEY NOT NULL, + space_id TEXT NOT NULL, + inviter_id TEXT NOT NULL, + invitee_email TEXT NOT NULL, + expires_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (space_id) REFERENCES spaces(id) ON DELETE CASCADE, + FOREIGN KEY (inviter_id) REFERENCES users(id) ON DELETE CASCADE +); +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DROP TABLE space_invitations; +DROP TABLE space_members; +DROP TABLE spaces; +-- +goose StatementEnd