From 3f6d87244493c91fbea129feb68bd173df16e79e Mon Sep 17 00:00:00 2001 From: Alexander Date: Thu, 14 Apr 2022 12:08:44 +0300 Subject: [PATCH] feature: add bank account mongo projection improvements --- .../BankAccountMongoProjection.java | 20 ++++++++++++++----- .../BankAccountMongoRepository.java | 2 ++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/eventsourcing/bankAccount/projection/BankAccountMongoProjection.java b/src/main/java/com/eventsourcing/bankAccount/projection/BankAccountMongoProjection.java index fe887b1..f01015f 100644 --- a/src/main/java/com/eventsourcing/bankAccount/projection/BankAccountMongoProjection.java +++ b/src/main/java/com/eventsourcing/bankAccount/projection/BankAccountMongoProjection.java @@ -1,6 +1,7 @@ package com.eventsourcing.bankAccount.projection; +import com.eventsourcing.bankAccount.domain.BankAccountAggregate; import com.eventsourcing.bankAccount.domain.BankAccountDocument; import com.eventsourcing.bankAccount.events.AddressUpdatedEvent; import com.eventsourcing.bankAccount.events.BalanceDepositedEvent; @@ -11,6 +12,7 @@ import com.eventsourcing.es.Event; import com.eventsourcing.es.EventStoreDB; import com.eventsourcing.es.Projection; import com.eventsourcing.es.SerializerUtils; +import com.eventsourcing.mappers.BankAccountMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -46,7 +48,7 @@ public class BankAccountMongoProjection implements Projection { try { final Event[] events = SerializerUtils.deserializeEventsFromJsonBytes(data); - this.processEvents( Arrays.stream(events).toList()); + this.processEvents(Arrays.stream(events).toList()); ack.acknowledge(); log.info("ack events: {}", Arrays.toString(events)); } catch (Exception e) { @@ -58,9 +60,14 @@ public class BankAccountMongoProjection implements Projection { private void processEvents(List events) { try { - events.forEach(event -> this.when(event)); + events.forEach(this::when); } catch (Exception ex) { // TODO: delete from mongo, get from eventStore, upsert to mongo + mongoRepository.deleteByAggregateId(events.get(0).getAggregateId()); + final var aggregate = eventStoreDB.load(events.get(0).getAggregateId(), BankAccountAggregate.class); + final var document = BankAccountMapper.bankAccountDocumentFromAggregate(aggregate); + BankAccountDocument result = mongoRepository.save(document); + log.info("(processEvents) saved document: {}", result); } } @@ -101,7 +108,8 @@ public class BankAccountMongoProjection implements Projection { private void handle(EmailChangedEvent event) { log.info("(when) EmailChangedEvent: {}, aggregateID: {}", event, event.getAggregateId()); Optional documentOptional = mongoRepository.findByAggregateId(event.getAggregateId()); - if (documentOptional.isEmpty()) throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId()); + if (documentOptional.isEmpty()) + throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId()); final var document = documentOptional.get(); document.setEmail(event.getNewEmail()); @@ -111,7 +119,8 @@ public class BankAccountMongoProjection implements Projection { private void handle(AddressUpdatedEvent event) { log.info("(when) AddressUpdatedEvent: {}, aggregateID: {}", event, event.getAggregateId()); Optional documentOptional = mongoRepository.findByAggregateId(event.getAggregateId()); - if (documentOptional.isEmpty()) throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId()); + if (documentOptional.isEmpty()) + throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId()); final var document = documentOptional.get(); document.setAddress(event.getNewAddress()); @@ -121,7 +130,8 @@ public class BankAccountMongoProjection implements Projection { private void handle(BalanceDepositedEvent event) { log.info("(when) BalanceDepositedEvent: {}, aggregateID: {}", event, event.getAggregateId()); Optional documentOptional = mongoRepository.findByAggregateId(event.getAggregateId()); - if (documentOptional.isEmpty()) throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId()); + if (documentOptional.isEmpty()) + throw new RuntimeException("Bank Account Document not found id: {}" + event.getAggregateId()); final var document = documentOptional.get(); final var balance = document.getBalance(); diff --git a/src/main/java/com/eventsourcing/bankAccount/repository/BankAccountMongoRepository.java b/src/main/java/com/eventsourcing/bankAccount/repository/BankAccountMongoRepository.java index 68740dc..5fa5e4e 100644 --- a/src/main/java/com/eventsourcing/bankAccount/repository/BankAccountMongoRepository.java +++ b/src/main/java/com/eventsourcing/bankAccount/repository/BankAccountMongoRepository.java @@ -8,4 +8,6 @@ import java.util.Optional; public interface BankAccountMongoRepository extends MongoRepository { Optional findByAggregateId(String aggregateId); + + void deleteByAggregateId(String aggregateId); }