Skip to content
Snippets Groups Projects
Commit 2a429238 authored by Martin Mareš's avatar Martin Mareš
Browse files

Registrace: Změny v DB

- round: přibyly sloupec enroll_mode a enroll_advert
- participant: přibyl sloupec registered_on
- part_state: přidán stav "active", zrušeny "invited" a "present"
parent 6532a51e
No related branches found
No related tags found
1 merge request!86Registrace
This commit is part of merge request !86. Comments created here will be created in the context of that merge request.
...@@ -89,6 +89,12 @@ CREATE TYPE score_mode AS ENUM ( ...@@ -89,6 +89,12 @@ CREATE TYPE score_mode AS ENUM (
'mo' -- jednoznačné pořadí podle pravidel MO 'mo' -- jednoznačné pořadí podle pravidel MO
); );
CREATE TYPE enroll_mode AS ENUM ( -- režim přihlašování účastníků
'manual', -- přihlašuje organizátor
'register', -- účastník se registruje
'confirm' -- účastník se registruje, ale org ho musí potvrdit
);
CREATE TABLE rounds ( CREATE TABLE rounds (
round_id serial PRIMARY KEY, round_id serial PRIMARY KEY,
master_round_id int DEFAULT NULL REFERENCES rounds(round_id), master_round_id int DEFAULT NULL REFERENCES rounds(round_id),
...@@ -109,6 +115,8 @@ CREATE TABLE rounds ( ...@@ -109,6 +115,8 @@ CREATE TABLE rounds (
score_successful_limit int DEFAULT NULL, -- bodový limit na označení za úspěšného řešitele score_successful_limit int DEFAULT NULL, -- bodový limit na označení za úspěšného řešitele
points_step numeric(2,1) NOT NULL DEFAULT 1, -- s jakou přesností jsou přidělovány body (celé aneb 1, 0.5, 0.1) points_step numeric(2,1) NOT NULL DEFAULT 1, -- s jakou přesností jsou přidělovány body (celé aneb 1, 0.5, 0.1)
has_messages boolean NOT NULL DEFAULT false, -- má zprávičky has_messages boolean NOT NULL DEFAULT false, -- má zprávičky
enroll_mode enroll_mode NOT NULL DEFAULT 'manual', -- režim přihlašování (pro vyšší kola vždy 'manual')
enroll_advert varchar(255) NOT NULL DEFAULT '', -- popis v přihlašovacím formuláři
UNIQUE (year, category, seq, part) UNIQUE (year, category, seq, part)
); );
...@@ -133,17 +141,19 @@ CREATE TABLE participants ( ...@@ -133,17 +141,19 @@ CREATE TABLE participants (
school int NOT NULL REFERENCES places(place_id), school int NOT NULL REFERENCES places(place_id),
birth_year int NOT NULL, birth_year int NOT NULL,
grade varchar(20) NOT NULL, -- třída ve tvaru "X/Y" grade varchar(20) NOT NULL, -- třída ve tvaru "X/Y"
registered_on timestamp with time zone DEFAULT NULL, -- kdy se účastník přihlásil (NULL, pokud ho přihlásil organizátor)
PRIMARY KEY (user_id, year) PRIMARY KEY (user_id, year)
); );
-- Účast v soutěžním kole -- Účast v soutěžním kole
CREATE TYPE part_state AS ENUM ( CREATE TYPE part_state AS ENUM (
'registered', -- sám se přihlásil 'registered', -- sám se přihlásil, čeká na potvrzení organizátorem
'invited', -- pozván -- 'invited', -- pozván (už nepoužíváme)
'refused', -- odmítl účast 'active', -- soutěží (přihlášku zadal/potvrdil organizátor)
'present', -- soutěžil 'refused', -- organizátor odmítl přihlášku
'absent', -- bez omluvy nedorazil -- 'present', -- soutěžil (už nepoužíváme)
'absent', -- nedorazil
'disqualified' -- diskvalifikovaný 'disqualified' -- diskvalifikovaný
); );
......
SET ROLE 'mo_osmo';
CREATE TYPE enroll_mode AS ENUM ( -- režim přihlašování účastníků
'manual', -- přihlašuje organizátor
'register', -- účastník se registruje
'confirm' -- účastník se registruje, ale org ho musí potvrdit
);
ALTER TABLE rounds ADD COLUMN enroll_mode enroll_mode NOT NULL DEFAULT 'manual';
ALTER TABLE rounds ADD COLUMN enroll_advert varchar(255) NOT NULL DEFAULT '';
ALTER TYPE part_state ADD VALUE 'active' AFTER 'invited';
ALTER TABLE participants ADD COLUMN registered_on timestamp with time zone DEFAULT NULL;
UPDATE participations SET state='active' WHERE state IN ('registered', 'invited');
...@@ -203,6 +203,22 @@ round_score_mode_names = { ...@@ -203,6 +203,22 @@ round_score_mode_names = {
} }
class RoundEnrollMode(MOEnum):
manual = auto()
register = auto()
confirm = auto()
def friendly_name(self) -> str:
return round_enroll_mode_names[self]
round_enroll_mode_names = {
RoundEnrollMode.manual: "Jen organizátoři",
RoundEnrollMode.register: "Účastníci sami",
RoundEnrollMode.confirm: "Potvrzení organizátorem",
}
# V DB jako numeric(2,1), používá se tak snadněji, než enum # V DB jako numeric(2,1), používá se tak snadněji, než enum
round_points_step_names = { round_points_step_names = {
decimal.Decimal('1'): "Celé body", decimal.Decimal('1'): "Celé body",
...@@ -237,6 +253,8 @@ class Round(Base): ...@@ -237,6 +253,8 @@ class Round(Base):
score_successful_limit = Column(Numeric) score_successful_limit = Column(Numeric)
points_step = Column(Numeric, nullable=False) points_step = Column(Numeric, nullable=False)
has_messages = Column(Boolean, nullable=False, server_default=text("false")) has_messages = Column(Boolean, nullable=False, server_default=text("false"))
enroll_mode = Column(Enum(RoundEnrollMode, name='enroll_mode'), nullable=False, server_default=text("'basic'::enroll_mode"))
enroll_advert = Column(String(255), nullable=False, server_default=text("''::text"))
master = relationship('Round', primaryjoin='Round.master_round_id == Round.round_id', remote_side='Round.round_id', post_update=True) master = relationship('Round', primaryjoin='Round.master_round_id == Round.round_id', remote_side='Round.round_id', post_update=True)
...@@ -403,6 +421,7 @@ class Participant(Base): ...@@ -403,6 +421,7 @@ class Participant(Base):
school = Column(Integer, ForeignKey('places.place_id'), nullable=False) school = Column(Integer, ForeignKey('places.place_id'), nullable=False)
birth_year = Column(Integer, nullable=False) birth_year = Column(Integer, nullable=False)
grade = Column(String(20), nullable=False) grade = Column(String(20), nullable=False)
registered_on = Column(DateTime(True))
user = relationship('User') user = relationship('User')
school_place = relationship('Place', primaryjoin='Participant.school == Place.place_id') school_place = relationship('Place', primaryjoin='Participant.school == Place.place_id')
...@@ -410,9 +429,8 @@ class Participant(Base): ...@@ -410,9 +429,8 @@ class Participant(Base):
class PartState(MOEnum): class PartState(MOEnum):
registered = auto() registered = auto()
invited = auto() active = auto()
refused = auto() refused = auto()
present = auto()
absent = auto() absent = auto()
disqualified = auto() disqualified = auto()
...@@ -422,9 +440,8 @@ class PartState(MOEnum): ...@@ -422,9 +440,8 @@ class PartState(MOEnum):
part_state_names = { part_state_names = {
PartState.registered: 'přihlášený', PartState.registered: 'přihlášený',
PartState.invited: 'pozvaný', PartState.active: 'soutěží',
PartState.refused: 'odmítnutý', PartState.refused: 'odmítnutý',
PartState.present: 'přítomný',
PartState.absent: 'nepřítomný', PartState.absent: 'nepřítomný',
PartState.disqualified: 'diskvalifikovaný', PartState.disqualified: 'diskvalifikovaný',
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment