from fastapi import Query, APIRouter, status, Depends, Response, HTTPException from backend.code.modules.users.controller import UserController from backend.code.models.requests.user_register import UserRegisterRequest from backend.code.models.requests.user_edit import UserEditRequest from backend.code.models.responses.user_detail import UserDetailResponse from backend.code.models.responses.user_created import UserCreatedResponse routes = APIRouter(prefix="/users", tags=["User"]) controller = UserController() @routes.get('', status_code = status.HTTP_200_OK, response_model = list[UserDetailResponse]) def ListUsers(params: str | None = Query(default = None, alias = "query")): users = controller.ListUsers(params) if users is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if len(users) == 0: return Response(status_code = status.HTTP_204_NO_CONTENT) return users @routes.get('/{id}', status_code = status.HTTP_200_OK, response_model = UserDetailResponse) def GetUser(id: int): user = controller.SelectUser(id) if user is None: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND) return user @routes.post('', status_code = status.HTTP_201_CREATED, response_model = UserCreatedResponse) def RegisterUser(data: UserRegisterRequest): created = controller.RegisterUser(data.Name, data.Surnames, data.Email, data.Username, data.Locked, data.Active) if created is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if created == -1: raise HTTPException(status_code = status.HTTP_409_CONFLICT, detail = 'Email exists') elif created == -2: raise HTTPException(status_code = status.HTTP_409_CONFLICT, detail = 'Username exists') return created @routes.put('/{id}', status_code = status.HTTP_204_NO_CONTENT) def EditUser(id: int, data: UserEditRequest): edited = controller.EditUser(id, data.Name, data.Surnames, data.Email) if edited is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if deleted == -3: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND) @routes.delete('/{id}', status_code = status.HTTP_204_NO_CONTENT) def DeleteUser(id: int): deleted = controller.DeleteUser(id) if deleted is None: raise HTTPException(status_code = status.HTTP_400_BAD_REQUEST) if deleted == -3: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND)