feature: add bank account domain improvements
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
package com.eventsourcing.bankAccount.exceptions;
|
||||
|
||||
public class BankAccountDocumentNotFoundException extends RuntimeException {
|
||||
public BankAccountDocumentNotFoundException() {
|
||||
}
|
||||
|
||||
public BankAccountDocumentNotFoundException(String id) {
|
||||
super("bank account document not found id:" + id);
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import com.eventsourcing.bankAccount.events.AddressUpdatedEvent;
|
||||
import com.eventsourcing.bankAccount.events.BalanceDepositedEvent;
|
||||
import com.eventsourcing.bankAccount.events.BankAccountCreatedEvent;
|
||||
import com.eventsourcing.bankAccount.events.EmailChangedEvent;
|
||||
import com.eventsourcing.bankAccount.exceptions.BankAccountDocumentNotFoundException;
|
||||
import com.eventsourcing.bankAccount.repository.BankAccountMongoRepository;
|
||||
import com.eventsourcing.es.Event;
|
||||
import com.eventsourcing.es.EventStoreDB;
|
||||
@@ -114,7 +115,7 @@ public class BankAccountMongoProjection implements Projection {
|
||||
log.info("(when) EmailChangedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
||||
final var documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
||||
if (documentOptional.isEmpty())
|
||||
throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId());
|
||||
throw new BankAccountDocumentNotFoundException(event.getAggregateId());
|
||||
|
||||
final var document = documentOptional.get();
|
||||
document.setEmail(event.getNewEmail());
|
||||
@@ -126,7 +127,7 @@ public class BankAccountMongoProjection implements Projection {
|
||||
log.info("(when) AddressUpdatedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
||||
final var documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
||||
if (documentOptional.isEmpty())
|
||||
throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId());
|
||||
throw new BankAccountDocumentNotFoundException(event.getAggregateId());
|
||||
|
||||
final var document = documentOptional.get();
|
||||
document.setAddress(event.getNewAddress());
|
||||
@@ -138,11 +139,10 @@ public class BankAccountMongoProjection implements Projection {
|
||||
log.info("(when) BalanceDepositedEvent: {}, aggregateID: {}", event, event.getAggregateId());
|
||||
final var documentOptional = mongoRepository.findByAggregateId(event.getAggregateId());
|
||||
if (documentOptional.isEmpty())
|
||||
throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId());
|
||||
throw new BankAccountDocumentNotFoundException(event.getAggregateId());
|
||||
|
||||
final var document = documentOptional.get();
|
||||
final var balance = document.getBalance();
|
||||
final var newBalance = balance.add(event.getAmount());
|
||||
final var newBalance = document.getBalance().add(event.getAmount());
|
||||
document.setBalance(newBalance);
|
||||
mongoRepository.save(document);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class KafkaEventBus implements EventBus {
|
||||
log.info("publishing kafka record value >>>>> {}", new String(record.value()));
|
||||
|
||||
} catch (Exception ex) {
|
||||
log.error("(KafkaEventBus) publish get", ex);
|
||||
log.error("(KafkaEventBus) publish get timeout", ex);
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.eventsourcing.exceptions;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public record ExceptionResponseDTO(int Status, String message, LocalDateTime timestamp) {
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
package com.eventsourcing.exceptions;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public record NotFoundResponseDTO(int Status, String message, LocalDateTime timestamp) {
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
package com.eventsourcing.filters;
|
||||
|
||||
import com.eventsourcing.bankAccount.exceptions.BankAccountDocumentNotFoundException;
|
||||
import com.eventsourcing.bankAccount.exceptions.InvalidAddressException;
|
||||
import com.eventsourcing.bankAccount.exceptions.InvalidEmailException;
|
||||
import com.eventsourcing.es.exceptions.AggregateNotFoundException;
|
||||
import com.eventsourcing.exceptions.InternalServerErrorResponse;
|
||||
import com.eventsourcing.exceptions.NotFoundResponseDTO;
|
||||
import com.eventsourcing.exceptions.ExceptionResponseDTO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.annotation.Order;
|
||||
@@ -43,10 +46,18 @@ public class GlobalControllerAdvice {
|
||||
}
|
||||
|
||||
@ResponseStatus(HttpStatus.NOT_FOUND)
|
||||
@ExceptionHandler(AggregateNotFoundException.class)
|
||||
public ResponseEntity<NotFoundResponseDTO> handleAggregateNotFoundException(AggregateNotFoundException ex) {
|
||||
final var notFoundResponseDTO = new NotFoundResponseDTO(HttpStatus.NOT_FOUND.value(), ex.getMessage(), LocalDateTime.now());
|
||||
log.error("AggregateNotFoundException response ex:", ex);
|
||||
@ExceptionHandler({AggregateNotFoundException.class, BankAccountDocumentNotFoundException.class})
|
||||
public ResponseEntity<ExceptionResponseDTO> handleAggregateNotFoundExceptions(AggregateNotFoundException ex) {
|
||||
final var notFoundResponseDTO = new ExceptionResponseDTO(HttpStatus.NOT_FOUND.value(), ex.getMessage(), LocalDateTime.now());
|
||||
log.error("handleAggregateNotFoundExceptions response ex:", ex);
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(notFoundResponseDTO);
|
||||
}
|
||||
|
||||
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
||||
@ExceptionHandler({InvalidAddressException.class, InvalidEmailException.class})
|
||||
public ResponseEntity<ExceptionResponseDTO> handleInvalidAggregateExceptions(AggregateNotFoundException ex) {
|
||||
final var notFoundResponseDTO = new ExceptionResponseDTO(HttpStatus.BAD_REQUEST.value(), ex.getMessage(), LocalDateTime.now());
|
||||
log.error("handleInvalidAggregateExceptions response ex:", ex);
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(notFoundResponseDTO);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user