39 lines
1.3 KiB
SQL
39 lines
1.3 KiB
SQL
CREATE TABLE IF NOT EXISTS issues (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
title VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
start_time TIMESTAMPTZ NOT NULL,
|
|
end_time TIMESTAMPTZ NOT NULL,
|
|
created TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
version INT NOT NULL DEFAULT 1
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS options (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
issue_id BIGINT NOT NULL REFERENCES issues(id) ON DELETE CASCADE,
|
|
label VARCHAR(255) NOT NULL,
|
|
created TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
version INT NOT NULL DEFAULT 1
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS vote_tokens (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
issue_id BIGINT NOT NULL REFERENCES issues(id) ON DELETE CASCADE,
|
|
token UUID NOT NULL UNIQUE DEFAULT gen_random_uuid(),
|
|
used BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
version INT NOT NULL DEFAULT 1
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS votes (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
token UUID NOT NULL UNIQUE REFERENCES vote_tokens(token) ON DELETE CASCADE,
|
|
option_id BIGINT NOT NULL REFERENCES options(id) ON DELETE CASCADE,
|
|
created TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
version INT NOT NULL DEFAULT 1
|
|
);
|
|
|
|
CREATE INDEX idx_votes_option_id ON votes(option_id);
|
|
CREATE INDEX idx_vote_tokens_issue_id ON vote_tokens(issue_id);
|
|
CREATE INDEX idx_options_issue_id ON options(issue_id);
|