from src.application.abstractions import IUnitOfWork from src.application.contracts import ILogger, ICache from src.application.domain.entities import UserEntity from src.application.domain.enums.account_type import AccountType from src.infrastructure.database.decorators import transactional class GetMeCommand: def __init__(self, unit_of_work: IUnitOfWork, logger: ILogger, cache: ICache): self._unit_of_work = unit_of_work self._logger = logger self._cache = cache @transactional async def __call__(self, user_id: str) -> UserEntity: user = await self._unit_of_work.user_repository.get_user_by_id(user_id=user_id) if user.account_type == AccountType.LEGAL_ENTITY.value: user.legal_entity = await self._unit_of_work.legal_entity_repository.get_by_user_id(user_id) self._logger.info(f'User ID: {user.id}') return user