mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 02:32:57 +00:00
upload
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
-- Create polls table
|
||||
CREATE TABLE IF NOT EXISTS polls (
|
||||
id SERIAL PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
type VARCHAR(50) NOT NULL DEFAULT 'single',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'draft',
|
||||
start_date TIMESTAMP,
|
||||
end_date TIMESTAMP,
|
||||
allow_multiple BOOLEAN DEFAULT FALSE,
|
||||
max_choices INTEGER DEFAULT 1,
|
||||
show_results VARCHAR(20) DEFAULT 'after_vote',
|
||||
require_auth BOOLEAN DEFAULT FALSE,
|
||||
allow_guest_vote BOOLEAN DEFAULT TRUE,
|
||||
featured BOOLEAN DEFAULT FALSE,
|
||||
category_id INTEGER REFERENCES categories(id) ON DELETE SET NULL,
|
||||
related_match_id INTEGER,
|
||||
image_url VARCHAR(500),
|
||||
total_votes INTEGER DEFAULT 0,
|
||||
created_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at TIMESTAMP
|
||||
);
|
||||
|
||||
-- Create poll_options table
|
||||
CREATE TABLE IF NOT EXISTS poll_options (
|
||||
id SERIAL PRIMARY KEY,
|
||||
poll_id INTEGER NOT NULL REFERENCES polls(id) ON DELETE CASCADE,
|
||||
text VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
image_url VARCHAR(500),
|
||||
display_order INTEGER DEFAULT 0,
|
||||
vote_count INTEGER DEFAULT 0,
|
||||
player_id INTEGER REFERENCES players(id) ON DELETE SET NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Create poll_votes table
|
||||
CREATE TABLE IF NOT EXISTS poll_votes (
|
||||
id SERIAL PRIMARY KEY,
|
||||
poll_id INTEGER NOT NULL REFERENCES polls(id) ON DELETE CASCADE,
|
||||
option_id INTEGER NOT NULL REFERENCES poll_options(id) ON DELETE CASCADE,
|
||||
user_id INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
||||
ip_hash VARCHAR(64),
|
||||
user_agent VARCHAR(500),
|
||||
session_token VARCHAR(100),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Create indexes for performance
|
||||
CREATE INDEX IF NOT EXISTS idx_polls_status ON polls(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_polls_featured ON polls(featured);
|
||||
CREATE INDEX IF NOT EXISTS idx_polls_start_date ON polls(start_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_polls_end_date ON polls(end_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_polls_deleted_at ON polls(deleted_at);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_poll_options_poll_id ON poll_options(poll_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_poll_options_display_order ON poll_options(display_order);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_poll_votes_poll_id ON poll_votes(poll_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_poll_votes_option_id ON poll_votes(option_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_poll_votes_user_id ON poll_votes(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_poll_votes_ip_hash ON poll_votes(ip_hash);
|
||||
CREATE INDEX IF NOT EXISTS idx_poll_votes_session_token ON poll_votes(session_token);
|
||||
|
||||
-- Add trigger for updated_at
|
||||
CREATE OR REPLACE FUNCTION update_polls_updated_at()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = CURRENT_TIMESTAMP;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER trigger_polls_updated_at
|
||||
BEFORE UPDATE ON polls
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_polls_updated_at();
|
||||
|
||||
CREATE TRIGGER trigger_poll_options_updated_at
|
||||
BEFORE UPDATE ON poll_options
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_polls_updated_at();
|
||||
Reference in New Issue
Block a user