Files
service-finder/backend/app/api/v1/endpoints/billing.py
2026-02-26 08:19:25 +01:00

36 lines
1.8 KiB
Python
Executable File

# backend/app/api/v1/endpoints/billing.py
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, text
from app.api.deps import get_db, get_current_user
from app.models.identity import User, Wallet
from app.models.audit import FinancialLedger # JAVÍTVA: Tranzakciós napló
import secrets
router = APIRouter()
@router.get("/balance")
async def get_balance(db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
stmt = select(Wallet).where(Wallet.user_id == current_user.id)
wallet = (await db.execute(stmt)).scalar_one_or_none()
return {
"earned": float(wallet.earned_credits) if wallet else 0,
"purchased": float(wallet.purchased_credits) if wallet else 0,
"service_coins": float(wallet.service_coins) if wallet else 0
}
@router.post("/vouchers/redeem")
async def redeem_voucher(code: str, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
check = await db.execute(text("SELECT * FROM data.vouchers WHERE code = :c AND is_used = False"), {"c": code.upper()})
voucher = check.fetchone()
if not voucher:
raise HTTPException(status_code=400, detail="Érvénytelen kód.")
stmt = select(Wallet).where(Wallet.user_id == current_user.id)
wallet = (await db.execute(stmt)).scalar_one_or_none()
wallet.purchased_credits += voucher.value
db.add(FinancialLedger(user_id=current_user.id, amount=voucher.value, transaction_type="VOUCHER_REDEEM", details={"code": code}))
await db.execute(text("UPDATE data.vouchers SET is_used=True, used_by=:u WHERE id=:v"), {"u": current_user.id, "v": voucher.id})
await db.commit()
return {"status": "success", "added": float(voucher.value)}