45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
|
|
from app.application.users.use_cases.create_user import (
|
|
CreateUserCommand,
|
|
CreateUserUseCase,
|
|
)
|
|
from app.application.users.use_cases.get_user import GetUserQuery, GetUserUseCase
|
|
from app.domain.users.exceptions import InvalidEmail, UserAlreadyExists, UserNotFound
|
|
from app.presentation.dependencies.users import get_create_user_uc, get_get_user_uc
|
|
from app.presentation.schemas.users import CreateUserRequest, UserResponse
|
|
|
|
router = APIRouter(prefix="/users", tags=["users"])
|
|
|
|
|
|
@router.post("", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
|
|
async def create_user(
|
|
req: CreateUserRequest,
|
|
uc: CreateUserUseCase = Depends(get_create_user_uc),
|
|
) -> UserResponse:
|
|
try:
|
|
dto = await uc.execute(
|
|
CreateUserCommand(email=str(req.email), full_name=req.full_name)
|
|
)
|
|
return UserResponse(**dto.__dict__)
|
|
except InvalidEmail as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
except UserAlreadyExists as e:
|
|
raise HTTPException(status_code=409, detail=str(e))
|
|
|
|
|
|
@router.get("/{user_id}", response_model=UserResponse)
|
|
async def get_user(
|
|
user_id: UUID,
|
|
uc: GetUserUseCase = Depends(get_get_user_uc),
|
|
) -> UserResponse:
|
|
try:
|
|
dto = await uc.execute(GetUserQuery(user_id=user_id))
|
|
return UserResponse(**dto.__dict__)
|
|
except UserNotFound as e:
|
|
raise HTTPException(status_code=404, detail=str(e))
|