From fac16bde86bd88395dd7f5e727e6b5bb01ae03e6 Mon Sep 17 00:00:00 2001 From: MingxuanGame Date: Sun, 10 Aug 2025 13:49:30 +0000 Subject: [PATCH] fix(beatmapset): avoid duplicated beatmapset --- app/database/beatmapset.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/database/beatmapset.py b/app/database/beatmapset.py index aee26e4..1ed5d13 100644 --- a/app/database/beatmapset.py +++ b/app/database/beatmapset.py @@ -10,7 +10,7 @@ from .lazer_user import BASE_INCLUDES, User, UserResp from pydantic import BaseModel from sqlalchemy import JSON, Column, DateTime, Text from sqlalchemy.ext.asyncio import AsyncAttrs -from sqlmodel import Field, Relationship, SQLModel, col, func, select +from sqlmodel import Field, Relationship, SQLModel, col, exists, func, select from sqlmodel.ext.asyncio.session import AsyncSession if TYPE_CHECKING: @@ -161,8 +161,11 @@ class Beatmapset(AsyncAttrs, BeatmapsetBase, table=True): "download_disabled": resp.availability.download_disabled or False, } ) - session.add(beatmapset) - await session.commit() + if not ( + await session.exec(select(exists()).where(Beatmapset.id == resp.id)) + ).first(): + session.add(beatmapset) + await session.commit() await Beatmap.from_resp_batch(session, resp.beatmaps, from_=from_) return beatmapset