from __future__ import annotations import csv from datetime import datetime from io import BytesIO, StringIO from typing import Any, Optional from fastapi import APIRouter, Depends, File, HTTPException, Query, UploadFile, status from pydantic import BaseModel from sqlalchemy import and_, delete, func, or_, select, update from sqlalchemy.exc import IntegrityError from sqlalchemy.ext.asyncio import AsyncSession from ...core.database import get_db from ...dependencies import ( get_current_active_user, get_current_user, get_tenant_id, require_roles, require_self_or_manager, ) from ...models import ( SkillTag, Task, User, UserProject, UserRole, UserSkillBinding, UserStatus, UserWorkload, ) from ...schemas import ( UserCreate, UserResetPasswordRequest, UserResponse, UserStatusPatchRequest, UserUpdate, ) from ...services import skill as skill_service from ...services.ai_pmo.ai_pmo_kernel import AIPMOKernelService from ...services.auth import AuthService from ...services.operation_log_service import log_operation from ...utils.timezone import now_cn_naive router = APIRouter(prefix="/users", tags=["users"]) COMPLETED_TASK_STATUSES = {"done", "completed", "closed", "resolved", "archived"} MANAGER_ROLE_SET = {"BOSS", "ADMIN"} VALID_ROLE_VALUES = {r.value for r in UserRole}