2024-12-26 14:42:24 +02:00

28 lines
1.1 KiB
Python

from fastapi import APIRouter, HTTPException
from setech.utils import get_logger
from service.api.dependencies import QueryParams
from service.core.exceptions import InvalidEmail
from service.crud.user import UserMe, UserPublic, UserRegister, get_user_by_username, get_users, register_user
user_router = router = APIRouter()
logger = get_logger("api")
@router.get("/list")
async def list_users_view(_params: QueryParams) -> list[UserPublic] | None:
return await get_users(_params)
@router.post("/register")
async def register_user_view(data: UserRegister) -> UserMe | None:
try:
if await get_user_by_username(username=data.email):
raise HTTPException(400, "Given email is already registered!")
except InvalidEmail as e:
logger.warning(f"Attempting to register with invalid email: '{data.email}'")
raise HTTPException(400, str(e))
logger.info(f"Creating user with email: '{data.email}'")
user = await register_user(data)
return UserMe(id=user.id, username=user.username, email=user.email, is_superuser=user.is_superuser)