more simplify

This commit is contained in:
Georges-Antoine Assi
2026-04-06 22:29:55 -04:00
parent b2e1e094f7
commit 4e5ee69343
2 changed files with 31 additions and 30 deletions

View File

@@ -22,37 +22,39 @@ class DBPlaySessionsHandler(DBBaseHandler):
return play_sessions
@begin_session
def find_existing_sesssion(
def find_existing(
self,
user_id: int,
keys: list[tuple[str | None, int | None, datetime]],
device_id: str | None,
rom_start_pairs: list[tuple[int | None, datetime]],
session: Session = None, # type: ignore
) -> set[tuple[str | None, int | None, datetime]]:
if not keys:
) -> set[tuple[int | None, datetime]]:
"""Return which (rom_id, start_time) pairs already exist for this user+device."""
if not rom_start_pairs:
return set()
clauses = []
for device_id, rom_id, start_time in keys:
parts = [PlaySession.start_time == start_time]
if device_id is None:
parts.append(PlaySession.device_id.is_(None))
else:
parts.append(PlaySession.device_id == device_id)
if rom_id is None:
parts.append(PlaySession.rom_id.is_(None))
else:
parts.append(PlaySession.rom_id == rom_id)
clauses.append(and_(*parts))
device_clause = (
PlaySession.device_id.is_(None)
if device_id is None
else PlaySession.device_id == device_id
)
rom_clauses = []
for rom_id, start_time in rom_start_pairs:
rom_match = (
PlaySession.rom_id.is_(None)
if rom_id is None
else PlaySession.rom_id == rom_id
)
rom_clauses.append(and_(rom_match, PlaySession.start_time == start_time))
stmt = select(
PlaySession.device_id,
PlaySession.rom_id,
PlaySession.start_time,
).where(PlaySession.user_id == user_id, or_(*clauses))
rows = session.execute(stmt).all()
).where(PlaySession.user_id == user_id, device_clause, or_(*rom_clauses))
return {
(
r.device_id,
r.rom_id,
(
r.start_time.replace(tzinfo=timezone.utc)
@@ -60,7 +62,7 @@ class DBPlaySessionsHandler(DBBaseHandler):
else r.start_time
),
)
for r in rows
for r in session.execute(stmt).all()
}
@begin_session

View File

@@ -92,22 +92,21 @@ def ingest_play_sessions(
valid.append((idx, resolved_rom_id, item))
# Phase 2: Batch dedup check
dedup_keys = [
(resolved_device_id, rom_id, to_utc(item["start_time"]))
for _, rom_id, item in valid
rom_start_pairs = [
(rom_id, to_utc(item["start_time"])) for _, rom_id, item in valid
]
existing_keys = db_play_session_handler.find_existing_sesssion(
user_id=user_id, keys=dedup_keys
existing = db_play_session_handler.find_existing(
user_id=user_id, device_id=resolved_device_id, rom_start_pairs=rom_start_pairs
)
seen_keys: set[tuple[str | None, int | None, datetime]] = set()
seen: set[tuple[int | None, datetime]] = set()
to_insert: list[tuple[int, int | None, PlaySession]] = []
for (idx, resolved_rom_id, item), key in zip(valid, dedup_keys, strict=True):
if key in seen_keys or key in existing_keys:
for (idx, resolved_rom_id, item), key in zip(valid, rom_start_pairs, strict=True):
if key in seen or key in existing:
results.append({"index": idx, "status": "duplicate"})
continue
seen_keys.add(key)
seen.add(key)
to_insert.append(
(