From 619d4029f8563b47bbb7997ec6aa893936fdd80f Mon Sep 17 00:00:00 2001 From: 283375 Date: Wed, 28 Jun 2023 02:39:46 +0800 Subject: [PATCH] feat(db): `update_score(score_id, new_score)` --- src/arcaea_offline/database.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/arcaea_offline/database.py b/src/arcaea_offline/database.py index 9e2ce7f..5373676 100644 --- a/src/arcaea_offline/database.py +++ b/src/arcaea_offline/database.py @@ -208,11 +208,15 @@ class Database(metaclass=Singleton): def get_scores( self, *, + score_id: Optional[int] = None, song_id: Optional[List[str]] = None, rating_class: Optional[List[int]] = None, ): where_clauses = [] params = [] + if score_id: + where_clauses.append("id = ?") + params.append(score_id) if song_id: where_clauses.append(f"song_id IN ({','.join('?'*len(song_id))})") params.extend(song_id) @@ -261,6 +265,23 @@ class Database(metaclass=Singleton): conn.commit() self.__trigger_update_hooks() + def update_score(self, score_id: int, new_score: ScoreInsert): + # ensure we are only updating 1 row + scores = self.get_scores(score_id=score_id) + print(score_id) + assert len(scores) == 1, "Cannot update multiple or non-existing score(s)" + columns = self.__get_columns_from_dataclass(ScoreInsert) + params = [getattr(new_score, column) for column in columns] + [score_id] + update_columns_param_clause = ", ".join([f"{column} = ?" for column in columns]) + with self.conn as conn: + cursor = conn.cursor() + cursor.execute( + f"UPDATE scores SET {update_columns_param_clause} WHERE id = ?", + params, + ) + conn.commit() + self.__trigger_update_hooks() + def delete_score(self, score_id: int): with self.conn as conn: cursor = conn.cursor()