mirror of
https://codeberg.org/likwid/likwid.git
synced 2026-02-10 05:23:09 +00:00
51 lines
1.9 KiB
MySQL
51 lines
1.9 KiB
MySQL
|
|
-- Voting System Schema
|
||
|
|
|
||
|
|
-- Proposal status enum
|
||
|
|
CREATE TYPE proposal_status AS ENUM ('draft', 'discussion', 'voting', 'closed', 'archived');
|
||
|
|
|
||
|
|
-- Proposals table
|
||
|
|
CREATE TABLE proposals (
|
||
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
community_id UUID NOT NULL REFERENCES communities(id) ON DELETE CASCADE,
|
||
|
|
author_id UUID NOT NULL REFERENCES users(id),
|
||
|
|
title VARCHAR(255) NOT NULL,
|
||
|
|
description TEXT NOT NULL,
|
||
|
|
status proposal_status NOT NULL DEFAULT 'draft',
|
||
|
|
voting_method VARCHAR(50) NOT NULL DEFAULT 'approval',
|
||
|
|
voting_starts_at TIMESTAMPTZ,
|
||
|
|
voting_ends_at TIMESTAMPTZ,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Proposal options (for voting)
|
||
|
|
CREATE TABLE proposal_options (
|
||
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
proposal_id UUID NOT NULL REFERENCES proposals(id) ON DELETE CASCADE,
|
||
|
|
label VARCHAR(255) NOT NULL,
|
||
|
|
description TEXT,
|
||
|
|
sort_order INT NOT NULL DEFAULT 0,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Votes table (approval voting - can vote for multiple options)
|
||
|
|
CREATE TABLE votes (
|
||
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
proposal_id UUID NOT NULL REFERENCES proposals(id) ON DELETE CASCADE,
|
||
|
|
option_id UUID NOT NULL REFERENCES proposal_options(id) ON DELETE CASCADE,
|
||
|
|
voter_id UUID NOT NULL REFERENCES voting_identities(id),
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
UNIQUE(proposal_id, option_id, voter_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX idx_proposals_community ON proposals(community_id);
|
||
|
|
CREATE INDEX idx_proposals_status ON proposals(status);
|
||
|
|
CREATE INDEX idx_proposal_options_proposal ON proposal_options(proposal_id);
|
||
|
|
CREATE INDEX idx_votes_proposal ON votes(proposal_id);
|
||
|
|
CREATE INDEX idx_votes_option ON votes(option_id);
|
||
|
|
|
||
|
|
-- Updated_at trigger
|
||
|
|
CREATE TRIGGER proposals_updated_at BEFORE UPDATE ON proposals
|
||
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|