diff --git a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfo.java b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfo.java index 51fa5a1..46eab5d 100644 --- a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfo.java +++ b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfo.java @@ -18,13 +18,13 @@ public class AccountInfo { private String description; private long balance; private List changes; - private Map transactions; + private List transactions; private String version; private AccountInfo() { } - public AccountInfo(String id, String customerId, String title, String description, long balance, List changes, Map transactions, String version) { + public AccountInfo(String id, String customerId, String title, String description, long balance, List changes, List transactions, String version) { this.id = id; this.customerId = customerId; @@ -57,11 +57,11 @@ public class AccountInfo { } public List getChanges() { - return changes == null ? Collections.EMPTY_LIST : changes; + return changes; } public List getTransactions() { - return transactions == null ? Collections.EMPTY_LIST : new ArrayList<>(transactions.values()); + return transactions; } public String getVersion() { diff --git a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfoUpdateService.java b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfoUpdateService.java index ef65108..ecc47fb 100644 --- a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfoUpdateService.java +++ b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountInfoUpdateService.java @@ -17,35 +17,40 @@ import static org.springframework.data.mongodb.core.query.Criteria.where; public class AccountInfoUpdateService { private Logger logger = LoggerFactory.getLogger(getClass()); + private AccountInfoRepository accountInfoRepository; private MongoTemplate mongoTemplate; - public AccountInfoUpdateService(MongoTemplate mongoTemplate) { + public AccountInfoUpdateService(AccountInfoRepository accountInfoRepository, MongoTemplate mongoTemplate) { + this.accountInfoRepository = accountInfoRepository; this.mongoTemplate = mongoTemplate; } public void create(String accountId, String customerId, String title, BigDecimal initialBalance, String description, String version) { try { - WriteResult x = mongoTemplate.upsert(new Query(where("id").is(accountId).and("version").exists(false)), - new Update() - .set("customerId", customerId) - .set("title", title) - .set("description", description) - .set("balance", toIntegerRepr(initialBalance)) - .set("version", version), - AccountInfo.class); + accountInfoRepository.save(new AccountInfo( + accountId, + customerId, + title, + description, + toIntegerRepr(initialBalance), + Collections.emptyList(), + Collections.emptyList(), + version)); logger.info("Saved in mongo"); } catch (Throwable t) { + logger.error("Error during saving: "); logger.error("Error during saving: ", t); throw new RuntimeException(t); } } - public void addTransaction(String eventId, String accountId, AccountTransactionInfo ti) { - mongoTemplate.upsert(new Query(where("id").is(accountId)), + public void addTransaction(String eventId, String fromAccountId, AccountTransactionInfo ti) { + mongoTemplate.updateMulti(new Query(where("id").is(fromAccountId)), /* wrong .and("version").lt(eventId) */ new Update(). - set("transactions." + eventId, ti), + push("transactions", ti). + set("version", eventId), AccountInfo.class); } diff --git a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/QuerySideAccountConfiguration.java b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/QuerySideAccountConfiguration.java index 018d760..43104bb 100644 --- a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/QuerySideAccountConfiguration.java +++ b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/QuerySideAccountConfiguration.java @@ -18,8 +18,8 @@ public class QuerySideAccountConfiguration { } @Bean - public AccountInfoUpdateService accountInfoUpdateService(MongoTemplate mongoTemplate) { - return new AccountInfoUpdateService(mongoTemplate); + public AccountInfoUpdateService accountInfoUpdateService(AccountInfoRepository accountInfoRepository, MongoTemplate mongoTemplate) { + return new AccountInfoUpdateService(accountInfoRepository, mongoTemplate); } @Bean @@ -27,8 +27,6 @@ public class QuerySideAccountConfiguration { return new AccountQueryService(accountInfoRepository); } - - @Bean public QuerySideDependencyChecker querysideDependencyChecker(MongoTemplate mongoTemplate) { return new QuerySideDependencyChecker(mongoTemplate); diff --git a/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/BankingTestConfiguration.java b/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/BankingTestConfiguration.java index 096e451..0884986 100644 --- a/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/BankingTestConfiguration.java +++ b/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/BankingTestConfiguration.java @@ -6,6 +6,7 @@ import net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside.t import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @Configuration @Import({AccountConfiguration.class, MoneyTransferConfiguration.class, EventuateJdbcEventStoreConfiguration.class}) diff --git a/java-spring/monolithic-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebConfiguration.java b/java-spring/monolithic-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebConfiguration.java index ffe415b..a7c564c 100644 --- a/java-spring/monolithic-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebConfiguration.java +++ b/java-spring/monolithic-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebConfiguration.java @@ -23,7 +23,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Configuration @Import({CommandSideWebAccountsConfiguration.class, CommandSideWebTransactionsConfiguration.class, EventuateHttpStompClientConfiguration.class, QuerySideWebConfiguration.class, CustomersQuerySideWebConfiguration.class, CustomersCommandSideWebConfiguration.class, AuthConfiguration.class, CommonSwaggerConfiguration.class}) @EnableAutoConfiguration -@ComponentScan public class BankingWebConfiguration extends WebMvcConfigurerAdapter { diff --git a/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebTestConfiguration.java b/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebTestConfiguration.java index d32d8ea..c91f07d 100644 --- a/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebTestConfiguration.java +++ b/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebTestConfiguration.java @@ -27,7 +27,6 @@ import java.util.List; @Configuration @Import({CommandSideWebAccountsConfiguration.class, CommandSideWebTransactionsConfiguration.class, EventuateJdbcEventStoreConfiguration.class, QuerySideWebConfiguration.class, CustomersQuerySideWebConfiguration.class, CustomersCommandSideWebConfiguration.class, AuthConfiguration.class, CommonSwaggerConfiguration.class}) @EnableAutoConfiguration -@ComponentScan public class BankingWebTestConfiguration extends WebMvcConfigurerAdapter { @Bean