From f0513af7291b933a38a2f8a688de97182415948b Mon Sep 17 00:00:00 2001 From: bouanani-soufiane Date: Mon, 11 Nov 2024 00:15:58 +0100 Subject: [PATCH] Refactor Loft creation with user validation to improve error handling and use custom exceptions PIG-64 --- .../impl/DefaultLoftDomainService.java | 20 ++++++++++++------- .../exception/InvalidUserException.java | 11 ++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 src/main/java/ma/yc/PigeonSkyRace/user/domain/exception/InvalidUserException.java diff --git a/src/main/java/ma/yc/PigeonSkyRace/piegon/domain/service/impl/DefaultLoftDomainService.java b/src/main/java/ma/yc/PigeonSkyRace/piegon/domain/service/impl/DefaultLoftDomainService.java index 6f816ce..b98f58f 100644 --- a/src/main/java/ma/yc/PigeonSkyRace/piegon/domain/service/impl/DefaultLoftDomainService.java +++ b/src/main/java/ma/yc/PigeonSkyRace/piegon/domain/service/impl/DefaultLoftDomainService.java @@ -13,6 +13,9 @@ import ma.yc.PigeonSkyRace.piegon.domain.service.LoftDomainService; import ma.yc.PigeonSkyRace.piegon.domain.service.LoftNameGenerator; import ma.yc.PigeonSkyRace.piegon.infrastructure.repository.LoftRepository; +import ma.yc.PigeonSkyRace.user.application.service.UserApplicationService; +import ma.yc.PigeonSkyRace.user.domain.exception.InvalidUserException; +import ma.yc.PigeonSkyRace.user.domain.model.valueobject.UserId; import org.springframework.stereotype.Service; import java.util.List; @@ -25,6 +28,7 @@ public class DefaultLoftDomainService implements LoftDomainService, LoftApplicat private final LoftRepository repository; private final LoftMapper mapper; private final LoftNameGenerator loftNameGenerator; + private final UserApplicationService userApplicationService; @Override public boolean existsById ( LoftId id ) { @@ -33,24 +37,26 @@ public boolean existsById ( LoftId id ) { @Override public LoftResponseDTO findById ( LoftId id ) { - return repository.findById(id) - .map(mapper::toDto) - .orElseThrow(() -> new NotFoundException("Loft", id)); + return repository.findById(id).map(mapper::toDto).orElseThrow(() -> new NotFoundException("Loft", id)); } @Override public List findAll () { - return repository.findAll() - .stream() - .map(mapper::toDto) - .toList(); + return repository.findAll().stream().map(mapper::toDto).toList(); } @Override public LoftResponseDTO create ( LoftRequestDTO dto ) { + try { + userApplicationService.getById(UserId.fromString(dto.userId())); + } catch (NotFoundException e) { + throw new InvalidUserException("User with ID " + dto.userId() + " does not exist", e); + } + Loft loft = mapper.toEntity(dto); String uniqueName = generateUniqueLoftName(); loft.setName(uniqueName); + return mapper.toDto(repository.save(loft)); } diff --git a/src/main/java/ma/yc/PigeonSkyRace/user/domain/exception/InvalidUserException.java b/src/main/java/ma/yc/PigeonSkyRace/user/domain/exception/InvalidUserException.java new file mode 100644 index 0000000..12fb1a8 --- /dev/null +++ b/src/main/java/ma/yc/PigeonSkyRace/user/domain/exception/InvalidUserException.java @@ -0,0 +1,11 @@ +package ma.yc.PigeonSkyRace.user.domain.exception; + +public class InvalidUserException extends RuntimeException { + public InvalidUserException(String message) { + super(message); + } + + public InvalidUserException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file