From 94cb1f5e66345c051a6f998aff26fd6489e535ae Mon Sep 17 00:00:00 2001 From: maxminds Date: Sun, 13 Apr 2025 16:55:34 +0500 Subject: [PATCH] Added max amount of tasks on contest --- migrations/20240727123308_initial.sql | 42 ++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/migrations/20240727123308_initial.sql b/migrations/20240727123308_initial.sql index 25632a6..87a50ad 100644 --- a/migrations/20240727123308_initial.sql +++ b/migrations/20240727123308_initial.sql @@ -9,6 +9,24 @@ BEGIN END; $$; +CREATE FUNCTION check_max_tasks() RETURNS TRIGGER + LANGUAGE plpgsql AS +$$ +DECLARE + max_on_contest_tasks_amount integer := 50; +BEGIN + IF ( + SELECT count(*) FROM tasks + WHERE contest_id = NEW.contest_id + ) >= ( + max_on_contest_tasks_amount + ) THEN + RAISE EXCEPTION 'Exceeded max tasks for this contest'; +END IF; + RETURN NEW; +END; +$$; + CREATE TABLE IF NOT EXISTS problems ( id serial NOT NULL, @@ -73,6 +91,11 @@ CREATE TABLE IF NOT EXISTS tasks CHECK (position >= 0) ); +CREATE TRIGGER max_tasks_on_contest_check + BEFORE INSERT ON tasks + FOR EACH STATEMENT +EXECUTE FUNCTION check_max_tasks(); + CREATE TRIGGER on_tasks_update BEFORE UPDATE ON tasks @@ -98,6 +121,7 @@ CREATE TRIGGER on_participants_update FOR EACH ROW EXECUTE PROCEDURE updated_at_update(); + CREATE TABLE IF NOT EXISTS solutions ( id serial NOT NULL, @@ -125,15 +149,17 @@ EXECUTE PROCEDURE updated_at_update(); -- +goose Down -- +goose StatementBegin +DROP TRIGGER IF EXISTS on_solutions_update ON solutions; +DROP TABLE IF EXISTS solutions; +DROP TRIGGER IF EXISTS on_participants_update ON participants; +DROP TABLE IF EXISTS participants; +DROP TRIGGER IF EXISTS on_tasks_update ON tasks; +DROP TRIGGER IF EXISTS max_tasks_on_contest_check ON tasks; +DROP TABLE IF EXISTS tasks; DROP TRIGGER IF EXISTS on_problems_update ON problems; DROP TABLE IF EXISTS problems; DROP TRIGGER IF EXISTS on_contests_update ON contests; DROP TABLE IF EXISTS contests; -DROP TRIGGER IF EXISTS on_tasks_update ON tasks; -DROP TABLE IF EXISTS tasks; -DROP TRIGGER IF EXISTS on_participants_update ON participants; -DROP TABLE IF EXISTS participants; -DROP TRIGGER IF EXISTS on_solutions_update ON solutions; -DROP TABLE IF EXISTS solutions; -DROP FUNCTION updated_at_update(); --- +goose StatementEnd +DROP FUNCTION IF EXISTS updated_at_update(); +DROP FUNCTION IF EXISTS check_max_tasks(); +-- +goose StatementEnd \ No newline at end of file -- 2.45.3