impr: add duplicate detect in St3ScoreParser.write_database

This commit is contained in:
283375 2023-08-26 21:32:13 +08:00
parent b334108f8c
commit 8f30906e1b
Signed by: 283375
SSH Key Fingerprint: SHA256:UcX0qg6ZOSDOeieKPGokA5h7soykG61nz2uxuQgVLSk

View File

@ -1,9 +1,15 @@
import logging
import sqlite3
from typing import List
from sqlalchemy import select
from sqlalchemy.orm import Session
from ...models.scores import Score
from .common import ArcaeaParser
logger = logging.getLogger(__name__)
class St3ScoreParser(ArcaeaParser):
CLEAR_TYPES_MAP = {0: -1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1}
@ -42,3 +48,22 @@ class St3ScoreParser(ArcaeaParser):
)
return items
def write_database(self, session: Session, *, skip_duplicate=True):
parsed_scores = self.parse()
for parsed_score in parsed_scores:
query_score = session.scalar(
select(Score).where(
(Score.song_id == parsed_score.song_id)
& (Score.rating_class == parsed_score.rating_class)
& (Score.score == parsed_score.score)
)
)
if query_score and skip_duplicate:
logger.info(
f"{repr(parsed_score)} skipped because "
f"potential duplicate item {repr(query_score)} found."
)
continue
session.add(parsed_score)