33 lines
887 B
Python
33 lines
887 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from uuid import UUID
|
|
|
|
from app.application.users.dto import UserDTO
|
|
from app.application.users.ports.unit_of_work import UnitOfWork
|
|
from app.domain.users.exceptions import UserNotFound
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class GetUserQuery:
|
|
user_id: UUID
|
|
|
|
|
|
class GetUserUseCase:
|
|
def __init__(self, uow: UnitOfWork) -> None:
|
|
self._uow = uow
|
|
|
|
async def execute(self, q: GetUserQuery) -> UserDTO:
|
|
async with self._uow:
|
|
user = await self._uow.users.get_by_id(q.user_id)
|
|
if user is None:
|
|
raise UserNotFound("User not found")
|
|
|
|
return UserDTO(
|
|
id=user.id,
|
|
email=str(user.email),
|
|
full_name=user.full_name,
|
|
is_active=user.is_active,
|
|
created_at=user.created_at,
|
|
)
|