diff --git a/db/db.ddl b/db/db.ddl index 73a341395035c1a40837c13faaa97cff85dff2ca..7e27eb955a61e9ab922a18fdf60801f9699f9e5b 100644 --- a/db/db.ddl +++ b/db/db.ddl @@ -107,6 +107,7 @@ CREATE TABLE rounds ( score_mode score_mode NOT NULL DEFAULT 'basic', -- mód výsledkovky score_winner_limit int DEFAULT NULL, -- bodový limit na označení za vítěze score_successful_limit int DEFAULT NULL, -- bodový limit na označení za úspěšného řešitele + has_messages boolean NOT NULL DEFAULT false, -- má zprávičky UNIQUE (year, category, seq, part) ); @@ -298,3 +299,15 @@ CREATE TABLE jobs ( in_file varchar(255) DEFAULT NULL, out_file varchar(255) DEFAULT NULL ); + +-- Zprávičky k soutěžím + +CREATE TABLE messages ( + message_id serial PRIMARY KEY, + round_id int NOT NULL REFERENCES rounds(round_id), + created_at timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, -- čas publikování zprávičky + created_by int NOT NULL REFERENCES users(user_id), -- autor zprávičky + title text NOT NULL, + markdown text NOT NULL, + html text NOT NULL +); diff --git a/db/upgrade-20210322.sql b/db/upgrade-20210322.sql new file mode 100644 index 0000000000000000000000000000000000000000..305d2e742cb1e149dc781f077f742fd7829c1e85 --- /dev/null +++ b/db/upgrade-20210322.sql @@ -0,0 +1,16 @@ +SET ROLE 'mo_osmo'; + +-- Zprávičky k soutěžím + +ALTER TABLE rounds + ADD COLUMN has_messages boolean NOT NULL DEFAULT false; -- má zprávičky + +CREATE TABLE messages ( + message_id serial PRIMARY KEY, + round_id int NOT NULL REFERENCES rounds(round_id), + created_at timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, -- čas publikování zprávičky + created_by int NOT NULL REFERENCES users(user_id), -- autor zprávičky + title text NOT NULL, + markdown text NOT NULL, + html text NOT NULL +); diff --git a/mo/db.py b/mo/db.py index 4f8fa8ee55caf5129dffffbc8dc78b3894229eb6..5d2c50189a63c27e52d5a01d9a96d216c8eb8e14 100644 --- a/mo/db.py +++ b/mo/db.py @@ -209,6 +209,7 @@ class Round(Base): score_mode = Column(Enum(RoundScoreMode, name='score_mode'), nullable=False, server_default=text("'basic'::score_mode")) score_winner_limit = Column(Integer) score_successful_limit = Column(Integer) + has_messages = Column(Boolean, nullable=False, server_default=text("false")) master = relationship('Round', primaryjoin='Round.master_round_id == Round.round_id', remote_side='Round.round_id', post_update=True) @@ -592,6 +593,20 @@ class Job(Base): user = relationship('User') +class Message(Base): + __tablename__ = 'messages' + + message_id = Column(Integer, primary_key=True, server_default=text("nextval('messages_message_id_seq'::regclass)")) + round_id = Column(Integer, ForeignKey('rounds.round_id'), nullable=False) + created_at = Column(DateTime(True), nullable=False, server_default=text("CURRENT_TIMESTAMP")) + created_by = Column(Integer, ForeignKey('users.user_id')) + title = Column(Text, nullable=False) + markdown = Column(Text, nullable=False) + html = Column(Text, nullable=False) + + created_by_user = relationship('User') + + _engine: Optional[Engine] = None _session: Optional[Session] = None flask_db: Any = None