55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
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)
|