import src.messages as messages import src.users.exceptions as exceptions import src.users.service as service from fastapi import APIRouter, Depends, HTTPException, Query from sqlmodel import Session from src import models from src.auth.auth import get_current_user from src.database import get_session router = APIRouter(prefix='/users') @router.get('', response_model=list[models.UserPublic]) def get_users( session: Session = Depends(get_session), user: models.User = Depends(get_current_user), names: list[str] = Query([]), emails: list[str] = Query([]), ): return service.get_all( session, names, emails, ) @router.get('/roles', response_model=list[models.ContractType]) def get_roles( user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): return service.get_roles(session) @router.get('/{id}', response_model=models.UserPublic) def get_users( id: int, user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): result = service.get_one(session, id) if result is None: raise HTTPException(status_code=404, detail=messages.Messages.not_found('user')) return result @router.post('', response_model=models.UserPublic) def create_user( user: models.UserCreate, logged_user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): try: user = service.create_one(session, user) except exceptions.UserCreateError as error: raise HTTPException(status_code=400, detail=str(error)) return user @router.put('/{id}', response_model=models.UserPublic) def update_user( id: int, user: models.UserUpdate, logged_user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): try: result = service.update_one(session, id, user) except exceptions.UserNotFoundError as error: raise HTTPException(status_code=404, detail=messages.Messages.not_found('user')) return result @router.delete('/{id}', response_model=models.UserPublic) def delete_user( id: int, user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): try: result = service.delete_one(session, id) except exceptions.UserNotFoundError as error: raise HTTPException(status_code=404, detail=messages.Messages.not_found('user')) return result