mirror of
http://88.130.71.182:3000/BlitTech/deals24togo_be.git
synced 2026-06-13 10:49:55 +00:00
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
"""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"])
|