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"))