From e8e8eb4776aa2822707a3a53ca483643a6cb2aa8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Mon, 22 Mar 2021 23:38:12 +0100
Subject: [PATCH] =?UTF-8?q?DB:=20Zpr=C3=A1vi=C4=8Dky?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 db/db.ddl               | 13 +++++++++++++
 db/upgrade-20210322.sql | 16 ++++++++++++++++
 mo/db.py                | 15 +++++++++++++++
 3 files changed, 44 insertions(+)
 create mode 100644 db/upgrade-20210322.sql

diff --git a/db/db.ddl b/db/db.ddl
index 73a34139..7e27eb95 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 00000000..305d2e74
--- /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 4f8fa8ee..5d2c5018 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
-- 
GitLab