"""User management endpoints.""" from __future__ import annotations from typing import Optional from fastapi import APIRouter, Depends, Query from app.middleware.auth import get_current_user, require_admin from app.schemas.user import UserListResponse, UserResponse, UserUpdate from app.services.user_service import UserService router = APIRouter(prefix="/users", tags=["Users"]) @router.get("/me", response_model=UserResponse) def get_my_profile(user: dict = Depends(get_current_user)): svc = UserService() return svc.get_user(user["id"]) @router.patch("/me", response_model=UserResponse) def update_my_profile(body: UserUpdate, user: dict = Depends(get_current_user)): svc = UserService() return svc.update_user(user["id"], body.model_dump(exclude_unset=True)) @router.get("/{user_id}", response_model=UserResponse) def get_user(user_id: str, _admin: dict = Depends(require_admin)): svc = UserService() return svc.get_user(user_id) @router.get("/", response_model=UserListResponse) def list_users( page: int = Query(1, ge=1), page_size: int = Query(20, ge=1, le=100), role: Optional[str] = None, search: Optional[str] = None, _admin: dict = Depends(require_admin), ): svc = UserService() return svc.list_users(page=page, page_size=page_size, role=role, search=search) @router.post("/{user_id}/verify", response_model=UserResponse) def verify_user(user_id: str, _admin: dict = Depends(require_admin)): svc = UserService() return svc.verify_user(user_id) @router.delete("/{user_id}") def delete_user(user_id: str, user: dict = Depends(get_current_user)): svc = UserService() return svc.delete_user(user_id, user["id"], user["role"])