Files
wiki-tcg/backend/database_functions.py
Nikolaj 65b719334f 🐐
2026-03-16 14:01:22 +01:00

62 lines
1.5 KiB
Python

import logging
import asyncio
from sqlalchemy.orm import Session
from card import _get_cards_async
from models import Card as CardModel
from database import SessionLocal
logger = logging.getLogger("app")
POOL_MINIMUM = 500
POOL_TARGET = 1000
POOL_BATCH_SIZE = 10
POOL_SLEEP = 5.0
pool_filling = False
async def fill_card_pool():
global pool_filling
if pool_filling:
logger.info("Pool fill already in progress, skipping")
return
db: Session = SessionLocal()
try:
unassigned = db.query(CardModel).filter(CardModel.user_id == None).count()
logger.info(f"Card pool has {unassigned} unassigned cards")
if unassigned >= POOL_MINIMUM:
logger.info("Pool sufficiently stocked, skipping fill")
return
pool_filling = True
needed = POOL_TARGET - unassigned
logger.info(f"Filling pool with {needed} cards")
fetched = 0
while fetched < needed:
batch_size = min(POOL_BATCH_SIZE, needed - fetched)
cards = await _get_cards_async(batch_size)
for card in cards:
db.add(CardModel(
name=card.name,
image_link=card.image_link,
card_rarity=card.card_rarity.name,
card_type=card.card_type.name,
text=card.text,
attack=card.attack,
defense=card.defense,
cost=card.cost,
user_id=None,
))
db.commit()
fetched += batch_size
logger.info(f"Pool fill progress: {fetched}/{needed}")
await asyncio.sleep(POOL_SLEEP)
finally:
pool_filling = False
db.close()