PMFlow/backend/app/api/projects_api/shared.py

47 lines
1.3 KiB
Python

from __future__ import annotations
import json
from typing import Any, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
from sqlalchemy import and_, delete, func, select, update
from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession
from ...core.database import get_db
from ...dependencies import get_current_user, get_tenant_id, require_roles
from ...models import (
AIOrchestrationRun,
AIWorkerExecution,
Budget,
ConversationSession,
CostTracking,
Experiment,
OperationExecutionLedger,
OperationLog,
Project,
ProjectSignalLink,
Signal,
SignalSourceRegistry,
Task,
User,
UserProject,
WorkItem,
)
from ...services.ai_pmo_kernel import AIPMOKernelService
from ...services.context_cache_service import context_cache_service
from ...services.operation_log_service import log_operation
from ...services.project_member import (
ProjectMemberAssignmentError,
notify_member_assignment_failure,
replace_project_members,
resolve_project_member_ids,
)
from ...utils.sequence import ensure_project_id_sequence
from ...utils.title import compact_title
router = APIRouter(prefix="/projects", tags=["projects"])
DONE_STATUSES = {"done", "completed", "closed", "resolved", "archived"}