Files
amap/backend/src/users/users.py

121 lines
3.4 KiB
Python

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 messages, 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),
_: 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)
):
if not service.is_allowed(user):
raise HTTPException(
status_code=403,
detail=messages.Messages.not_allowed('roles', 'get all')
)
return service.get_roles(session)
@router.get('/{_id}', response_model=models.UserPublic)
def get_user(
_id: int,
user: models.User = Depends(get_current_user),
session: Session = Depends(get_session)
):
if not service.is_allowed(user):
raise HTTPException(
status_code=403,
detail=messages.Messages.not_allowed('user', 'get')
)
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)
):
if not service.is_allowed(logged_user):
raise HTTPException(
status_code=403,
detail=messages.Messages.not_allowed('user', 'create')
)
try:
user = service.create_one(session, user)
except exceptions.UserCreateError as error:
raise HTTPException(
status_code=400,
detail=str(error)
) from 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)
):
if not service.is_allowed(logged_user):
raise HTTPException(
status_code=403,
detail=messages.Messages.not_allowed('user', 'update')
)
try:
result = service.update_one(session, _id, user)
except exceptions.UserNotFoundError as error:
raise HTTPException(
status_code=404,
detail=messages.Messages.not_found('user')
) from error
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)
):
if not service.is_allowed(user):
raise HTTPException(
status_code=403,
detail=messages.Messages.not_allowed('user', 'delete')
)
try:
result = service.delete_one(session, _id)
except exceptions.UserNotFoundError as error:
raise HTTPException(
status_code=404,
detail=messages.Messages.not_found('user')
) from error
return result