diff --git a/app/api/admin_daily_quests.py b/app/api/admin_daily_quests.py index f0d09ab..106382b 100644 --- a/app/api/admin_daily_quests.py +++ b/app/api/admin_daily_quests.py @@ -1,3 +1,4 @@ +from typing import List from fastapi import APIRouter, HTTPException, Body, Query from datetime import datetime, timezone from app.db.database import db @@ -35,6 +36,29 @@ async def upsert_pool_item(payload: dict = Body(...)): item = await pool.find_one({"key": key}, {"_id": 0}) return {"ok": True, "item": item} +@router.post("/pool/bulk_upsert") +async def bulk_upsert_pool_items(items: List[dict] = Body(...)): + if not isinstance(items, list): + raise HTTPException(status_code=400, detail="Body must be a list of objects") + + out = [] + for payload in items: + key = payload.get("key") + if not key or not isinstance(key, str): + continue + + payload.setdefault("enabled", True) + payload.setdefault("weight", 1) + payload.setdefault("min_required", 1) + payload.setdefault("max_required", payload["min_required"]) + payload.setdefault("reward_per_unit", 1) + payload["updated_at"] = datetime.now(timezone.utc).replace(tzinfo=None) + + await pool.update_one({"key": key}, {"$set": payload}, upsert=True) + out.append(key) + + return {"ok": True, "upserted": out, "count": len(out)} + @router.post("/pool/disable") async def disable_pool_item(key: str = Query(...)): res = await pool.update_one({"key": key}, {"$set": {"enabled": False}})