Law/app/api/admin/test_utils.py
2026-02-26 18:55:02 +03:00

52 lines
1.5 KiB
Python

from __future__ import annotations
from typing import Any
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
from app.core.config import settings
from app.core.deps import require_role
from app.db.session import get_db
from app.services.test_data_cleanup import CleanupSpec, cleanup_test_data
router = APIRouter()
class TestDataCleanupPayload(BaseModel):
track_numbers: list[str] = Field(default_factory=list)
phones: list[str] = Field(default_factory=list)
emails: list[str] = Field(default_factory=list)
include_default_e2e_patterns: bool = True
def _guard_local_only() -> None:
env = str(settings.APP_ENV or "").strip().lower()
if env in {"prod", "production"}:
raise HTTPException(status_code=404, detail="Not found")
@router.post("/cleanup-test-data")
def cleanup_test_data_endpoint(
payload: TestDataCleanupPayload,
db: Session = Depends(get_db),
admin: dict[str, Any] = Depends(require_role("ADMIN")),
):
_guard_local_only()
counts = cleanup_test_data(
db,
CleanupSpec(
track_numbers=payload.track_numbers,
phones=payload.phones,
emails=payload.emails,
include_default_e2e_patterns=bool(payload.include_default_e2e_patterns),
),
)
return {
"status": "ok",
"environment": settings.APP_ENV,
"requested_by": str(admin.get("email") or admin.get("sub") or ""),
"deleted": counts,
}