fix(beatmap): fix beatmap.beatmapset is None when it from from_resp

This commit is contained in:
MingxuanGame
2025-10-02 16:37:42 +00:00
parent 2e1d922f59
commit f34ed53a55
2 changed files with 10 additions and 5 deletions

View File

@@ -90,8 +90,7 @@ class Beatmap(BeatmapBase, table=True):
if not (await session.exec(select(exists()).where(Beatmap.id == resp.id))).first(): if not (await session.exec(select(exists()).where(Beatmap.id == resp.id))).first():
session.add(beatmap) session.add(beatmap)
await session.commit() await session.commit()
beatmap = (await session.exec(select(Beatmap).where(Beatmap.id == resp.id))).first() beatmap = (await session.exec(select(Beatmap).where(Beatmap.id == resp.id))).one()
assert beatmap is not None, "Beatmap should not be None after commit"
return beatmap return beatmap
@classmethod @classmethod
@@ -124,9 +123,14 @@ class Beatmap(BeatmapBase, table=True):
bid: int | None = None, bid: int | None = None,
md5: str | None = None, md5: str | None = None,
) -> "Beatmap": ) -> "Beatmap":
beatmap = ( stmt = select(Beatmap)
await session.exec(select(Beatmap).where(Beatmap.id == bid if bid is not None else Beatmap.checksum == md5)) if bid is not None:
).first() stmt = stmt.where(Beatmap.id == bid)
elif md5 is not None:
stmt = stmt.where(Beatmap.checksum == md5)
else:
raise ValueError("Either bid or md5 must be provided")
beatmap = (await session.exec(stmt)).first()
if not beatmap: if not beatmap:
resp = await fetcher.get_beatmap(bid, md5) resp = await fetcher.get_beatmap(bid, md5)
r = await session.exec(select(Beatmapset.id).where(Beatmapset.id == resp.beatmapset_id)) r = await session.exec(select(Beatmapset.id).where(Beatmapset.id == resp.beatmapset_id))

View File

@@ -167,6 +167,7 @@ class Beatmapset(AsyncAttrs, BeatmapsetBase, table=True):
session.add(beatmapset) session.add(beatmapset)
await session.commit() await session.commit()
await Beatmap.from_resp_batch(session, resp.beatmaps, from_=from_) await Beatmap.from_resp_batch(session, resp.beatmaps, from_=from_)
beatmapset = (await session.exec(select(Beatmapset).where(Beatmapset.id == resp.id))).one()
return beatmapset return beatmapset
@classmethod @classmethod