feat(db): update_score(score_id, new_score)

This commit is contained in:
283375 2023-06-28 02:39:46 +08:00
parent 15beeb5f35
commit 619d4029f8

View File

@ -208,11 +208,15 @@ class Database(metaclass=Singleton):
def get_scores( def get_scores(
self, self,
*, *,
score_id: Optional[int] = None,
song_id: Optional[List[str]] = None, song_id: Optional[List[str]] = None,
rating_class: Optional[List[int]] = None, rating_class: Optional[List[int]] = None,
): ):
where_clauses = [] where_clauses = []
params = [] params = []
if score_id:
where_clauses.append("id = ?")
params.append(score_id)
if song_id: if song_id:
where_clauses.append(f"song_id IN ({','.join('?'*len(song_id))})") where_clauses.append(f"song_id IN ({','.join('?'*len(song_id))})")
params.extend(song_id) params.extend(song_id)
@ -261,6 +265,23 @@ class Database(metaclass=Singleton):
conn.commit() conn.commit()
self.__trigger_update_hooks() 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): def delete_score(self, score_id: int):
with self.conn as conn: with self.conn as conn:
cursor = conn.cursor() cursor = conn.cursor()