75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
from fastapi import APIRouter, Depends, status, Query
|
|
from sqlalchemy.orm import Session
|
|
from typing import List, Optional
|
|
import uuid
|
|
from app.config.database import get_db
|
|
from app.controllers.auth.user_controller import UserController
|
|
from app.schemas.auth.user_schema import UserCreate, UserUpdate, UserResponse, UserPaginatedResponse
|
|
from app.middleware.auth_middleware import get_current_user, require_access
|
|
from app.models.auth.user_model import User
|
|
|
|
router = APIRouter()
|
|
|
|
@router.post("/create", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
|
|
def create_user(
|
|
user_data: UserCreate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("admin.user.create"))
|
|
):
|
|
return UserController.create_user(db, user_data, current_user)
|
|
|
|
@router.get("/get", response_model=List[UserResponse])
|
|
def get_all_users(
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("admin.user.read"))
|
|
):
|
|
return UserController.get_all_users(db, current_user)
|
|
|
|
@router.get("/get/{user_id}", response_model=UserResponse)
|
|
def get_user(
|
|
user_id: uuid.UUID,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("admin.user.read"))
|
|
):
|
|
return UserController.get_user_by_id(db, user_id, current_user)
|
|
|
|
@router.put("/update/{user_id}", response_model=UserResponse)
|
|
def update_user(
|
|
user_id: uuid.UUID,
|
|
user_data: UserUpdate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("admin.user.update"))
|
|
):
|
|
return UserController.update_user(db, user_id, user_data, current_user)
|
|
|
|
@router.delete("/delete/{user_id}")
|
|
def delete_user(
|
|
user_id: uuid.UUID,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("admin.user.delete"))
|
|
):
|
|
return UserController.delete_user(db, user_id, current_user)
|
|
|
|
@router.get("/list", response_model=UserPaginatedResponse)
|
|
def list_users(
|
|
page: int = Query(1, ge=1, description="Page number"),
|
|
page_size: int = Query(10, ge=1, le=100, description="Items per page"),
|
|
search: Optional[str] = Query(None, description="Search in email, name, phone, or ID"),
|
|
status: Optional[str] = Query(None, description="Filter by user status (e.g. active, inactive)"),
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("admin.user.read")),
|
|
):
|
|
return UserController.get_users_paginated(
|
|
db=db,
|
|
current_user=current_user,
|
|
page=page,
|
|
page_size=page_size,
|
|
search=search,
|
|
status=status,
|
|
) |