"""萤火虫时刻路由""" from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from app.dependencies import get_db, get_current_user from app.models.user import User from app.services.flash_service import FlashService router = APIRouter() @router.get("/active") async def get_active( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取当前萤火虫事件。若没有,随机概率尝试触发一个(让功能可被体验到)""" service = FlashService(db) event = await service.get_active_event() if event: return {"event": event} # 概率触发:每次请求 ~4% 概率尝试生成(受单日 1 次限制),让萤火虫保持稀有 import hashlib seed = hashlib.md5(f"{user.id}:{__import__('datetime').datetime.utcnow().strftime('%H%M')}".encode()).hexdigest() if int(seed[:2], 16) < 10: # ~4% spawned = await service.try_spawn() if spawned: return {"event": spawned} return {"event": None} @router.post("/{event_id}/click") async def click( event_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """集气点击""" service = FlashService(db) try: return await service.click(user.id, event_id) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.post("/{event_id}/claim") async def claim( event_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """领取限定纪念叶""" service = FlashService(db) try: return await service.claim_reward(user.id, event_id) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.get("/album") async def get_album( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """我的萤火虫图鉴""" service = FlashService(db) return await service.get_my_album(user.id)