from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from app.api.dependencies.auth import build_request_context from app.api.dependencies.database import get_session from app.core.contracts import RequestContext from app.service.config_application_service import ConfigApplicationService router = APIRouter(prefix="/api/v1/admin/config-releases", tags=["admin-config"]) async def _transition( release_id: int, action: str, context: RequestContext, session: AsyncSession, ) -> dict[str, object]: return await ConfigApplicationService(session).transition(release_id, action, context) @router.post("/{release_id}/submit") async def submit_release( release_id: int, context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: return await _transition(release_id, "submit_for_review", context, session) @router.post("/{release_id}/approve") async def approve_release( release_id: int, context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: return await _transition(release_id, "approve", context, session) @router.post("/{release_id}/activate") async def activate_release( release_id: int, context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: return await _transition(release_id, "activate", context, session) @router.post("/{release_id}/rollback") async def rollback_release( release_id: int, context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: return await _transition(release_id, "rollback", context, session)