from fastapi import APIRouter, Depends, Query from sqlalchemy import func, select from sqlalchemy.ext.asyncio import AsyncSession from app.core.deps import get_current_active_user, get_db from app.models.point_ledger import PointLedger from app.models.user import User from app.schemas.common import PageResponse from app.schemas.point import PointBalance, PointRecord router = APIRouter() @router.get("/me", response_model=PointBalance) async def get_my_points( current_user: User = Depends(get_current_active_user), db: AsyncSession = Depends(get_db), ): result = await db.execute( select(PointLedger) .where(PointLedger.user_id == current_user.id) .order_by(PointLedger.id.desc()) .limit(1) ) last = result.scalar_one_or_none() return PointBalance(balance=last.balance if last else 0) @router.get("/me/records", response_model=PageResponse[PointRecord]) async def get_my_point_records( page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=100), current_user: User = Depends(get_current_active_user), db: AsyncSession = Depends(get_db), ): base = select(PointLedger).where(PointLedger.user_id == current_user.id) total_result = await db.execute( select(func.count(PointLedger.id)).where(PointLedger.user_id == current_user.id) ) total = total_result.scalar() or 0 offset = (page - 1) * page_size result = await db.execute( base.order_by(PointLedger.id.desc()).offset(offset).limit(page_size) ) records = result.scalars().all() return PageResponse(total=total, items=records)