From b3fc8b6e45cee5f6548f402388ec0f7cb5c3f02f Mon Sep 17 00:00:00 2001 From: Michal Zeman <> Date: Sun, 22 Sep 2019 11:17:29 +0200 Subject: [PATCH] Transaction aggregate refactoring related to status --- .../domain/TransactionAggregate.java | 30 ++++------ .../transaction/domain/TransactionState.java | 2 + .../transaction/domain/TransactionStatus.java | 8 +++ .../command/TransactionCommandHandler.java | 5 +- .../domain/event/FinishTransactionFailed.java | 3 + .../domain/TransactionAggregateTest.java | 59 ++++++++++++++++++- 6 files changed, 87 insertions(+), 20 deletions(-) create mode 100644 bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionStatus.java diff --git a/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionAggregate.java b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionAggregate.java index 7970e73..66de9b6 100644 --- a/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionAggregate.java +++ b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionAggregate.java @@ -11,13 +11,6 @@ import java.math.BigDecimal; public class TransactionAggregate { - enum State { - INITIALIZED, - CREATED, - FINISHED, - FAILED - } - private Id aggregateId; private Id fromAccount; @@ -26,15 +19,15 @@ public class TransactionAggregate { private BigDecimal amount; - private State state; + private TransactionStatus status; public TransactionAggregate(String aggregateId) { this.aggregateId = new Id(aggregateId); - state = State.INITIALIZED; + status = TransactionStatus.INITIALIZED; } public TransactionCreated validateCreateTransaction(CreateTransaction command) { - if (state == State.INITIALIZED) { + if (status == TransactionStatus.INITIALIZED) { Id.validate(command.fromAccountId(), command.toAccountId()); if (command.amount().compareTo(BigDecimal.ZERO) <= 0) { throw new RuntimeException(String.format("Amount can't be %s", command.amount())); @@ -48,13 +41,13 @@ public class TransactionAggregate { .toAccountId(command.toAccountId()) .build(); } else { - throw new RuntimeException(String.format("Can't be applied command %s, aggregate is in state %s", - command, this.state)); + throw new RuntimeException(String.format("Can't be applied command %s, aggregate is in TransactionStatus %s", + command, this.status)); } } public TransactionFinished validateFinishTransaction(FinishTransaction command) { - if (state == State.CREATED) { + if (status == TransactionStatus.CREATED) { return TransactionFinished.builder() .aggregateId(aggregateId.getValue()) .correlationId(command.correlationId()) @@ -62,7 +55,7 @@ public class TransactionAggregate { .toAccountId(toAccount.getValue()) .build(); } else { - throw new RuntimeException(String.format("Transaction in the state: %s can't be finished!", state)); + throw new RuntimeException(String.format("Transaction in the state: %s can't be finished!", status)); } } @@ -70,26 +63,27 @@ public class TransactionAggregate { this.fromAccount = new Id(created.fromAccountId()); this.toAccount = new Id(created.toAccountId()); this.amount = created.amount(); - this.state = State.CREATED; + this.status = TransactionStatus.CREATED; return this; } public TransactionAggregate applyTransactionFinished(TransactionFinished event) { - this.state = State.FINISHED; + this.status = TransactionStatus.FINISHED; return this; } public TransactionAggregate applyTransactionFailed(TransactionFailed event) { - this.state = State.FAILED; + this.status = TransactionStatus.FAILED; return this; } - public TransactionState getState() { + public TransactionState getStatus() { return TransactionState.builder() .amount(amount) .fromAccountId(fromAccount.getValue()) .toAccountId(toAccount.getValue()) .aggregateId(aggregateId.getValue()) + .status(this.status) .build(); } } diff --git a/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionState.java b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionState.java index 9f81b57..6bc7858 100644 --- a/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionState.java +++ b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionState.java @@ -15,6 +15,8 @@ public interface TransactionState { BigDecimal amount(); + TransactionStatus status(); + static ImmutableTransactionState.Builder builder() { return ImmutableTransactionState.builder(); } diff --git a/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionStatus.java b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionStatus.java new file mode 100644 index 0000000..97da195 --- /dev/null +++ b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/TransactionStatus.java @@ -0,0 +1,8 @@ +package com.mz.reactor.ddd.reactorddd.transaction.domain; + +public enum TransactionStatus { + INITIALIZED, + CREATED, + FINISHED, + FAILED +} diff --git a/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/command/TransactionCommandHandler.java b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/command/TransactionCommandHandler.java index c24f4eb..5521e35 100644 --- a/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/command/TransactionCommandHandler.java +++ b/bank-account/transaction-domain/src/main/java/com/mz/reactor/ddd/reactorddd/transaction/domain/command/TransactionCommandHandler.java @@ -58,7 +58,10 @@ public class TransactionCommandHandler implements CommandHandler