from typing import List from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.dependencies import get_current_user from app.models import User from app.services.wallet_service import WalletService from app.datamodels.schemas import ( BalanceResponse, RedeemCodeRequest, TransactionResponse, ) router = APIRouter(prefix="/wallet", tags=["wallet"]) @router.get("/balance", response_model=BalanceResponse) async def get_balance( user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): balance = await WalletService.get_balance(db, user.id) return {"balance": balance} @router.post("/redeem", response_model=TransactionResponse) async def redeem_code( body: RedeemCodeRequest, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): return await WalletService.redeem_code(db, user.id, body.code) @router.get("/transactions", response_model=List[TransactionResponse]) async def list_transactions( page: int = Query(1, ge=1), size: int = Query(20, ge=1, le=100), user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): return await WalletService.list_transactions(db, user.id, page, size)