- add backend README and refresh API map and smoke regression docs - add full backend smoke regression script - add admin pricing cleanup preview and dry-run endpoints - add helper script for test pricing cleanup - verify typed error contracts, draft flow, publish readiness and preview flows - verify publish preview retention and clean backend startup behavior
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
|
|
from app.core.config import settings
|
|
from app.schemas.admin_cleanup import (
|
|
PricingCleanupExecuteRequest,
|
|
PricingCleanupExecuteResponse,
|
|
PricingCleanupPreviewResponse,
|
|
)
|
|
from app.security.auth import require_api_key
|
|
from app.services.pricing_cleanup import (
|
|
build_pricing_cleanup_preview,
|
|
execute_pricing_cleanup,
|
|
)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get(
|
|
f"{settings.api_v1_prefix}/admin/schemes/{{scheme_id}}/pricing/categories/cleanup-preview",
|
|
response_model=PricingCleanupPreviewResponse,
|
|
)
|
|
async def get_pricing_cleanup_preview(
|
|
scheme_id: str,
|
|
code_prefix: list[str] = Query(default_factory=list),
|
|
name_prefix: list[str] = Query(default_factory=list),
|
|
pricing_category_id: list[str] = Query(default_factory=list),
|
|
delete_only_without_rules: bool = Query(default=True),
|
|
role: str = Depends(require_api_key),
|
|
):
|
|
return await build_pricing_cleanup_preview(
|
|
scheme_id=scheme_id,
|
|
code_prefixes=code_prefix,
|
|
name_prefixes=name_prefix,
|
|
pricing_category_ids=pricing_category_id,
|
|
delete_only_without_rules=delete_only_without_rules,
|
|
)
|
|
|
|
|
|
@router.post(
|
|
f"{settings.api_v1_prefix}/admin/schemes/{{scheme_id}}/pricing/categories/cleanup",
|
|
response_model=PricingCleanupExecuteResponse,
|
|
)
|
|
async def post_pricing_cleanup(
|
|
scheme_id: str,
|
|
payload: PricingCleanupExecuteRequest,
|
|
role: str = Depends(require_api_key),
|
|
):
|
|
return await execute_pricing_cleanup(
|
|
scheme_id=scheme_id,
|
|
code_prefixes=payload.code_prefixes,
|
|
name_prefixes=payload.name_prefixes,
|
|
pricing_category_ids=payload.pricing_category_ids,
|
|
delete_only_without_rules=payload.delete_only_without_rules,
|
|
dry_run=payload.dry_run,
|
|
)
|