restrict ops endpoints to admin-only access block operator and viewer keys from admin maintenance routes cover destructive pricing cleanup in smoke execution, not only preview extend orchestration without regressing existing smoke stages
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_admin_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_admin_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_admin_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,
|
|
)
|