From 7f224aee8d6b417b8551fc4f35e7ad7d23515291 Mon Sep 17 00:00:00 2001 From: MingxuanGame Date: Sat, 9 Aug 2025 14:59:51 +0000 Subject: [PATCH] feat(daily-challenge): create on startup --- app/service/daily_challenge.py | 13 +++++++++++++ main.py | 2 ++ 2 files changed, 15 insertions(+) diff --git a/app/service/daily_challenge.py b/app/service/daily_challenge.py index cca07b7..ea93da7 100644 --- a/app/service/daily_challenge.py +++ b/app/service/daily_challenge.py @@ -14,6 +14,7 @@ from app.models.room import RoomCategory from .room import create_playlist_room +from sqlmodel import col, select from sqlmodel.ext.asyncio.session import AsyncSession @@ -50,6 +51,18 @@ async def daily_challenge_job(): key = f"daily_challenge:{today}" if not await redis.exists(key): return + async with AsyncSession(engine) as session: + room = ( + await session.exec( + select(Room).where( + Room.category == RoomCategory.DAILY_CHALLENGE, + col(Room.ends_at) > datetime.now(UTC), + ) + ) + ).first() + if room: + return + try: beatmap = await redis.hget(key, "beatmap") # pyright: ignore[reportGeneralTypeIssues] ruleset_id = await redis.hget(key, "ruleset_id") # pyright: ignore[reportGeneralTypeIssues] diff --git a/main.py b/main.py index 31cdd44..8569afb 100644 --- a/main.py +++ b/main.py @@ -13,6 +13,7 @@ from app.router import ( fetcher_router, signalr_router, ) +from app.service.daily_challenge import daily_challenge_job from fastapi import FastAPI @@ -23,6 +24,7 @@ async def lifespan(app: FastAPI): await create_tables() await get_fetcher() # 初始化 fetcher init_scheduler() + await daily_challenge_job() # on shutdown yield stop_scheduler()