会员积分改版V1
This commit is contained in:
@@ -1,39 +1,41 @@
|
||||
"""Legacy endpoint retained for old clients; only active credit add-ons are returned."""
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.dependencies import get_db, get_current_user
|
||||
from app.dependencies import get_current_user, get_db
|
||||
from app.enums.credit_product import CreditProductType
|
||||
from app.models.credit.product import CreditProduct
|
||||
from app.models.user import User
|
||||
from app.models.recharge_package import RechargePackage
|
||||
from app.services.credit.product_service import product_to_dict
|
||||
|
||||
router = APIRouter(tags=["recharge-packages"])
|
||||
|
||||
|
||||
def _to_out(pkg: RechargePackage) -> dict:
|
||||
return {
|
||||
"id": pkg.id,
|
||||
"name": pkg.name,
|
||||
"credits": round(pkg.credits, 2),
|
||||
"price": round(pkg.price, 2),
|
||||
"bonus_credits": round(pkg.bonus_credits, 2),
|
||||
"total_credits": round(pkg.credits + pkg.bonus_credits, 2),
|
||||
"description": pkg.description,
|
||||
"package_type": pkg.package_type,
|
||||
"is_gift": pkg.is_gift,
|
||||
"is_active": pkg.is_active,
|
||||
"sort_order": pkg.sort_order,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/recharge-packages")
|
||||
async def list_active_packages(
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""Public: list active recharge packages."""
|
||||
result = await db.execute(
|
||||
select(RechargePackage)
|
||||
.where(RechargePackage.is_active == True)
|
||||
.order_by(RechargePackage.sort_order)
|
||||
select(CreditProduct)
|
||||
.where(
|
||||
CreditProduct.product_type == CreditProductType.CREDIT_ADDON.value,
|
||||
CreditProduct.is_active.is_(True),
|
||||
)
|
||||
.order_by(CreditProduct.sort_order.asc(), CreditProduct.id.asc())
|
||||
)
|
||||
return [_to_out(p) for p in result.scalars().all()]
|
||||
items = []
|
||||
for product in result.scalars().all():
|
||||
payload = product_to_dict(product, user_price=product.price, price_type="regular", can_purchase=True)
|
||||
payload.update(
|
||||
{
|
||||
"credits": payload["grant_credits"],
|
||||
"bonus_credits": 0.0,
|
||||
"total_credits": payload["grant_credits"],
|
||||
"package_type": "credit_addon",
|
||||
"is_gift": False,
|
||||
}
|
||||
)
|
||||
items.append(payload)
|
||||
return items
|
||||
|
||||
Reference in New Issue
Block a user