50 lines
2.0 KiB
Python
50 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from fastapi.responses import JSONResponse
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from ...core.database import get_db
|
|
from ...core.response import error_response, success_response
|
|
from ...dependencies import get_current_user
|
|
from ...models import User
|
|
from ...schemas.pmflow_launch import PMFlowLaunchConfirmRequest, PMFlowLaunchDraftRequest
|
|
from ...services.pmflow_launch_service import PMFlowLaunchError, PMFlowLaunchService
|
|
|
|
router = APIRouter(prefix="/pmflow-launch", tags=["pmflow-launch"])
|
|
|
|
|
|
@router.post("/drafts")
|
|
async def create_pmflow_launch_draft(
|
|
body: PMFlowLaunchDraftRequest,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
service = PMFlowLaunchService(db, tenant_id=int(current_user.tenant_id))
|
|
try:
|
|
payload = await service.create_draft(body=body, user_id=int(current_user.id))
|
|
except PMFlowLaunchError as exc:
|
|
return JSONResponse(status_code=exc.status_code, content=error_response(exc.status_code, f"{exc.code}: {exc.message}"))
|
|
return success_response(payload.model_dump(mode="json"))
|
|
|
|
|
|
@router.post("/drafts/{draft_id}/confirm")
|
|
async def confirm_pmflow_launch_draft(
|
|
draft_id: str,
|
|
body: PMFlowLaunchConfirmRequest,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
if not body.confirm:
|
|
return JSONResponse(status_code=400, content=error_response(400, "confirm_required: confirm must be true"))
|
|
service = PMFlowLaunchService(db, tenant_id=int(current_user.tenant_id))
|
|
try:
|
|
payload = await service.confirm_draft(
|
|
draft_id=draft_id,
|
|
edited_draft=body.edited_draft,
|
|
user_id=int(current_user.id),
|
|
)
|
|
except PMFlowLaunchError as exc:
|
|
return JSONResponse(status_code=exc.status_code, content=error_response(exc.status_code, f"{exc.code}: {exc.message}"))
|
|
return success_response(payload.model_dump(mode="json"))
|