42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.dependencies import get_db, get_current_user
|
|
from app.models.user import User
|
|
from app.models.credit_ratio import CreditRatio
|
|
from app.schemas.credit import CreditBalanceOut, CreditRecordOut
|
|
from app.schemas.credit_ratio import CreditRatioOut
|
|
from app.services.credits import get_records
|
|
from sqlalchemy import select
|
|
|
|
router = APIRouter(prefix="/credits", tags=["credits"])
|
|
|
|
|
|
@router.get("", response_model=CreditBalanceOut)
|
|
async def get_credits(
|
|
current_user: User = Depends(get_current_user),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
records = await get_records(db, current_user.id)
|
|
return CreditBalanceOut(
|
|
credits=round(current_user.credits, 2),
|
|
records=[CreditRecordOut.model_validate(r) for r in records],
|
|
)
|
|
|
|
|
|
@router.get("/ratios", response_model=dict)
|
|
async def get_credit_ratios(
|
|
current_user: User = Depends(get_current_user),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
result = await db.execute(select(CreditRatio))
|
|
ratios = result.scalars().all()
|
|
|
|
grouped = {}
|
|
for ratio in ratios:
|
|
if ratio.gen_type not in grouped:
|
|
grouped[ratio.gen_type] = []
|
|
grouped[ratio.gen_type].append(CreditRatioOut.model_validate(ratio))
|
|
|
|
return grouped
|