Step 3: Add admin API endpoints for pricing configuration

- Add PricingConfigResponse and PricingConfigUpdate schemas
- Create PricingService with validation logic
- Add GET and PUT endpoints in routes/pricing.py
- Add MANAGE_PRICING permission to admin role
- Register pricing router in main.py
- Add comprehensive API tests for permissions and validation
This commit is contained in:
counterweight 2025-12-26 20:13:24 +01:00
parent 74b934135a
commit 4d0dad8e2b
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
8 changed files with 534 additions and 0 deletions

33
backend/routes/pricing.py Normal file
View file

@ -0,0 +1,33 @@
"""Pricing routes for admin to manage pricing configuration."""
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from auth import require_permission
from database import get_db
from models import Permission, User
from schemas import PricingConfigResponse, PricingConfigUpdate
from services.pricing import PricingService
router = APIRouter(prefix="/api/admin/pricing", tags=["pricing"])
@router.get("", response_model=PricingConfigResponse)
async def get_pricing_config(
db: AsyncSession = Depends(get_db),
_current_user: User = Depends(require_permission(Permission.MANAGE_PRICING)),
) -> PricingConfigResponse:
"""Get current pricing configuration."""
service = PricingService(db)
return await service.get_config()
@router.put("", response_model=PricingConfigResponse)
async def update_pricing_config(
request: PricingConfigUpdate,
db: AsyncSession = Depends(get_db),
_current_user: User = Depends(require_permission(Permission.MANAGE_PRICING)),
) -> PricingConfigResponse:
"""Update pricing configuration."""
service = PricingService(db)
return await service.update_config(request)