add get day claim reward endpoint

This commit is contained in:
2025-12-13 16:03:21 +05:00
parent 67d85a71c1
commit f8550c9dc8
2 changed files with 36 additions and 1 deletions

View File

@ -158,3 +158,12 @@ async def claim_daily(accessToken: str = Query(...), clientToken: str = Query(..
async def daily_status(accessToken: str = Query(...), clientToken: str = Query(...)):
me = await AuthService().get_current_user(accessToken, clientToken)
return await DailyRewardService().get_status(me["username"])
@router.get("/users/daily/days")
async def daily_days(
accessToken: str = Query(...),
clientToken: str = Query(...),
limit: int = Query(60, ge=1, le=365),
):
me = await AuthService().get_current_user(accessToken, clientToken)
return await DailyRewardService().get_claim_days(me["username"], limit=limit)

View File

@ -116,3 +116,29 @@ class DailyRewardService:
"next_claim_at_local": (start_today_local + timedelta(days=1)).isoformat(),
"streak": int(user.get("daily_streak", 0) or 0),
}
async def get_claim_days(self, username: str, limit: int = 60) -> dict:
# Берём последние N записей daily_login и превращаем в список уникальных дней по ЕКБ
cursor = coins_sessions_collection.find(
{"player_name": username, "update_type": "daily_login"},
{"timestamp": 1, "_id": 0},
).sort("timestamp", -1).limit(limit)
days = []
seen = set()
async for doc in cursor:
ts = doc.get("timestamp")
if not ts:
continue
# У тебя timestamp в Mongo — naive UTC (now_utc.replace(tzinfo=None)) :contentReference[oaicite:1]{index=1}
ts_utc = ts.replace(tzinfo=timezone.utc)
day_local = ts_utc.astimezone(TZ).date().isoformat() # YYYY-MM-DD по ЕКБ
if day_local not in seen:
seen.add(day_local)
days.append(day_local)
days.reverse() # чтобы было по возрастанию (старые → новые), если надо
return {"ok": True, "days": days, "count": len(days)}