Files
group_fqcd_jr/app/api/controllers/config_releases.py

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)