from fastapi import APIRouter, Depends, Request, Response, status from sqlalchemy.orm import Session from app.database import get_db from app.responses import created_response from app.schemas.user import ( UserCreate, UserDetailResponse, UserResponse, UserUpdate, ) from app.services.user_service import ( create_user, delete_user, get_user_by_id, get_user_list, update_user, ) router = APIRouter(prefix="/users", tags=["users"]) @router.get("/", response_model=list[UserDetailResponse]) def list_users( response: Response, db: Session = Depends(get_db), page: int = 1, limit: int = 10, ): users, total = get_user_list(db, page, limit) response.headers["Pagination-Count"] = str(total) response.headers["Pagination-Page"] = str(page) response.headers["Pagination-Limit"] = str(limit) return users @router.get("/{id}", response_model=UserDetailResponse) def get_user(id: str, db: Session = Depends(get_db)): return get_user_by_id(db, id) @router.post("/", status_code=status.HTTP_201_CREATED) def create_user_route(request: Request, data: UserCreate, db: Session = Depends(get_db)): user = create_user(db, data) location = f"{request.url.path}{user.id}" return created_response(location) @router.put("/{id}", response_model=UserDetailResponse) def update_user_route(id: str, data: UserUpdate, db: Session = Depends(get_db)): return update_user(db, id, data) @router.delete("/{id}", status_code=status.HTTP_204_NO_CONTENT) def delete_user_route(id: str, db: Session = Depends(get_db)): delete_user(db, id)