From 703408fcaa558081c694ea0800da127f6155b5a1 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 10 Mar 2023 11:49:08 +0100
Subject: [PATCH] =?UTF-8?q?merge-users:=20=C5=98e=C5=A1en=C3=AD=20koliz?=
 =?UTF-8?q?=C3=AD=20v=20participantech?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Taktéž ruším automatické mazání účasti v testovací soutěži,
už žádné nové nevznikají a staré nejspíš brzy dávkově zruším.
---
 bin/merge-users | 28 ++++++++--------------------
 1 file changed, 8 insertions(+), 20 deletions(-)

diff --git a/bin/merge-users b/bin/merge-users
index 396ab39c..650827b7 100755
--- a/bin/merge-users
+++ b/bin/merge-users
@@ -34,31 +34,19 @@ print(f"Slučuji UID {suid} do UID {duid}")
 sess = db.get_session()
 conn = sess.connection()
 
-test_round = sess.query(db.Round).filter_by(category='T').one_or_none()
-if test_round is not None:
-    test_submits = (sess
-                    .query(db.Solution)
-                    .join(db.Task)
-                    .filter(db.Solution.user_id == suid)
-                    .filter(db.Task.round == test_round)
-                    .filter(db.Round.category == 'T')
-                    .all())
-    if test_submits:
-        mo.util.die("Zdrojový účastník něco odevzdal v testovací soutěži, nutno vyřešit ručně")
-    test_contest = sess.query(db.Contest).filter_by(round=test_round).one_or_none()
-    test_contest_id = test_contest.contest_id if test_contest is not None else None
-else:
-    test_contest = None
-    test_contest_id = None
-
 sess.flush()
 
 conn.execute(db.Log.__table__.update().where(db.Log.changed_by == suid).values(changed_by=duid))
 
-conn.execute(db.Participant.__table__.update().where(db.Participant.user_id == suid).values(user_id=duid))
+src_pants = sess.query(db.Participant).filter_by(user_id=suid)
+dst_pants = sess.query(db.Participant).filter_by(user_id=duid)
+for pant in src_pants:
+    if any(d.year == pant.year for d in dst_pants):
+        print(f"Účast v ročníku {pant.year} koliduje, zdrojovou zahazuji")
+        sess.delete(pant)
+sess.flush()
 
-if test_contest:
-    conn.execute(db.Participation.__table__.delete().where(and_(db.Participation.user_id == suid, db.Participation.contest_id == test_contest_id)))
+conn.execute(db.Participant.__table__.update().where(db.Participant.user_id == suid).values(user_id=duid))
 
 conn.execute(db.Participation.__table__.update().where(db.Participation.user_id == suid).values(user_id=duid))
 
-- 
GitLab