From 7f041d6300d80db2c774eecfc3d4fe88ffbf7598 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Tue, 30 Nov 2021 18:28:31 +0100
Subject: [PATCH] =?UTF-8?q?DB:=20Paper=20si=20pamatuje,=20zda=20a=20kdy=20?=
 =?UTF-8?q?jsme=20ho=20zkou=C5=A1eli=20opravit?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

To je potřeba, aby automatické opravování nezkoušelo tentýž paper
pořád dokola.
---
 db/db.ddl               | 6 ++++--
 db/upgrade-20211130.sql | 4 ++++
 mo/db.py                | 4 ++++
 3 files changed, 12 insertions(+), 2 deletions(-)
 create mode 100644 db/upgrade-20211130.sql

diff --git a/db/db.ddl b/db/db.ddl
index 3709f66c..83eda992 100644
--- a/db/db.ddl
+++ b/db/db.ddl
@@ -219,11 +219,13 @@ CREATE TABLE papers (
 	bytes		int		DEFAULT NULL,			-- velikost souboru
 	file_name	varchar(255)	DEFAULT NULL,			-- relativní cesta k souboru
 	orig_file_name	varchar(255)	DEFAULT NULL,			-- původní cesta, pokud PDF bylo poničené
-	note		text		NOT NULL DEFAULT ''		-- komentář uploadujícího
+	note		text		NOT NULL DEFAULT '',		-- komentář uploadujícího
+	fixed_at	timestamp with time zone	DEFAULT NULL
 	-- Sémantika práce s poničenými soubory:
 	--    - správná PDF mají orig_file_name=NULL
 	--    - pokud někdo odevzdá poničené, vyplní se orig_file_name, ale file_name=NULL
-	--    - časem se spustí oprava, která vyplní i file_name a přepočítá bytes
+	--    - časem se spustí oprava, která vyplní i file_name, přepočítá bytes a nastaví fixed_at
+	--    - pokud oprava selže, nastaví pouze fixed_at
 );
 
 CREATE INDEX papers_for_task_index ON papers (for_task);
diff --git a/db/upgrade-20211130.sql b/db/upgrade-20211130.sql
new file mode 100644
index 00000000..0ea3b0d2
--- /dev/null
+++ b/db/upgrade-20211130.sql
@@ -0,0 +1,4 @@
+SET ROLE 'mo_osmo';
+
+ALTER TABLE papers ADD COLUMN
+	fixed_at	timestamp with time zone	DEFAULT NULL;
diff --git a/mo/db.py b/mo/db.py
index ed3bcd3c..f78500f3 100644
--- a/mo/db.py
+++ b/mo/db.py
@@ -629,6 +629,7 @@ class Paper(Base):
     file_name = Column(String(255))
     orig_file_name = Column(String(255))
     note = Column(Text, nullable=False, server_default=text("''::text"))
+    fixed_at = Column(DateTime(True))
 
     task = relationship('Task')
     for_user_obj = relationship('User', primaryjoin='Paper.for_user == User.user_id')
@@ -650,6 +651,9 @@ class Paper(Base):
     def is_broken(self) -> bool:
         return self.file_name is None
 
+    def is_nonfixable(self) -> bool:
+        return self.is_broken() and self.fixed_at is not None
+
     def is_fixed(self) -> bool:
         return self.orig_file_name is not None and self.file_name is not None
 
-- 
GitLab