diff --git a/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/Account.java b/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/Account.java index 6f967db..0a4fc1f 100644 --- a/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/Account.java +++ b/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/Account.java @@ -3,23 +3,30 @@ package net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside. import io.eventuate.Event; import io.eventuate.EventUtil; import io.eventuate.ReflectiveMutableCommandProcessingAggregate; -import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts.AccountCreditedEvent; -import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts.AccountDebitFailedDueToInsufficientFundsEvent; -import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts.AccountDebitedEvent; -import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts.AccountOpenedEvent; +import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts.*; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; import java.util.List; public class Account extends ReflectiveMutableCommandProcessingAggregate { private BigDecimal balance; + private boolean deleted; public List process(OpenAccountCommand cmd) { return EventUtil.events(new AccountOpenedEvent(cmd.getCustomerId(), cmd.getTitle(), cmd.getInitialBalance(), cmd.getDescription())); } + public List process(DeleteAccountCommand cmd) { + return EventUtil.events(new AccountDeletedEvent()); + } + public List process(DebitAccountCommand cmd) { + if(deleted) + return new ArrayList<>(); + if (balance.compareTo(cmd.getAmount()) < 0) return EventUtil.events(new AccountDebitFailedDueToInsufficientFundsEvent(cmd.getTransactionId())); else @@ -27,6 +34,9 @@ public class Account extends ReflectiveMutableCommandProcessingAggregate process(CreditAccountCommand cmd) { + if(deleted) + return new ArrayList<>(); + return EventUtil.events(new AccountCreditedEvent(cmd.getAmount(), cmd.getTransactionId())); } @@ -34,6 +44,10 @@ public class Account extends ReflectiveMutableCommandProcessingAggregate> deleteAccount(String accountId) { + return accountRepository.update(accountId, new DeleteAccountCommand()); + } } diff --git a/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/AccountWorkflow.java b/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/AccountWorkflow.java index 0e0791c..cdc3fb8 100644 --- a/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/AccountWorkflow.java +++ b/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/AccountWorkflow.java @@ -5,6 +5,7 @@ import io.eventuate.EntityWithIdAndVersion; import io.eventuate.EventHandlerContext; import io.eventuate.EventHandlerMethod; import io.eventuate.EventSubscriber; +import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers.CustomerToAccountDeleted; import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.transactions.DebitRecordedEvent; import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.transactions.MoneyTransferCreatedEvent; @@ -22,13 +23,7 @@ public class AccountWorkflow { String fromAccountId = event.getDetails().getFromAccountId(); - return ctx.update(Account.class, fromAccountId, new DebitAccountCommand(amount, transactionId)).handle((x, e) -> { - if (e != null) { - e.printStackTrace(); - } - return x; - } - ); + return ctx.update(Account.class, fromAccountId, new DebitAccountCommand(amount, transactionId)); } @EventHandlerMethod @@ -38,13 +33,6 @@ public class AccountWorkflow { String fromAccountId = event.getDetails().getToAccountId(); String transactionId = ctx.getEntityId(); - return ctx.update(Account.class, fromAccountId, new CreditAccountCommand(amount, transactionId)).handle((x, e) -> { - if (e != null) { - e.printStackTrace(); - } - return x; - } - ); + return ctx.update(Account.class, fromAccountId, new CreditAccountCommand(amount, transactionId)); } - } diff --git a/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/DeleteAccountCommand.java b/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/DeleteAccountCommand.java new file mode 100644 index 0000000..b96c6b3 --- /dev/null +++ b/java-spring/accounts-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/accounts/DeleteAccountCommand.java @@ -0,0 +1,4 @@ +package net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside.accounts; + +public class DeleteAccountCommand implements AccountCommand { +} diff --git a/java-spring/accounts-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/accounts/AccountController.java b/java-spring/accounts-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/accounts/AccountController.java index c2c6dbe..f6f4301 100644 --- a/java-spring/accounts-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/accounts/AccountController.java +++ b/java-spring/accounts-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/accounts/AccountController.java @@ -3,12 +3,10 @@ package net.chrisrichardson.eventstore.javaexamples.banking.web.commandside.acco import net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside.accounts.AccountService; import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.CreateAccountRequest; import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.CreateAccountResponse; +import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.DeleteAccountResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.concurrent.CompletableFuture; @@ -26,6 +24,12 @@ public class AccountController { @RequestMapping(method = RequestMethod.POST) public CompletableFuture createAccount(@Validated @RequestBody CreateAccountRequest request) { return accountService.openAccount(request.getCustomerId(), request.getTitle(), request.getInitialBalance(), request.getDescription()) - .thenApply(entityAndEventInfo -> new CreateAccountResponse(entityAndEventInfo.getEntityId())); + .thenApply(entityAndEventInfo -> new CreateAccountResponse(entityAndEventInfo.getEntityId())); + } + + @RequestMapping(value = "{accountId}", method = RequestMethod.DELETE) + public CompletableFuture deleteAccount(@PathVariable String accountId) { + return accountService.deleteAccount(accountId) + .thenApply(entityAndEventInfo -> new DeleteAccountResponse(accountId)); } } 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 71751f3..f1639b3 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 @@ -53,6 +53,10 @@ public class AccountInfoUpdateService { } } + public void delete(String accountId) { + accountInfoRepository.delete(accountId); + } + public void addTransaction(String accountId, AccountTransactionInfo ti) { mongoTemplate.upsert(new Query(where("id").is(accountId)), diff --git a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountQueryWorkflow.java b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountQueryWorkflow.java index e94be56..e230892 100644 --- a/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountQueryWorkflow.java +++ b/java-spring/accounts-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/accounts/AccountQueryWorkflow.java @@ -45,6 +45,12 @@ public class AccountQueryWorkflow { accountInfoUpdateService.create(id, customerId, title, initialBalance, description, eventId); } + @EventHandlerMethod + public void delete(DispatchedEvent de) { + String id = de.getEntityId(); + accountInfoUpdateService.delete(id); + } + @EventHandlerMethod public void recordTransfer(DispatchedEvent de) { String eventId = de.getEventId().asString(); diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayProperties.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayProperties.java index 5db0b20..67d3b8d 100755 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayProperties.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayProperties.java @@ -5,9 +5,6 @@ import org.springframework.web.bind.annotation.RequestMethod; import java.util.List; -/** - * Created by popikyardo on 15.01.16. - */ @ConfigurationProperties(prefix = "api.gateway") public class ApiGatewayProperties { diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayServiceConfiguration.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayServiceConfiguration.java index b01f4dc..e59c91c 100755 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayServiceConfiguration.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/ApiGatewayServiceConfiguration.java @@ -20,9 +20,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter import java.util.Collections; -/** - * Created by popikyardo on 15.01.16. - */ @Configuration @ComponentScan @EnableAutoConfiguration diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/RestUtil.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/RestUtil.java index 7e6e9fc..82b4374 100755 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/RestUtil.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/RestUtil.java @@ -2,9 +2,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.apigateway; import org.springframework.http.HttpStatus; -/** - * Created by popikyardo on 07.12.15. - */ public class RestUtil { public static boolean isError(HttpStatus status) { diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/controller/GatewayController.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/controller/GatewayController.java index 291a733..73e7ac5 100755 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/controller/GatewayController.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/controller/GatewayController.java @@ -16,7 +16,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @@ -32,12 +31,8 @@ import java.net.URISyntaxException; import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.springframework.web.bind.annotation.RequestMethod.GET; -import static org.springframework.web.bind.annotation.RequestMethod.POST; +import static org.springframework.web.bind.annotation.RequestMethod.*; -/** - * Created by popikyardo on 15.01.16. - */ @RestController public class GatewayController { @@ -57,7 +52,7 @@ public class GatewayController { .build(); } - @RequestMapping(value = "/api/**", method = {GET, POST}) + @RequestMapping(value = "/api/**", method = {GET, POST, DELETE}) @ResponseBody public ResponseEntity proxyRequest(HttpServletRequest request) throws NoSuchRequestHandlingMethodException, IOException, URISyntaxException { HttpUriRequest proxiedRequest = createHttpUriRequest(request); diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ContentRequestTransformer.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ContentRequestTransformer.java index 570f176..afdd433 100644 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ContentRequestTransformer.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ContentRequestTransformer.java @@ -10,9 +10,6 @@ import java.io.IOException; import java.net.URISyntaxException; import java.util.stream.Collectors; -/** - * Created by popikyardo on 21.01.16. - */ public class ContentRequestTransformer extends ProxyRequestTransformer { @Override diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/HeadersRequestTransformer.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/HeadersRequestTransformer.java index b39a589..c3c8bbb 100644 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/HeadersRequestTransformer.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/HeadersRequestTransformer.java @@ -8,9 +8,6 @@ import java.io.IOException; import java.net.URISyntaxException; import java.util.Enumeration; -/** - * Created by popikyardo on 21.01.16. - */ public class HeadersRequestTransformer extends ProxyRequestTransformer { @Override diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ProxyRequestTransformer.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ProxyRequestTransformer.java index a983433..57406c0 100644 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ProxyRequestTransformer.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/ProxyRequestTransformer.java @@ -7,9 +7,6 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.net.URISyntaxException; -/** - * Created by popikyardo on 21.01.16. - */ public abstract class ProxyRequestTransformer { protected ProxyRequestTransformer predecessor; diff --git a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/URLRequestTransformer.java b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/URLRequestTransformer.java index c68af48..60ee208 100644 --- a/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/URLRequestTransformer.java +++ b/java-spring/api-gateway-service/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/apigateway/utils/URLRequestTransformer.java @@ -9,9 +9,6 @@ import javax.servlet.http.HttpServletRequest; import java.net.URI; import java.net.URISyntaxException; -/** - * Created by popikyardo on 21.01.16. - */ public class URLRequestTransformer extends ProxyRequestTransformer { private ApiGatewayProperties apiGatewayProperties; diff --git a/java-spring/api-gateway-service/src/main/resources/application.properties b/java-spring/api-gateway-service/src/main/resources/application.properties index 578ae6c..b2d5682 100755 --- a/java-spring/api-gateway-service/src/main/resources/application.properties +++ b/java-spring/api-gateway-service/src/main/resources/application.properties @@ -22,4 +22,10 @@ api.gateway.endpoints[4].method=POST api.gateway.endpoints[4].location=http://${customers.commandside.service.host}:8080 api.gateway.endpoints[5].path=[/]*api/transfers.* api.gateway.endpoints[5].method=POST -api.gateway.endpoints[5].location=http://${transfers.commandside.service.host}:8080 \ No newline at end of file +api.gateway.endpoints[5].location=http://${transfers.commandside.service.host}:8080 +api.gateway.endpoints[6].path=[/]*api/customers.* +api.gateway.endpoints[6].method=DELETE +api.gateway.endpoints[6].location=http://${customers.commandside.service.host}:8080 +api.gateway.endpoints[7].path=[/]*api/accounts.* +api.gateway.endpoints[7].method=DELETE +api.gateway.endpoints[7].location=http://${accounts.commandside.service.host}:8080 \ No newline at end of file diff --git a/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQuerySideIntegrationTest.java b/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQuerySideIntegrationTest.java index 89956b7..2f0a580 100644 --- a/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQuerySideIntegrationTest.java +++ b/java-spring/backend-integration-tests/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQuerySideIntegrationTest.java @@ -61,7 +61,7 @@ public class CustomerQuerySideIntegrationTest { public void verify(QuerySideCustomer querySideCustomer) { Assert.assertEquals(customerInfo.getName(), querySideCustomer.getName()); Assert.assertEquals(customerInfo.getSsn(), querySideCustomer.getSsn()); - Assert.assertEquals(customerInfo.getEmail(), querySideCustomer.getEmail()); + Assert.assertEquals(customerInfo.getUserCredentials().getEmail(), querySideCustomer.getEmail()); Assert.assertEquals(customerInfo.getPhoneNumber(), querySideCustomer.getPhoneNumber()); Assert.assertEquals(customerInfo.getAddress(), querySideCustomer.getAddress()); diff --git a/java-spring/build-and-test-all-eventuate-local.sh b/java-spring/build-and-test-all-eventuate-local.sh index 5f7caca..d448558 100755 --- a/java-spring/build-and-test-all-eventuate-local.sh +++ b/java-spring/build-and-test-all-eventuate-local.sh @@ -1,4 +1,5 @@ #! /bin/bash +export JAVA_OPTS="-Xmx128m -Xms128m" export EXTRA_INFRASTRUCTURE_SERVICES=cdcservice ../_build-and-test-all.sh -f docker-compose-eventuate-local.yml -P eventuateLocal=1 $* diff --git a/java-spring/build-and-test-all.sh b/java-spring/build-and-test-all.sh index 5ea0a3b..e123e57 100755 --- a/java-spring/build-and-test-all.sh +++ b/java-spring/build-and-test-all.sh @@ -1,3 +1,4 @@ #! /bin/bash +export JAVA_OPTS="-Xmx128m -Xms128m" ../_build-and-test-all.sh $* diff --git a/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/controller/AuthController.java b/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/controller/AuthController.java index 59143b9..4c34a68 100644 --- a/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/controller/AuthController.java +++ b/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/controller/AuthController.java @@ -2,6 +2,7 @@ package net.chrisrichardson.eventstore.javaexamples.banking.commonauth.controlle import com.fasterxml.jackson.databind.ObjectMapper; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.QuerySideCustomer; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.UserCredentials; import net.chrisrichardson.eventstore.javaexamples.banking.commonauth.CustomerAuthService; import net.chrisrichardson.eventstore.javaexamples.banking.commonauth.model.AuthRequest; import net.chrisrichardson.eventstore.javaexamples.banking.commonauth.model.ErrorResponse; @@ -23,9 +24,6 @@ import java.io.IOException; import static org.springframework.web.bind.annotation.RequestMethod.GET; import static org.springframework.web.bind.annotation.RequestMethod.POST; -/** - * Created by popikyardo on 21.09.15. - */ @RestController @Validated @RequestMapping("/api") @@ -40,8 +38,8 @@ public class AuthController { private static ObjectMapper objectMapper = new ObjectMapper(); @RequestMapping(value = "/login", method = POST) - public ResponseEntity doAuth(@RequestBody @Valid AuthRequest request) throws IOException { - QuerySideCustomer customer = customerAuthService.findByEmail(request.getEmail()); + public ResponseEntity doAuth(@RequestBody @Valid UserCredentials request) throws IOException { + QuerySideCustomer customer = customerAuthService.findByEmailAndPassword(request.getEmail(), request.getPassword()); Token token = tokenService.allocateToken(objectMapper.writeValueAsString(new User(request.getEmail()))); return ResponseEntity.status(HttpStatus.OK).header("access-token", token.getKey()) diff --git a/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/AuthRequest.java b/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/AuthRequest.java index 237879e..262ac7c 100644 --- a/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/AuthRequest.java +++ b/java-spring/common-auth-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/AuthRequest.java @@ -3,20 +3,21 @@ package net.chrisrichardson.eventstore.javaexamples.banking.commonauth.model; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotBlank; -/** - * Created by popikyardo on 19.10.15. - */ public class AuthRequest { @NotBlank @Email private String email; + @NotBlank + private String password; + public AuthRequest() { } - public AuthRequest(String email) { + public AuthRequest(String email, String password) { this.email = email; + this.password = password; } public String getEmail() { @@ -26,4 +27,12 @@ public class AuthRequest { public void setEmail(String email) { this.email = email; } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } } diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthConfiguration.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthConfiguration.java index df5e1cd..f661895 100755 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthConfiguration.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthConfiguration.java @@ -1,5 +1,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.commonauth; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.QuerySideCustomer; import net.chrisrichardson.eventstore.javaexamples.banking.commonauth.filter.StatelessAuthenticationFilter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -22,9 +23,6 @@ import org.springframework.security.web.authentication.www.BasicAuthenticationFi import java.security.SecureRandom; -/** - * Created by popikyardo on 21.09.15. - */ @Configuration @ComponentScan @EnableWebSecurity @@ -43,21 +41,14 @@ public class AuthConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { - //auth.inMemoryAuthentication(); auth.userDetailsService(userDetailsServiceBean()); } @Override public UserDetailsService userDetailsServiceBean() { return email -> { -/* QuerySideCustomer customer = customerAuthService.findByEmail(email); - if (customer != null) { - return new User(email); - } else { - throw new UsernameNotFoundException(String.format("could not find the customer '%s'", email)); - }*/ - //authorize everyone with basic authentication - return new User(email, "", true, true, true, true, + QuerySideCustomer customer = customerAuthService.findByEmail(email); + return new User(email, customer.getPassword(), true, true, true, true, AuthorityUtils.createAuthorityList("USER")); }; } diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthProperties.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthProperties.java index f83b3a7..7f47e10 100755 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthProperties.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/AuthProperties.java @@ -2,9 +2,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.commonauth; import org.springframework.boot.context.properties.ConfigurationProperties; -/** - * Created by popikyardo on 21.09.15. - */ @ConfigurationProperties(locations = "classpath:auth.properties", ignoreUnknownFields = false, prefix = "auth") public class AuthProperties { private String serverSecret; diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthRepository.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthRepository.java index 4c5425e..4e1b25d 100644 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthRepository.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthRepository.java @@ -8,4 +8,6 @@ import java.util.List; interface CustomerAuthRepository extends MongoRepository { List findByEmail(String email); + + List findByEmailAndPassword(String email, String password); } \ No newline at end of file diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthService.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthService.java index 27904b3..2412748 100644 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthService.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/CustomerAuthService.java @@ -1,9 +1,7 @@ package net.chrisrichardson.eventstore.javaexamples.banking.commonauth; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.QuerySideCustomer; -import org.springframework.dao.EmptyResultDataAccessException; - -import java.util.List; +import org.springframework.dao.support.DataAccessUtils; /** * Created by Main on 15.02.2016. @@ -16,13 +14,10 @@ public class CustomerAuthService { } public QuerySideCustomer findByEmail(String email) { - List customers = customerAuthRepository.findByEmail(email); - if (customers.isEmpty()) - throw new EmptyResultDataAccessException(1); - //TODO: add unique email constraint -/* else if(customers.size()>1) - throw new IncorrectResultSizeDataAccessException(1, customers.size());*/ - else - return customers.get(0); + return DataAccessUtils.uniqueResult(customerAuthRepository.findByEmail(email)); + } + + public QuerySideCustomer findByEmailAndPassword(String email, String password) { + return DataAccessUtils.uniqueResult(customerAuthRepository.findByEmailAndPassword(email, password)); } } diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/TokenAuthenticationService.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/TokenAuthenticationService.java index ecea757..2df3a5b 100755 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/TokenAuthenticationService.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/TokenAuthenticationService.java @@ -12,9 +12,6 @@ import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -/** - * Created by popikyardo on 23.09.15. - */ @Service public class TokenAuthenticationService { diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/filter/StatelessAuthenticationFilter.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/filter/StatelessAuthenticationFilter.java index 517b0e1..814ba1e 100755 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/filter/StatelessAuthenticationFilter.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/filter/StatelessAuthenticationFilter.java @@ -11,9 +11,6 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -/** - * Created by popikyardo on 23.09.15. - */ public class StatelessAuthenticationFilter extends GenericFilterBean { private final TokenAuthenticationService tokenAuthenticationService; diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/User.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/User.java index 657a555..f18effd 100755 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/User.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/User.java @@ -10,9 +10,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; -/** - * Created by popikyardo on 23.09.15. - */ @JsonIgnoreProperties(ignoreUnknown = true) public class User implements UserDetails { diff --git a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/UserAuthentication.java b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/UserAuthentication.java index 81b9083..62dc24d 100755 --- a/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/UserAuthentication.java +++ b/java-spring/common-auth/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/commonauth/model/UserAuthentication.java @@ -5,9 +5,6 @@ import org.springframework.security.core.GrantedAuthority; import java.util.Collection; -/** - * Created by popikyardo on 23.09.15. - */ public class UserAuthentication implements Authentication { private final User user; diff --git a/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/accounts/AccountDeletedEvent.java b/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/accounts/AccountDeletedEvent.java new file mode 100644 index 0000000..5b49081 --- /dev/null +++ b/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/accounts/AccountDeletedEvent.java @@ -0,0 +1,8 @@ +package net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts; + +import io.eventuate.Event; + +import java.util.Date; + +public class AccountDeletedEvent implements Event { +} diff --git a/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/customers/CustomerCreatedEvent.java b/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/customers/CustomerCreatedEvent.java index 5c29620..31bc3b5 100644 --- a/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/customers/CustomerCreatedEvent.java +++ b/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/customers/CustomerCreatedEvent.java @@ -2,9 +2,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.backend.common.custo import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerInfo; -/** - * Created by popikyardo on 02.02.16. - */ public class CustomerCreatedEvent extends CustomerEvent { private CustomerInfo customerInfo; diff --git a/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/customers/CustomerToAccountDeleted.java b/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/customers/CustomerToAccountDeleted.java new file mode 100644 index 0000000..06876b8 --- /dev/null +++ b/java-spring/common-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/common/customers/CustomerToAccountDeleted.java @@ -0,0 +1,21 @@ +package net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers; + +public class CustomerToAccountDeleted extends CustomerEvent { + + private String accountId; + + public CustomerToAccountDeleted() { + } + + public CustomerToAccountDeleted(String accountId) { + this.accountId = accountId; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } +} diff --git a/java-spring/common/build.gradle b/java-spring/common/build.gradle index ffde630..20d4f66 100644 --- a/java-spring/common/build.gradle +++ b/java-spring/common/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'java' dependencies { compile "commons-lang:commons-lang:2.6" compile "org.springframework.boot:spring-boot-starter-web:$springBootVersion" + compile "org.springframework.boot:spring-boot-starter-data-mongodb:$springBootVersion" testCompile group: 'junit', name: 'junit', version: '4.11' } diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryEntry.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryEntry.java index f91c2e7..7ce979b 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryEntry.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryEntry.java @@ -5,9 +5,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import java.util.Date; -/** - * Created by popikyardo on 9/1/16. - */ @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "entryType") diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryResponse.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryResponse.java index b20d958..ef629b6 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryResponse.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountHistoryResponse.java @@ -2,9 +2,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.common.accounts; import java.util.List; -/** - * Created by popikyardo on 9/1/16. - */ public class AccountHistoryResponse { private List transactionsHistory; diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountOpenInfo.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountOpenInfo.java index e661d4b..2a14399 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountOpenInfo.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/AccountOpenInfo.java @@ -2,9 +2,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.common.accounts; import java.util.Date; -/** - * Created by popikyardo on 9/1/16. - */ public class AccountOpenInfo extends AccountHistoryEntry { private long initialBalance; diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/DeleteAccountResponse.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/DeleteAccountResponse.java new file mode 100644 index 0000000..f3fbbf2 --- /dev/null +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/DeleteAccountResponse.java @@ -0,0 +1,22 @@ +package net.chrisrichardson.eventstore.javaexamples.banking.common.accounts; + + +public class DeleteAccountResponse { + + private String accountId; + + public DeleteAccountResponse() { + } + + public DeleteAccountResponse(String accountId) { + this.accountId = accountId; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } +} diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/GetAccountsResponse.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/GetAccountsResponse.java index 814f3f8..93551ec 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/GetAccountsResponse.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/accounts/GetAccountsResponse.java @@ -2,9 +2,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.common.accounts; import java.util.List; -/** - * Created by popikyardo on 9/1/16. - */ public class GetAccountsResponse { private List accounts; diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/AddToAccountResponse.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/AddToAccountResponse.java index b61b5b8..d1012ba 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/AddToAccountResponse.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/AddToAccountResponse.java @@ -1,8 +1,5 @@ package net.chrisrichardson.eventstore.javaexamples.banking.common.customers; -/** - * Created by popikyardo on 24.03.16. - */ public class AddToAccountResponse { private String version; diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/Address.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/Address.java index 70dc947..1154f63 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/Address.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/Address.java @@ -5,9 +5,6 @@ import org.apache.commons.lang.builder.HashCodeBuilder; import javax.validation.constraints.NotNull; -/** - * Created by popikyardo on 02.02.16. - */ public class Address { @NotNull private String street1; diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerInfo.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerInfo.java index 9de577d..962bc7c 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerInfo.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerInfo.java @@ -1,29 +1,26 @@ package net.chrisrichardson.eventstore.javaexamples.banking.common.customers; +import com.fasterxml.jackson.annotation.JsonUnwrapped; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import javax.validation.constraints.NotNull; -/** - * Created by popikyardo on 03.02.16. - */ public class CustomerInfo { private Name name; - @NotNull - protected String email; + @JsonUnwrapped + protected UserCredentials userCredentials; @NotNull protected String ssn; - @NotNull protected String phoneNumber; protected Address address; public CustomerInfo() { } - public CustomerInfo(Name name, String email, String ssn, String phoneNumber, Address address) { + public CustomerInfo(Name name, UserCredentials userCredentials, String ssn, String phoneNumber, Address address) { this.name = name; - this.email = email; + this.userCredentials = userCredentials; this.ssn = ssn; this.phoneNumber = phoneNumber; this.address = address; @@ -33,8 +30,8 @@ public class CustomerInfo { return name; } - public String getEmail() { - return email; + public UserCredentials getUserCredentials() { + return userCredentials; } public String getSsn() { diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerResponse.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerResponse.java index 61d7707..09a54e7 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerResponse.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/CustomerResponse.java @@ -3,9 +3,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.common.customers; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; -/** - * Created by popikyardo on 03.02.16. - */ public class CustomerResponse { private String id; diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/QuerySideCustomer.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/QuerySideCustomer.java index 4efdc56..1310f23 100644 --- a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/QuerySideCustomer.java +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/QuerySideCustomer.java @@ -1,14 +1,19 @@ package net.chrisrichardson.eventstore.javaexamples.banking.common.customers; +import org.springframework.data.mongodb.core.index.Indexed; + import java.util.Map; /** * Created by Main on 05.02.2016. */ public class QuerySideCustomer { + private String id; private Name name; + @Indexed(unique=true) private String email; + private String password; private String ssn; private String phoneNumber; private Address address; @@ -17,10 +22,11 @@ public class QuerySideCustomer { public QuerySideCustomer() { } - public QuerySideCustomer(String id, Name name, String email, String ssn, String phoneNumber, Address address, Map toAccounts) { + public QuerySideCustomer(String id, Name name, String email, String password, String ssn, String phoneNumber, Address address, Map toAccounts) { this.id = id; this.name = name; this.email = email; + this.password = password; this.ssn = ssn; this.phoneNumber = phoneNumber; this.address = address; @@ -51,6 +57,14 @@ public class QuerySideCustomer { this.email = email; } + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + public String getSsn() { return ssn; } diff --git a/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/UserCredentials.java b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/UserCredentials.java new file mode 100644 index 0000000..ceb994a --- /dev/null +++ b/java-spring/common/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/common/customers/UserCredentials.java @@ -0,0 +1,49 @@ +package net.chrisrichardson.eventstore.javaexamples.banking.common.customers; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.hibernate.validator.constraints.Email; + +import javax.validation.constraints.NotNull; + +public class UserCredentials { + @NotNull + @Email + private String email; + @NotNull + private String password; + + public UserCredentials() { + } + + public UserCredentials(String email, String password) { + this.email = email; + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public boolean equals(Object o) { + return EqualsBuilder.reflectionEquals(this, o); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } +} diff --git a/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/CreateCustomerCommand.java b/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/CreateCustomerCommand.java index c7ebe65..ef3cc95 100644 --- a/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/CreateCustomerCommand.java +++ b/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/CreateCustomerCommand.java @@ -2,9 +2,6 @@ package net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside. import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerInfo; -/** - * Created by popikyardo on 02.02.16. - */ public class CreateCustomerCommand implements CustomerCommand { private CustomerInfo customerInfo; diff --git a/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/Customer.java b/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/Customer.java index ffd65c5..40db795 100644 --- a/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/Customer.java +++ b/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/Customer.java @@ -3,15 +3,13 @@ package net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside. import io.eventuate.Event; import io.eventuate.EventUtil; import io.eventuate.ReflectiveMutableCommandProcessingAggregate; +import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers.CustomerToAccountDeleted; import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers.CustomerAddedToAccount; import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers.CustomerCreatedEvent; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerInfo; import java.util.List; -/** - * Created by popikyardo on 02.02.16. - */ public class Customer extends ReflectiveMutableCommandProcessingAggregate { private CustomerInfo customerInfo; @@ -23,6 +21,9 @@ public class Customer extends ReflectiveMutableCommandProcessingAggregate process(AddToAccountCommand cmd) { return EventUtil.events(new CustomerAddedToAccount(cmd.getToAccountInfo())); } + public List process(DeleteToAccountCommand cmd) { + return EventUtil.events(new CustomerToAccountDeleted(cmd.getAccountId())); + } public void apply(CustomerCreatedEvent event) { customerInfo = event.getCustomerInfo(); @@ -30,6 +31,8 @@ public class Customer extends ReflectiveMutableCommandProcessingAggregate> addToAccount(String customerId, ToAccountInfo toAccountInfo) { return accountRepository.update(customerId, new AddToAccountCommand(toAccountInfo)); } + + public CompletableFuture> deleteToAccount(String customerId, String accountId) { + return accountRepository.update(customerId, new DeleteToAccountCommand(accountId)); + } } diff --git a/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/DeleteToAccountCommand.java b/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/DeleteToAccountCommand.java new file mode 100644 index 0000000..f133568 --- /dev/null +++ b/java-spring/customers-command-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/commandside/customers/DeleteToAccountCommand.java @@ -0,0 +1,21 @@ +package net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside.customers; + +public class DeleteToAccountCommand implements CustomerCommand { + + private String accountId; + + public DeleteToAccountCommand() { + } + + public DeleteToAccountCommand(String accountId) { + this.accountId = accountId; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } +} diff --git a/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomerController.java b/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomerController.java index 14ff012..52e930c 100644 --- a/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomerController.java +++ b/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomerController.java @@ -1,6 +1,8 @@ package net.chrisrichardson.eventstore.javaexamples.banking.web.commandside.customers; import net.chrisrichardson.eventstore.javaexamples.banking.backend.commandside.customers.CustomerService; +import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.CreateAccountResponse; +import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.DeleteAccountResponse; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.AddToAccountResponse; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerInfo; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerResponse; @@ -11,9 +13,6 @@ import org.springframework.web.bind.annotation.*; import java.util.concurrent.CompletableFuture; -/** - * Created by popikyardo on 03.02.16. - */ @RestController @RequestMapping("/api/customers") public class CustomerController { @@ -37,4 +36,10 @@ public class CustomerController { .thenApply(entityAndEventInfo -> new AddToAccountResponse(entityAndEventInfo.getEntityVersion().toString())); } + @RequestMapping(value = "/{customerId}/toaccounts/{accountId}", method = RequestMethod.DELETE) + public CompletableFuture deleteToAccount(@PathVariable String customerId, @PathVariable String accountId) { + return customerService.deleteToAccount(customerId, accountId) + .thenApply(entityAndEventInfo -> new DeleteAccountResponse(accountId)); + } + } diff --git a/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomersCommandSideWebConfiguration.java b/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomersCommandSideWebConfiguration.java index 24599a2..20addb1 100644 --- a/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomersCommandSideWebConfiguration.java +++ b/java-spring/customers-command-side-web/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/web/commandside/customers/CustomersCommandSideWebConfiguration.java @@ -6,9 +6,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -/** - * Created by popikyardo on 03.02.16. - */ @Configuration @Import({CustomerConfiguration.class}) @ComponentScan diff --git a/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerInfoUpdateService.java b/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerInfoUpdateService.java index 3964683..c9524e0 100644 --- a/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerInfoUpdateService.java +++ b/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerInfoUpdateService.java @@ -6,46 +6,65 @@ import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.ToAc import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DuplicateKeyException; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; import java.util.Collections; +import static org.springframework.data.mongodb.core.query.Criteria.where; + /** * Created by Main on 04.02.2016. */ public class CustomerInfoUpdateService { - private Logger logger = LoggerFactory.getLogger(getClass()); + private Logger logger = LoggerFactory.getLogger(getClass()); - private QuerySideCustomerRepository querySideCustomerRepository; + private QuerySideCustomerRepository querySideCustomerRepository; + private MongoTemplate mongoTemplate; - public CustomerInfoUpdateService(QuerySideCustomerRepository querySideCustomerRepository) { - this.querySideCustomerRepository = querySideCustomerRepository; + public CustomerInfoUpdateService(QuerySideCustomerRepository querySideCustomerRepository, MongoTemplate mongoTemplate) { + this.querySideCustomerRepository = querySideCustomerRepository; + this.mongoTemplate = mongoTemplate; + } + + public void create(String id, CustomerInfo customerInfo) { + try { + querySideCustomerRepository.save(new QuerySideCustomer(id, + customerInfo.getName(), + customerInfo.getUserCredentials().getEmail(), + customerInfo.getUserCredentials().getPassword(), + customerInfo.getSsn(), + customerInfo.getPhoneNumber(), + customerInfo.getAddress(), + Collections.emptyMap() + ) + ); + logger.info("Saved in mongo"); + } catch (DuplicateKeyException t) { + logger.warn("When saving ", t); } + } - public void create(String id, CustomerInfo customerInfo) { - try { - querySideCustomerRepository.save(new QuerySideCustomer(id, - customerInfo.getName(), - customerInfo.getEmail(), - customerInfo.getSsn(), - customerInfo.getPhoneNumber(), - customerInfo.getAddress(), - Collections.emptyMap() - ) - ); - logger.info("Saved in mongo"); - } catch (DuplicateKeyException t) { - logger.warn("When saving ", t); - } catch (Throwable t) { - logger.error("Error during saving: ", t); - throw new RuntimeException(t); - } - } + public void addToAccount(String id, ToAccountInfo accountInfo) { + mongoTemplate.upsert(new Query(where("id").is(id)), + new Update(). + set("toAccounts." + accountInfo.getId(), accountInfo), + QuerySideCustomer.class); + } - public void addToAccount(String id, ToAccountInfo accountInfo) { - QuerySideCustomer customer = querySideCustomerRepository.findOne(id); - customer.getToAccounts().put(accountInfo.getId(), accountInfo); - querySideCustomerRepository.save(customer); - } + public void deleteToAccountFromAllCustomers(String accountId) { + mongoTemplate.updateMulti(new Query(where("toAccounts." + accountId).exists(true)), + new Update(). + unset("toAccounts." + accountId), + QuerySideCustomer.class); + } + public void deleteToAccount(String customerId, String accountId) { + mongoTemplate.upsert(new Query(where("id").is(customerId)), + new Update(). + unset("toAccounts." + accountId), + QuerySideCustomer.class); + } } diff --git a/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQueryWorkflow.java b/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQueryWorkflow.java index 0070a63..f625031 100644 --- a/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQueryWorkflow.java +++ b/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerQueryWorkflow.java @@ -3,6 +3,8 @@ package net.chrisrichardson.eventstore.javaexamples.banking.backend.queryside.cu import io.eventuate.DispatchedEvent; import io.eventuate.EventHandlerMethod; import io.eventuate.EventSubscriber; +import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts.AccountDeletedEvent; +import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers.CustomerToAccountDeleted; import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers.CustomerAddedToAccount; import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.customers.CustomerCreatedEvent; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.ToAccountInfo; @@ -42,4 +44,19 @@ public class CustomerQueryWorkflow { customerInfoUpdateService.addToAccount(id, toAccountInfo); } + @EventHandlerMethod + public void deleteToAccount(DispatchedEvent de) { + String id = de.getEntityId(); + CustomerToAccountDeleted event = de.getEvent(); + String accountId = event.getAccountId(); + + customerInfoUpdateService.deleteToAccount(id, accountId); + } + + @EventHandlerMethod + public void deleteToAccounts(DispatchedEvent de) { + String accountId = de.getEntityId(); + + customerInfoUpdateService.deleteToAccountFromAllCustomers(accountId); + } } diff --git a/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/QuerySideCustomerConfiguration.java b/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/QuerySideCustomerConfiguration.java index 2fb0cb3..45a44b5 100644 --- a/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/QuerySideCustomerConfiguration.java +++ b/java-spring/customers-query-side-backend/src/main/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/QuerySideCustomerConfiguration.java @@ -21,8 +21,8 @@ public class QuerySideCustomerConfiguration { } @Bean - public CustomerInfoUpdateService customerInfoUpdateService(QuerySideCustomerRepository querySideCustomerRepository) { - return new CustomerInfoUpdateService(querySideCustomerRepository); + public CustomerInfoUpdateService customerInfoUpdateService(QuerySideCustomerRepository querySideCustomerRepository, MongoTemplate mongoTemplate) { + return new CustomerInfoUpdateService(querySideCustomerRepository, mongoTemplate); } @Bean diff --git a/java-spring/customers-query-side-backend/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerInfoUpdateServiceTest.java b/java-spring/customers-query-side-backend/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerInfoUpdateServiceTest.java new file mode 100644 index 0000000..1948e38 --- /dev/null +++ b/java-spring/customers-query-side-backend/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/backend/queryside/customers/CustomerInfoUpdateServiceTest.java @@ -0,0 +1,90 @@ +package net.chrisrichardson.eventstore.javaexamples.banking.backend.queryside.customers; + +import io.eventuate.javaclient.spring.jdbc.EventuateJdbcEventStoreConfiguration; +import io.eventuate.javaclient.spring.jdbc.IdGenerator; +import io.eventuate.javaclient.spring.jdbc.IdGeneratorImpl; +import net.chrisrichardson.eventstore.javaexamples.banking.backend.common.accounts.AccountCreditedEvent; +import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.AccountChangeInfo; +import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.AccountTransactionInfo; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerInfo; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.QuerySideCustomer; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.ToAccountInfo; +import net.chrisrichardson.eventstore.javaexamples.banking.common.transactions.TransferState; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.concurrent.ExecutionException; + +import static net.chrisrichardson.eventstorestore.javaexamples.testutil.CustomersTestUtils.generateCustomerInfo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = CustomerInfoUpdateServiceTest.CustomerInfoUpdateServiceTestConfiguration.class) +@IntegrationTest +public class CustomerInfoUpdateServiceTest { + + @Configuration + @EnableAutoConfiguration + @Import({QuerySideCustomerConfiguration.class, EventuateJdbcEventStoreConfiguration.class}) + public static class CustomerInfoUpdateServiceTestConfiguration { + + } + + @Autowired + private CustomerInfoUpdateService customerInfoUpdateService; + + @Autowired + private CustomerQueryService customerQueryService; + + @Test + public void shouldSaveQuerysideCustomer() throws ExecutionException, InterruptedException { + IdGenerator x = new IdGeneratorImpl(); + String customerId = x.genId().asString(); + + CustomerInfo customerInfo = generateCustomerInfo(); + customerInfoUpdateService.create(customerId, customerInfo); + + QuerySideCustomer querySideCustomer = customerQueryService.findByCustomerId(customerId).get(); + + assertEquals(customerInfo.getName(), querySideCustomer.getName()); + assertEquals(customerInfo.getAddress(), querySideCustomer.getAddress()); + assertEquals(customerInfo.getUserCredentials().getEmail(), querySideCustomer.getEmail()); + assertEquals(customerInfo.getPhoneNumber(), querySideCustomer.getPhoneNumber()); + assertEquals(customerInfo.getSsn(), querySideCustomer.getSsn()); + } + + @Test + public void shouldAddAndDeleteToAccount() throws ExecutionException, InterruptedException { + IdGenerator x = new IdGeneratorImpl(); + String customerId = x.genId().asString(); + String accountId = x.genId().asString(); + + CustomerInfo customerInfo = generateCustomerInfo(); + customerInfoUpdateService.create(customerId, customerInfo); + + ToAccountInfo toAccountInfo = new ToAccountInfo(accountId, "title", "owner", "description"); + + customerInfoUpdateService.addToAccount(customerId, toAccountInfo); + + QuerySideCustomer querySideCustomer = customerQueryService.findByCustomerId(customerId).get(); + + assertTrue(querySideCustomer.getToAccounts().containsKey(accountId)); + assertEquals(toAccountInfo, querySideCustomer.getToAccounts().get(accountId)); + + customerInfoUpdateService.deleteToAccountFromAllCustomers(accountId); + querySideCustomer = customerQueryService.findByCustomerId(customerId).get(); + + assertFalse(querySideCustomer.getToAccounts().containsKey(accountId)); + } +} \ No newline at end of file diff --git a/java-spring/customers-query-side-service/build.gradle b/java-spring/customers-query-side-service/build.gradle index 6b218bb..5f536f1 100644 --- a/java-spring/customers-query-side-service/build.gradle +++ b/java-spring/customers-query-side-service/build.gradle @@ -14,6 +14,7 @@ dependencies { testCompile project(":testutil") testCompile project(":customers-command-side-service") testCompile "org.springframework.boot:spring-boot-starter-test" + testCompile "io.eventuate.client.java:eventuate-client-java-jdbc:$eventuateClientVersion" } test { diff --git a/java-spring/customers-query-side-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/CustomersQuerySideServiceTestConfiguration.java b/java-spring/customers-query-side-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/CustomersQuerySideServiceTestConfiguration.java index cb17c0c..8e12c30 100644 --- a/java-spring/customers-query-side-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/CustomersQuerySideServiceTestConfiguration.java +++ b/java-spring/customers-query-side-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/CustomersQuerySideServiceTestConfiguration.java @@ -1,6 +1,9 @@ package net.chrisrichardson.eventstore.javaexamples.banking.web; +import io.eventuate.javaclient.spring.jdbc.EventuateJdbcEventStoreConfiguration; import net.chrisrichardson.eventstore.javaexamples.banking.commonauth.AuthConfiguration; +import net.chrisrichardson.eventstore.javaexamples.banking.web.commandside.customers.CustomersCommandSideWebConfiguration; +import net.chrisrichardson.eventstore.javaexamples.banking.web.customers.queryside.CustomersQuerySideWebConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.web.HttpMessageConverters; import org.springframework.context.annotation.Bean; @@ -14,7 +17,7 @@ import java.util.Arrays; import java.util.List; @Configuration -@Import({CustomersCommandSideServiceConfiguration.class, CustomersQuerySideServiceConfiguration.class, AuthConfiguration.class}) +@Import({CustomersCommandSideWebConfiguration.class, CustomersQuerySideWebConfiguration.class, EventuateJdbcEventStoreConfiguration.class, AuthConfiguration.class}) @EnableAutoConfiguration public class CustomersQuerySideServiceTestConfiguration { diff --git a/java-spring/docker-compose-common.yml b/java-spring/docker-compose-common.yml index c8633cf..5116036 100644 --- a/java-spring/docker-compose-common.yml +++ b/java-spring/docker-compose-common.yml @@ -1,6 +1,6 @@ apigateway: image: java:openjdk-8u91-jdk - command: java -jar /app/api-gateway-service.jar --accounts.commandside.service.host=accountscommandside --transfers.commandside.service.host=transactionscommandside --accounts.queryside.service.host=accountsqueryside --customers.commandside.service.host=customerscommandside --customers.queryside.service.host=customersqueryside + command: java ${JAVA_OPTS} -jar /app/api-gateway-service.jar --accounts.commandside.service.host=accountscommandside --transfers.commandside.service.host=transactionscommandside --accounts.queryside.service.host=accountsqueryside --customers.commandside.service.host=customerscommandside --customers.queryside.service.host=customersqueryside environment: SPRING_DATA_MONGODB_URI: mongodb://mongodb/mydb ports: @@ -8,19 +8,19 @@ apigateway: accountscommandside: image: java:openjdk-8u91-jdk - command: java -jar /app/accounts-command-side-service.jar + command: java ${JAVA_OPTS} -jar /app/accounts-command-side-service.jar ports: - "8085:8080" transactionscommandside: image: java:openjdk-8u91-jdk - command: java -jar /app/transactions-command-side-service.jar + command: java ${JAVA_OPTS} -jar /app/transactions-command-side-service.jar ports: - "8082:8080" accountsqueryside: image: java:openjdk-8u91-jdk - command: java -jar /app/accounts-query-side-service.jar + command: java ${JAVA_OPTS} -jar /app/accounts-query-side-service.jar environment: SPRING_DATA_MONGODB_URI: mongodb://mongodb/mydb ports: @@ -28,13 +28,13 @@ accountsqueryside: customerscommandside: image: java:openjdk-8u91-jdk - command: java -jar /app/customers-command-side-service.jar + command: java ${JAVA_OPTS} -jar /app/customers-command-side-service.jar ports: - "8083:8080" customersqueryside: image: java:openjdk-8u91-jdk - command: java -jar /app/customers-query-side-service.jar + command: java ${JAVA_OPTS} -jar /app/customers-query-side-service.jar ports: - "8084:8080" environment: diff --git a/java-spring/e2e-test/build.gradle b/java-spring/e2e-test/build.gradle index 25e2a75..5783c4e 100644 --- a/java-spring/e2e-test/build.gradle +++ b/java-spring/e2e-test/build.gradle @@ -9,6 +9,7 @@ dependencies { testCompile project(":common-auth") testCompile "junit:junit:4.11" testCompile "org.springframework.boot:spring-boot-starter-test:$springBootVersion" + testCompile "org.jsoup:jsoup:1.9.2" } test { diff --git a/java-spring/e2e-test/src/test/java/net/chrisrichardson/eventstore/examples/bank/web/EndToEndTest.java b/java-spring/e2e-test/src/test/java/net/chrisrichardson/eventstore/examples/bank/web/EndToEndTest.java index 7f9f293..7f02ee7 100644 --- a/java-spring/e2e-test/src/test/java/net/chrisrichardson/eventstore/examples/bank/web/EndToEndTest.java +++ b/java-spring/e2e-test/src/test/java/net/chrisrichardson/eventstore/examples/bank/web/EndToEndTest.java @@ -2,12 +2,21 @@ package net.chrisrichardson.eventstore.examples.bank.web; import net.chrisrichardson.eventstorestore.javaexamples.testutil.AbstractRestAPITest; -import net.chrisrichardson.eventstorestore.javaexamples.testutil.AuthenticatedRestTemplate; import net.chrisrichardson.eventstorestore.javaexamples.testutil.CustomersTestUtils; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.junit.Test; import org.springframework.web.client.RestTemplate; +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + public class EndToEndTest extends AbstractRestAPITest { + private String indexUrl = "http://" + getenv("SERVICE_HOST", "localhost") + ":" + 8080 + "/index.html"; + private String getenv(String name, String defaultValue) { String x = System.getenv(name); return x == null ? defaultValue : x; @@ -21,14 +30,16 @@ public class EndToEndTest extends AbstractRestAPITest { return "http://" + getenv("SERVICE_HOST", "localhost") + ":" + 8080 + "/api" + path; } - @Override - public CustomersTestUtils getCustomersTestUtils() { - return customersTestUtils; + @Test + public void shouldLoadStaticPage() throws IOException { + Document doc = Jsoup.connect(indexUrl).get(); + assertNotNull(doc.title()); + assertEquals("Money Transfer App", doc.title()); } @Override - public AuthenticatedRestTemplate getAuthenticatedRestTemplate() { - return new AuthenticatedRestTemplate(restTemplate); + public CustomersTestUtils getCustomersTestUtils() { + return customersTestUtils; } @Override diff --git a/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingAuthTest.java b/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingAuthTest.java index 2499229..b2384a0 100644 --- a/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingAuthTest.java +++ b/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingAuthTest.java @@ -3,6 +3,7 @@ package net.chrisrichardson.eventstore.javaexamples.banking.web; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerInfo; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerResponse; import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.QuerySideCustomer; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.UserCredentials; import net.chrisrichardson.eventstore.javaexamples.banking.commonauth.model.AuthRequest; import net.chrisrichardson.eventstorestore.javaexamples.testutil.CustomersTestUtils; import org.junit.Assert; @@ -48,8 +49,7 @@ public class BankingAuthTest { @Test public void shouldCreateCustomerAndLogin() { - String email = uniqueEmail(); - CustomerInfo customerInfo = generateCustomerInfo(email); + CustomerInfo customerInfo = generateCustomerInfo(); final CustomerResponse customerResponse = restTemplate.postForEntity(baseUrl("/customers"), customerInfo, CustomerResponse.class).getBody(); final String customerId = customerResponse.getId(); @@ -57,23 +57,10 @@ public class BankingAuthTest { Assert.assertNotNull(customerId); Assert.assertEquals(customerInfo, customerResponse.getCustomerInfo()); - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - customersTestUtils.assertCustomerResponse(customerId, customerInfo); - AuthRequest authRequest = new AuthRequest(email); - - final QuerySideCustomer loginQuerySideCustomer = restTemplate.postForEntity(baseUrl("/login"), authRequest, QuerySideCustomer.class).getBody(); + final QuerySideCustomer loginQuerySideCustomer = restTemplate.postForEntity(baseUrl("/login"), customerInfo.getUserCredentials(), QuerySideCustomer.class).getBody(); customersTestUtils.assertQuerySideCustomerEqualscCustomerInfo(loginQuerySideCustomer, customerResponse.getCustomerInfo()); } - - - private String uniqueEmail() { - return System.currentTimeMillis() + "@email.com"; - } } diff --git a/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebIntegrationTest.java b/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebIntegrationTest.java index 745e2b4..7c014e7 100644 --- a/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebIntegrationTest.java +++ b/java-spring/monolithic-service/src/test/java/net/chrisrichardson/eventstore/javaexamples/banking/web/BankingWebIntegrationTest.java @@ -43,11 +43,6 @@ public class BankingWebIntegrationTest extends AbstractRestAPITest { @Autowired RestTemplate restTemplate; - @Override - public AuthenticatedRestTemplate getAuthenticatedRestTemplate() { - return new AuthenticatedRestTemplate(restTemplate); - } - @Override public RestTemplate getRestTemplate() { return restTemplate; diff --git a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AbstractRestAPITest.java b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AbstractRestAPITest.java index 44942a4..bce469e 100644 --- a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AbstractRestAPITest.java +++ b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AbstractRestAPITest.java @@ -1,31 +1,36 @@ package net.chrisrichardson.eventstorestore.javaexamples.testutil; import net.chrisrichardson.eventstore.javaexamples.banking.common.accounts.*; -import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerInfo; -import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.CustomerResponse; -import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.QuerySideCustomer; -import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.ToAccountInfo; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.*; import net.chrisrichardson.eventstore.javaexamples.banking.common.transactions.CreateMoneyTransferRequest; import net.chrisrichardson.eventstore.javaexamples.banking.common.transactions.CreateMoneyTransferResponse; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; -import java.util.Arrays; import java.util.Optional; import java.util.concurrent.CompletableFuture; import static net.chrisrichardson.eventstorestore.javaexamples.testutil.CustomersTestUtils.generateCustomerInfo; import static net.chrisrichardson.eventstorestore.javaexamples.testutil.CustomersTestUtils.generateToAccountInfo; import static net.chrisrichardson.eventstorestore.javaexamples.testutil.TestUtil.eventually; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; public abstract class AbstractRestAPITest { @Test public void shouldCreateAccountsAndTransferMoney() { + CustomerInfo customerInfo = generateCustomerInfo(); + AuthenticatedRestTemplate authenticatedRestTemplate = getAuthenticatedRestTemplate(customerInfo.getUserCredentials()); + + final CustomerResponse customerResponse = getRestTemplate().postForEntity(baseUrl("/customers"), customerInfo, CustomerResponse.class).getBody(); + final String customerId = customerResponse.getId(); + + getCustomersTestUtils().assertCustomerResponse(customerId, customerInfo); + BigDecimal initialFromAccountBalance = new BigDecimal(500); BigDecimal initialToAccountBalance = new BigDecimal(100); BigDecimal amountToTransfer = new BigDecimal(150); @@ -33,14 +38,14 @@ public abstract class AbstractRestAPITest { BigDecimal finalFromAccountBalance = initialFromAccountBalance.subtract(amountToTransfer); BigDecimal finalToAccountBalance = initialToAccountBalance.add(amountToTransfer); - final CreateAccountResponse fromAccount = getAuthenticatedRestTemplate().postForEntity(baseUrl("/accounts"), - new CreateAccountRequest("00000000-00000000", "My 1 Account", "", initialFromAccountBalance), + final CreateAccountResponse fromAccount = authenticatedRestTemplate.postForEntity(baseUrl("/accounts"), + new CreateAccountRequest(customerId, "My 1 Account", "", initialFromAccountBalance), CreateAccountResponse.class); final String fromAccountId = fromAccount.getAccountId(); - CreateAccountResponse toAccount = getAuthenticatedRestTemplate().postForEntity(baseUrl("/accounts"), - new CreateAccountRequest("00000000-00000000", "My 2 Account", "", initialToAccountBalance), + CreateAccountResponse toAccount = authenticatedRestTemplate.postForEntity(baseUrl("/accounts"), + new CreateAccountRequest(customerId, "My 2 Account", "", initialToAccountBalance), CreateAccountResponse.class); String toAccountId = toAccount.getAccountId(); @@ -48,46 +53,39 @@ public abstract class AbstractRestAPITest { Assert.assertNotNull(fromAccountId); Assert.assertNotNull(toAccountId); - assertAccountBalance(fromAccountId, initialFromAccountBalance); - assertAccountBalance(toAccountId, initialToAccountBalance); + assertAccountBalance(authenticatedRestTemplate, fromAccountId, initialFromAccountBalance); + assertAccountBalance(authenticatedRestTemplate, toAccountId, initialToAccountBalance); - final CreateMoneyTransferResponse moneyTransfer = getAuthenticatedRestTemplate().postForEntity(baseUrl("/transfers"), + final CreateMoneyTransferResponse moneyTransfer = authenticatedRestTemplate.postForEntity(baseUrl("/transfers"), new CreateMoneyTransferRequest(fromAccountId, toAccountId, amountToTransfer, ""), CreateMoneyTransferResponse.class); - assertAccountBalance(fromAccountId, finalFromAccountBalance); - assertAccountBalance(toAccountId, finalToAccountBalance); + assertAccountBalance(authenticatedRestTemplate, fromAccountId, finalFromAccountBalance); + assertAccountBalance(authenticatedRestTemplate, toAccountId, finalToAccountBalance); eventually( - new Producer() { - @Override - public CompletableFuture produce() { - return CompletableFuture.completedFuture(getAuthenticatedRestTemplate().getForEntity(baseUrl("/accounts/" + fromAccountId + "/history"), - AccountHistoryResponse.class)); - } - }, - new Verifier() { - @Override - public void verify(AccountHistoryResponse accountHistoryResponse) { - Optional first = accountHistoryResponse.getTransactionsHistory().stream().filter( ahe -> ahe.getEntryType() == AccountHistoryEntry.EntryType.transaction && ((AccountTransactionInfo)ahe).getTransactionId().equals(moneyTransfer.getMoneyTransferId())).findFirst(); + () -> CompletableFuture.completedFuture(authenticatedRestTemplate.getForEntity(baseUrl("/accounts/" + fromAccountId + "/history"), + AccountHistoryResponse.class)), + accountHistoryResponse -> { + Optional first = accountHistoryResponse.getTransactionsHistory().stream().filter(ahe -> ahe.getEntryType() == AccountHistoryEntry.EntryType.transaction && ((AccountTransactionInfo) ahe).getTransactionId().equals(moneyTransfer.getMoneyTransferId())).findFirst(); - assertTrue(first.isPresent()); + assertTrue(first.isPresent()); - AccountTransactionInfo ti = (AccountTransactionInfo)first.get(); + AccountTransactionInfo ti = (AccountTransactionInfo) first.get(); - assertEquals(fromAccountId, ti.getFromAccountId()); - assertEquals(toAccountId, ti.getToAccountId()); - assertEquals(toAccountId, ti.getToAccountId()); - assertEquals(fromAccountId, ti.getFromAccountId()); - assertEquals(toCents(amountToTransfer).longValue(), ti.getAmount()); - } + assertEquals(fromAccountId, ti.getFromAccountId()); + assertEquals(toAccountId, ti.getToAccountId()); + assertEquals(toAccountId, ti.getToAccountId()); + assertEquals(fromAccountId, ti.getFromAccountId()); + assertEquals(toCents(amountToTransfer).longValue(), ti.getAmount()); }); } @Test - public void shouldCreateAccountsAndGetByCustomer() { + public void shouldCreateAndDeleteAccountsAndGetByCustomer() { BigDecimal initialFromAccountBalance = new BigDecimal(500); CustomerInfo customerInfo = generateCustomerInfo(); + AuthenticatedRestTemplate authenticatedRestTemplate = getAuthenticatedRestTemplate(customerInfo.getUserCredentials()); final CustomerResponse customerResponse = getRestTemplate().postForEntity(baseUrl("/customers"), customerInfo, CustomerResponse.class).getBody(); final String customerId = customerResponse.getId(); @@ -97,7 +95,7 @@ public abstract class AbstractRestAPITest { getCustomersTestUtils().assertCustomerResponse(customerId, customerInfo); - final CreateAccountResponse account = getAuthenticatedRestTemplate().postForEntity(baseUrl("/accounts"), + final CreateAccountResponse account = authenticatedRestTemplate.postForEntity(baseUrl("/accounts"), new CreateAccountRequest(customerId, "My 1 Account", "", initialFromAccountBalance), CreateAccountResponse.class); @@ -105,27 +103,26 @@ public abstract class AbstractRestAPITest { Assert.assertNotNull(accountId); - assertAccountBalance(accountId, initialFromAccountBalance); + assertAccountBalance(authenticatedRestTemplate, accountId, initialFromAccountBalance); eventually( - new Producer() { - @Override - public CompletableFuture produce() { - return CompletableFuture.completedFuture(getAuthenticatedRestTemplate().getForEntity(baseUrl("/customers/"+customerId+"/accounts"), - GetAccountsResponse.class)); - } - }, - new Verifier() { - @Override - public void verify(GetAccountsResponse accountResponses) { - assertTrue(accountResponses.getAccounts().stream().filter(acc -> acc.getAccountId().equals(accountId)).findFirst().isPresent()); - } - }); + () -> CompletableFuture.completedFuture(authenticatedRestTemplate.getForEntity(baseUrl("/customers/" + customerId + "/accounts"), + GetAccountsResponse.class)), + accountResponses -> assertTrue(accountResponses.getAccounts().stream().filter(acc -> acc.getAccountId().equals(accountId)).findFirst().isPresent())); + + authenticatedRestTemplate.deleteEntity(baseUrl("/accounts/" + accountId), + DeleteAccountResponse.class); + + eventually( + () -> CompletableFuture.completedFuture(authenticatedRestTemplate.getForEntity(baseUrl("/customers/" + customerId + "/accounts"), + GetAccountsResponse.class)), + accountResponses -> assertFalse(accountResponses.getAccounts().stream().filter(acc -> acc.getAccountId().equals(accountId)).findFirst().isPresent())); } @Test public void shouldCreateCustomersAndAddToAccount() { CustomerInfo customerInfo = generateCustomerInfo(); + AuthenticatedRestTemplate authenticatedRestTemplate = getAuthenticatedRestTemplate(customerInfo.getUserCredentials()); final CustomerResponse customerResponse = getRestTemplate().postForEntity(baseUrl("/customers"), customerInfo, CustomerResponse.class).getBody(); final String customerId = customerResponse.getId(); @@ -137,55 +134,41 @@ public abstract class AbstractRestAPITest { ToAccountInfo toAccountInfo = generateToAccountInfo(); - getAuthenticatedRestTemplate().postForEntity(baseUrl("/customers/" + customerId + "/toaccounts"), + authenticatedRestTemplate.postForEntity(baseUrl("/customers/" + customerId + "/toaccounts"), toAccountInfo, null); - assertToAccountsContains(customerId, toAccountInfo); + assertToAccountsContains(customerId, authenticatedRestTemplate, toAccountInfo); } private BigDecimal toCents(BigDecimal dollarAmount) { return dollarAmount.multiply(new BigDecimal(100)); } - private void assertAccountBalance(final String fromAccountId, final BigDecimal expectedBalanceInDollars) { + private void assertAccountBalance(AuthenticatedRestTemplate authenticatedRestTemplate, final String fromAccountId, final BigDecimal expectedBalanceInDollars) { final BigDecimal inCents = toCents(expectedBalanceInDollars); eventually( - new Producer() { - @Override - public CompletableFuture produce() { - return CompletableFuture.completedFuture(getAuthenticatedRestTemplate().getForEntity(baseUrl("/accounts/" + fromAccountId), - GetAccountResponse.class)); - } - }, - new Verifier() { - @Override - public void verify(GetAccountResponse accountInfo) { - assertEquals(fromAccountId, accountInfo.getAccountId()); - assertEquals(inCents, accountInfo.getBalance()); - } + () -> CompletableFuture.completedFuture(authenticatedRestTemplate.getForEntity(baseUrl("/accounts/" + fromAccountId), + GetAccountResponse.class)), + accountInfo -> { + assertEquals(fromAccountId, accountInfo.getAccountId()); + assertEquals(inCents, accountInfo.getBalance()); }); } - private void assertToAccountsContains(final String customerId, final ToAccountInfo toAccountInfo) { + private void assertToAccountsContains(final String customerId, AuthenticatedRestTemplate authenticatedRestTemplate, final ToAccountInfo toAccountInfo) { eventually( - new Producer() { - @Override - public CompletableFuture produce() { - return CompletableFuture.completedFuture(getAuthenticatedRestTemplate().getForEntity(baseUrl("/customers/" + customerId), - QuerySideCustomer.class)); - } - }, - new Verifier() { - @Override - public void verify(QuerySideCustomer customerResponse) { - assertEquals(customerId, customerResponse.getId()); - assertTrue(customerResponse.getToAccounts().values().stream().anyMatch(t -> t.equals(toAccountInfo))); - } + () -> CompletableFuture.completedFuture(authenticatedRestTemplate.getForEntity(baseUrl("/customers/" + customerId), + QuerySideCustomer.class)), + customerResponse -> { + assertEquals(customerId, customerResponse.getId()); + assertTrue(customerResponse.getToAccounts().values().stream().anyMatch(t -> t.equals(toAccountInfo))); }); } - public abstract AuthenticatedRestTemplate getAuthenticatedRestTemplate(); + public AuthenticatedRestTemplate getAuthenticatedRestTemplate(UserCredentials userCredentials) { + return new AuthenticatedRestTemplate(getRestTemplate(), userCredentials); + } public abstract RestTemplate getRestTemplate(); diff --git a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AuthenticatedRestTemplate.java b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AuthenticatedRestTemplate.java index 991c18e..fb2eed0 100644 --- a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AuthenticatedRestTemplate.java +++ b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/AuthenticatedRestTemplate.java @@ -1,21 +1,25 @@ package net.chrisrichardson.eventstorestore.javaexamples.testutil; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.UserCredentials; import org.springframework.http.HttpMethod; import org.springframework.web.client.RestTemplate; public class AuthenticatedRestTemplate { private RestTemplate restTemplate; + private UserCredentials userCredentials; - public AuthenticatedRestTemplate(RestTemplate restTemplate) { + public AuthenticatedRestTemplate(RestTemplate restTemplate, UserCredentials userCredentials) { this.restTemplate = restTemplate; + this.userCredentials = userCredentials; } public T getForEntity(String url, Class clazz) { return BasicAuthUtils.doBasicAuthenticatedRequest(restTemplate, url, HttpMethod.GET, - clazz); + clazz, + userCredentials); } public T postForEntity(String url, Object requestObject, Class clazz) { @@ -23,7 +27,17 @@ public class AuthenticatedRestTemplate { url, HttpMethod.POST, clazz, - requestObject + requestObject, + userCredentials + ); + } + + public T deleteEntity(String url, Class clazz) { + return BasicAuthUtils.doBasicAuthenticatedRequest(restTemplate, + url, + HttpMethod.DELETE, + clazz, + userCredentials ); } } diff --git a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/BasicAuthUtils.java b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/BasicAuthUtils.java index da496a9..4826556 100644 --- a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/BasicAuthUtils.java +++ b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/BasicAuthUtils.java @@ -1,5 +1,6 @@ package net.chrisrichardson.eventstorestore.javaexamples.testutil; +import net.chrisrichardson.eventstore.javaexamples.banking.common.customers.UserCredentials; import org.apache.tomcat.util.codec.binary.Base64; import org.springframework.http.*; import org.springframework.util.Assert; @@ -12,10 +13,10 @@ import java.nio.charset.Charset; */ public class BasicAuthUtils { - public static HttpHeaders basicAuthHeaders(String username) { + public static HttpHeaders basicAuthHeaders(UserCredentials userCredentials) { return new HttpHeaders() { { - String auth = username + ":"; + String auth = userCredentials.getEmail() + ":" + userCredentials.getPassword(); byte[] encodedAuth = Base64.encodeBase64( auth.getBytes(Charset.forName("US-ASCII"))); String authHeader = "Basic " + new String(encodedAuth); @@ -24,16 +25,16 @@ public class BasicAuthUtils { }; } - public static T doBasicAuthenticatedRequest(RestTemplate restTemplate, String url, HttpMethod httpMethod, Class responseType) { - return doBasicAuthenticatedRequest(restTemplate, url, httpMethod, responseType, null); + public static T doBasicAuthenticatedRequest(RestTemplate restTemplate, String url, HttpMethod httpMethod, Class responseType, UserCredentials userCredentials) { + return doBasicAuthenticatedRequest(restTemplate, url, httpMethod, responseType, null, userCredentials); } - public static T doBasicAuthenticatedRequest(RestTemplate restTemplate, String url, HttpMethod httpMethod, Class responseType, Object requestObject) { + public static T doBasicAuthenticatedRequest(RestTemplate restTemplate, String url, HttpMethod httpMethod, Class responseType, Object requestObject, UserCredentials userCredentials) { HttpEntity httpEntity; if (requestObject != null) { - httpEntity = new HttpEntity<>(requestObject, BasicAuthUtils.basicAuthHeaders("test_user@mail.com")); + httpEntity = new HttpEntity<>(requestObject, BasicAuthUtils.basicAuthHeaders(userCredentials)); } else { - httpEntity = new HttpEntity(BasicAuthUtils.basicAuthHeaders("test_user@mail.com")); + httpEntity = new HttpEntity(BasicAuthUtils.basicAuthHeaders(userCredentials)); } ResponseEntity responseEntity = restTemplate.exchange(url, diff --git a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/CustomersTestUtils.java b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/CustomersTestUtils.java index a9e6e6e..0826985 100644 --- a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/CustomersTestUtils.java +++ b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/CustomersTestUtils.java @@ -8,9 +8,6 @@ import java.util.concurrent.CompletableFuture; import static net.chrisrichardson.eventstorestore.javaexamples.testutil.TestUtil.eventually; -/** - * Created by popikyardo on 02.03.16. - */ public class CustomersTestUtils { private RestTemplate restTemplate; @@ -22,39 +19,31 @@ public class CustomersTestUtils { } public void assertCustomerResponse(final String customerId, final CustomerInfo customerInfo) { - AuthenticatedRestTemplate art = new AuthenticatedRestTemplate(restTemplate); + AuthenticatedRestTemplate art = new AuthenticatedRestTemplate(restTemplate, customerInfo.getUserCredentials()); eventually( - new Producer() { - @Override - public CompletableFuture produce() { - return CompletableFuture.completedFuture(art.getForEntity(customersBaseUrl + customerId, QuerySideCustomer.class)); - } - }, - new Verifier() { - @Override - public void verify(QuerySideCustomer querySideCustomer) { - Assert.assertEquals(customerId, querySideCustomer.getId()); - assertQuerySideCustomerEqualscCustomerInfo(querySideCustomer, customerInfo); - } + () -> CompletableFuture.completedFuture(art.getForEntity(customersBaseUrl + customerId, QuerySideCustomer.class)), + querySideCustomer -> { + Assert.assertEquals(customerId, querySideCustomer.getId()); + assertQuerySideCustomerEqualscCustomerInfo(querySideCustomer, customerInfo); }); } public void assertQuerySideCustomerEqualscCustomerInfo(QuerySideCustomer querySideCustomer, CustomerInfo customerInfo) { Assert.assertEquals(querySideCustomer.getName(), customerInfo.getName()); - Assert.assertEquals(querySideCustomer.getEmail(), customerInfo.getEmail()); + Assert.assertEquals(querySideCustomer.getEmail(), customerInfo.getUserCredentials().getEmail()); Assert.assertEquals(querySideCustomer.getPhoneNumber(), customerInfo.getPhoneNumber()); Assert.assertEquals(querySideCustomer.getSsn(), customerInfo.getSsn()); Assert.assertEquals(querySideCustomer.getAddress(), customerInfo.getAddress()); } public static CustomerInfo generateCustomerInfo() { - return generateCustomerInfo("current@email.com"); + return generateCustomerInfo(uniqueEmail()); } public static CustomerInfo generateCustomerInfo(String email) { return new CustomerInfo( new Name("John", "Doe"), - email, + new UserCredentials(email, "simple_password"), "000-00-0000", "1-111-111-1111", new Address("street 1", @@ -68,4 +57,8 @@ public class CustomersTestUtils { public static ToAccountInfo generateToAccountInfo() { return new ToAccountInfo("11111111-11111111", "New Account", "John Doe", ""); } + + private static String uniqueEmail() { + return System.currentTimeMillis() + "@email.com"; + } } diff --git a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/TestUtil.java b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/TestUtil.java index 2c84554..c35a2c4 100644 --- a/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/TestUtil.java +++ b/java-spring/testutil/src/main/java/net/chrisrichardson/eventstorestore/javaexamples/testutil/TestUtil.java @@ -56,7 +56,7 @@ public class TestUtil { public static void eventually(Producer producer, Verifier predicate) { Throwable laste = null; - for (int i = 0; i < 30 ; i++) { + for (int i = 0; i < 50 ; i++) { try { T x = producer.produce().get(30, TimeUnit.SECONDS); predicate.verify(x); diff --git a/js-frontend/build/app.fcbedf54f0345474ccc1.js b/js-frontend/build/app.497ed0e9fa8411cbbf1d.js similarity index 91% rename from js-frontend/build/app.fcbedf54f0345474ccc1.js rename to js-frontend/build/app.497ed0e9fa8411cbbf1d.js index 384737e..1efb565 100644 --- a/js-frontend/build/app.fcbedf54f0345474ccc1.js +++ b/js-frontend/build/app.497ed0e9fa8411cbbf1d.js @@ -22,20 +22,21 @@ webpackJsonp([0,3],{ /** * Fire-up React Router. */ - var reactRoot = window.document.getElementById("root"); /** - * Created by andrew on 12/02/16. - */ - (0, _app.initialize)().then(function (_ref) { var provider = _ref.provider; + var reactRoot = window.document.getElementById("root"); _reactDom2.default.render(provider, reactRoot); }); /** * Detect whether the server-side render has been discarded due to an invalid checksum. */ + /** + * Created by andrew on 12/02/16. + */ if (process.env.NODE_ENV !== "production") { + var reactRoot = window.document.getElementById("root"); if (!reactRoot.firstChild || !reactRoot.firstChild.attributes || !reactRoot.firstChild.attributes["data-react-checksum"]) { console.error("Server-side React render was discarded. Make sure that your initial render does not contain any client-side code."); } @@ -91,25 +92,27 @@ webpackJsonp([0,3],{ var _configure = __webpack_require__(314); - var _AuthComponent = __webpack_require__(333); + var _navigate = __webpack_require__(330); - var _Container = __webpack_require__(335); + var _AuthComponent = __webpack_require__(331); + + var _Container = __webpack_require__(333); var _Container2 = _interopRequireDefault(_Container); - var _MyAccounts = __webpack_require__(584); + var _MyAccounts = __webpack_require__(582); var _MyAccounts2 = _interopRequireDefault(_MyAccounts); - var _Account = __webpack_require__(603); + var _Account = __webpack_require__(601); var _Account2 = _interopRequireDefault(_Account); - var _SignIn = __webpack_require__(607); + var _SignIn = __webpack_require__(605); var _SignIn2 = _interopRequireDefault(_SignIn); - var _SignUp = __webpack_require__(610); + var _SignUp = __webpack_require__(608); var _SignUp2 = _interopRequireDefault(_SignUp); @@ -160,12 +163,20 @@ webpackJsonp([0,3],{ router: _reduxRouter.routerStateReducer }); + var dispatch = null; + + var onEnter = function onEnter(nextState) { + var location = nextState.location; + + dispatch && dispatch((0, _navigate.visitLocation)(location)); + }; + var routes = _react2.default.createElement( _reactRouter.Route, { path: "/", component: App }, _react2.default.createElement(_reactRouter.IndexRoute, { component: (0, _AuthComponent.requireAuthentication)(_MyAccounts2.default) }), - _react2.default.createElement(_reactRouter.Route, { path: "signin", component: _SignIn2.default }), - _react2.default.createElement(_reactRouter.Route, { path: "register", component: _SignUp2.default }), + _react2.default.createElement(_reactRouter.Route, { path: "signin", component: _SignIn2.default, onEnter: onEnter }), + _react2.default.createElement(_reactRouter.Route, { path: "register", component: _SignUp2.default, onEnter: onEnter }), _react2.default.createElement(_reactRouter.Route, { path: "account/:accountId", component: (0, _AuthComponent.requireAuthentication)(_Account2.default) }) ); @@ -179,6 +190,8 @@ webpackJsonp([0,3],{ createHistory: createHistoryMethod }))(_redux.createStore)(reducer); + dispatch = store.dispatch; + /** * The React Router 1.0 routes for both the server and the client. */ @@ -201,13 +214,11 @@ webpackJsonp([0,3],{ }, handleLoginResponse: function handleLoginResponse(resp) { debugger; - return resp.data; }, handleAccountUpdateResponse: function handleAccountUpdateResponse(resp) { debugger; - return resp.data; }, @@ -498,47 +509,6 @@ webpackJsonp([0,3],{ var c = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; return _extends({}, c); }); - // - // const configInitialState = { - // loading: true, - // errors: null, - // config: null - // }; - // - // export const configReducer = (state = {...configInitialState}, action) => { - // switch(action.type) { - // case T.AUTH.CONFIGURE_START: - // { - // return { - // ...state, - // loading: true - // }; - // } - // - // case T.AUTH.CONFIGURE_COMPLETE: { - // const { config } = action; - // return { - // ...state, - // loading: false, - // errors: null, - // config - // }; - // } - // - // case T.AUTH.CONFIGURE_ERROR: - // { - // const { errors } = action; - // return { - // ...state, - // loading: false, - // errors - // }; - // } - // - // default: - // return state; - // } - // }; /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "configure.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } @@ -558,6 +528,10 @@ webpackJsonp([0,3],{ var _defineActionTypes = __webpack_require__(296); exports.default = (0, _defineActionTypes.defineActionType)({ + + LOCATION: { + ENTER: _defineActionTypes.TODO_DEFINE + }, /* * View model */ @@ -963,7 +937,30 @@ webpackJsonp([0,3],{ /** * Created by andrew on 25/02/16. */ - var signInReducer = exports.signInReducer = (0, _createFormReducer2.default)([_ACTION_TYPES2.default.AUTH.SIGN_IN_START, _ACTION_TYPES2.default.AUTH.SIGN_IN_COMPLETE, _ACTION_TYPES2.default.AUTH.SIGN_IN_ERROR, _ACTION_TYPES2.default.AUTH.SIGN_IN_FORM_UPDATE]); + var internalSignInReducer = (0, _createFormReducer2.default)([_ACTION_TYPES2.default.AUTH.SIGN_IN_START, _ACTION_TYPES2.default.AUTH.SIGN_IN_COMPLETE, _ACTION_TYPES2.default.AUTH.SIGN_IN_ERROR, _ACTION_TYPES2.default.AUTH.SIGN_IN_FORM_UPDATE]); + + var signInReducer = exports.signInReducer = function signInReducer(state, action) { + switch (action.type) { + case _ACTION_TYPES2.default.LOCATION.ENTER: + { + var location = action.location; + var pathname = location.pathname; + + if (pathname == '/signin') { + return internalSignInReducer(state, { + type: _ACTION_TYPES2.default.AUTH.SIGN_IN_ERROR, + error: null + }); + } + return state; + } + + default: + { + return internalSignInReducer(state, action); + } + } + }; /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "signin.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } @@ -1064,7 +1061,7 @@ webpackJsonp([0,3],{ Object.defineProperty(exports, "__esModule", { value: true }); - exports.signUpReducer = undefined; + exports.signUpReducer = exports.internalSignUpReducer = undefined; var _ACTION_TYPES = __webpack_require__(295); @@ -1079,7 +1076,30 @@ webpackJsonp([0,3],{ /** * Created by andrew on 25/02/16. */ - var signUpReducer = exports.signUpReducer = (0, _createFormReducer2.default)([_ACTION_TYPES2.default.AUTH.SIGN_UP_START, _ACTION_TYPES2.default.AUTH.SIGN_UP_COMPLETE, _ACTION_TYPES2.default.AUTH.SIGN_UP_ERROR, _ACTION_TYPES2.default.AUTH.SIGN_UP_FORM_UPDATE]); + var internalSignUpReducer = exports.internalSignUpReducer = (0, _createFormReducer2.default)([_ACTION_TYPES2.default.AUTH.SIGN_UP_START, _ACTION_TYPES2.default.AUTH.SIGN_UP_COMPLETE, _ACTION_TYPES2.default.AUTH.SIGN_UP_ERROR, _ACTION_TYPES2.default.AUTH.SIGN_UP_FORM_UPDATE]); + + var signUpReducer = exports.signUpReducer = function signUpReducer(state, action) { + switch (action.type) { + case _ACTION_TYPES2.default.LOCATION.ENTER: + { + var location = action.location; + var pathname = location.pathname; + + if (pathname == '/register') { + return internalSignUpReducer(state, { + type: _ACTION_TYPES2.default.AUTH.SIGN_UP_ERROR, + error: null + }); + } + return state; + } + + default: + { + return internalSignUpReducer(state, action); + } + } + }; /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "signup.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } @@ -1442,18 +1462,22 @@ webpackJsonp([0,3],{ return _extends({}, state, hashMap); } + case _ACTION_TYPES2.default.ACCOUNT.SINGLE_START: case _ACTION_TYPES2.default.ACCOUNT.SINGLE_COMPLETE: + case _ACTION_TYPES2.default.ACCOUNT.SINGLE_ERROR: { + var _id2 = action.id; var _action$payload = action.payload; var _payload = _action$payload === undefined ? {} : _action$payload; - var accountId = _payload.accountId; + var error = action.error; + // const { accountId } = payload; - if (!accountId) { - return state; - } - return _extends({}, state, _defineProperty({}, accountId, _payload)); + var isError = action.type == _ACTION_TYPES2.default.ACCOUNT.SINGLE_ERROR; + var isStart = action.type == _ACTION_TYPES2.default.ACCOUNT.SINGLE_START; + + return _extends({}, state, _defineProperty({}, _id2, isStart ? { isLoading: true, 'title': 'Loading' } : isError ? error : _payload)); } case _ACTION_TYPES2.default.ENTITIES.RECEIVED_LIST: default: @@ -1821,55 +1845,26 @@ webpackJsonp([0,3],{ Object.defineProperty(exports, "__esModule", { value: true }); - exports.STORE_CURRENT_ENDPOINT_KEY = exports.SET_ENDPOINT_KEYS = undefined; + exports.SET_ENDPOINT_KEYS = undefined; exports.setEndpointKeys = setEndpointKeys; - exports.storeCurrentEndpointKey = storeCurrentEndpointKey; exports.configure = configure; - var _constants = __webpack_require__(315); + var _authenticate = __webpack_require__(315); - var C = _interopRequireWildcard(_constants); - - var _authenticate = __webpack_require__(316); - - var _sessionStorage = __webpack_require__(318); - - var _clientSettings = __webpack_require__(327); - - var _parseUrl = __webpack_require__(329); - - var _parseUrl2 = _interopRequireDefault(_parseUrl); - - var _reduxRouter = __webpack_require__(246); - - var _root = __webpack_require__(320); - - var _root2 = _interopRequireDefault(_root); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - - var SET_ENDPOINT_KEYS = exports.SET_ENDPOINT_KEYS = "SET_ENDPOINT_KEYS"; - - //import { - // showFirstTimeLoginSuccessModal, - // showFirstTimeLoginErrorModal, - // showPasswordResetSuccessModal, - // showPasswordResetErrorModal - //} from "./ui"; + var _clientSettings = __webpack_require__(328); /** * Created by andrew on 26/02/16. */ - var STORE_CURRENT_ENDPOINT_KEY = exports.STORE_CURRENT_ENDPOINT_KEY = "STORE_CURRENT_ENDPOINT_KEY"; + var SET_ENDPOINT_KEYS = exports.SET_ENDPOINT_KEYS = "SET_ENDPOINT_KEYS"; function setEndpointKeys(endpoints, currentEndpointKey, defaultEndpointKey) { - return { type: SET_ENDPOINT_KEYS, endpoints: endpoints, currentEndpointKey: currentEndpointKey, defaultEndpointKey: defaultEndpointKey }; - } - - function storeCurrentEndpointKey(currentEndpointKey) { - return { type: STORE_CURRENT_ENDPOINT_KEY, currentEndpointKey: currentEndpointKey }; + return { + type: SET_ENDPOINT_KEYS, + endpoints: endpoints, + currentEndpointKey: currentEndpointKey, + defaultEndpointKey: defaultEndpointKey + }; } function configure() { @@ -1894,29 +1889,6 @@ webpackJsonp([0,3],{ /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - /** - * Created by andrew on 26/02/16. - */ - var INITIAL_CONFIG_KEY = exports.INITIAL_CONFIG_KEY = "default"; - var DEFAULT_CONFIG_KEY = exports.DEFAULT_CONFIG_KEY = "defaultConfigKey"; - var SAVED_CONFIG_KEY = exports.SAVED_CONFIG_KEY = "currentConfigName"; - var SAVED_CREDS_KEY = exports.SAVED_CREDS_KEY = "authHeaders"; - var SAVED_USER_INFO = exports.SAVED_USER_INFO = "user-info"; - - /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "constants.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } - -/***/ }, - -/***/ 316: -/***/ function(module, exports, __webpack_require__) { - - /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { - 'use strict'; Object.defineProperty(exports, "__esModule", { @@ -1929,15 +1901,15 @@ webpackJsonp([0,3],{ var _ACTION_TYPES2 = _interopRequireDefault(_ACTION_TYPES); - var _actions = __webpack_require__(317); + var _actions = __webpack_require__(316); - var _sessionStorage = __webpack_require__(318); + var _sessionStorage = __webpack_require__(317); var U = _interopRequireWildcard(_sessionStorage); var _api = __webpack_require__(321); - var _entities = __webpack_require__(326); + var _entities = __webpack_require__(327); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -2000,7 +1972,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 317: +/***/ 316: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -2024,11 +1996,10 @@ webpackJsonp([0,3],{ args[_key2] = arguments[_key2]; } - var action = { type: type }; - argNames.forEach(function (arg, index) { - action[argNames[index]] = args[index]; - }); - return action; + return argNames.reduce(function (action, arg, index) { + action[arg] = args[index]; + return action; + }, { type: type }); }; } @@ -2036,7 +2007,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 318: +/***/ 317: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -2048,36 +2019,24 @@ webpackJsonp([0,3],{ }); exports.retrieveUserData = exports.persistUserData = undefined; exports.setCurrentSettings = setCurrentSettings; - exports.getCurrentSettings = getCurrentSettings; exports.setCurrentEndpoint = setCurrentEndpoint; - exports.getCurrentEndpoint = getCurrentEndpoint; exports.setCurrentEndpointKey = setCurrentEndpointKey; - exports.getCurrentEndpointKey = getCurrentEndpointKey; exports.setDefaultEndpointKey = setDefaultEndpointKey; exports.getDefaultEndpointKey = getDefaultEndpointKey; exports.resetConfig = resetConfig; exports.destroySession = destroySession; exports.getInitialEndpointKey = getInitialEndpointKey; exports.isApiRequest = isApiRequest; - exports.getSessionEndpointKey = getSessionEndpointKey; - exports.getSessionEndpoint = getSessionEndpoint; - exports.getEmailSignInUrl = getEmailSignInUrl; - exports.getEmailSignUpUrl = getEmailSignUpUrl; - exports.getCurrentUserUrl = getCurrentUserUrl; - exports.getAccountsUrl = getAccountsUrl; - exports.getCustomersUrl = getCustomersUrl; - exports.getTransfersUrl = getTransfersUrl; - exports.getApiUrl = getApiUrl; exports.getTokenFormat = getTokenFormat; exports.retrieveHeaders = retrieveHeaders; exports.persistData = persistData; exports.retrieveData = retrieveData; - var _jsCookie = __webpack_require__(319); + var _jsCookie = __webpack_require__(318); var _jsCookie2 = _interopRequireDefault(_jsCookie); - var _constants = __webpack_require__(315); + var _constants = __webpack_require__(319); var C = _interopRequireWildcard(_constants); @@ -2112,18 +2071,10 @@ webpackJsonp([0,3],{ authState.currentSettings = s; } - function getCurrentSettings() { - return authState.currentSettings; - } - function setCurrentEndpoint(e) { authState.currentEndpoint = e; } - function getCurrentEndpoint() { - return authState.currentEndpoint; - } - /** * @deprecated * @param k @@ -2132,10 +2083,6 @@ webpackJsonp([0,3],{ persistData(C.SAVED_CONFIG_KEY, k || getDefaultEndpointKey()); } - function getCurrentEndpointKey() { - return getDefaultEndpointKey(); - } - /** * @deprecated * @param k @@ -2185,53 +2132,6 @@ webpackJsonp([0,3],{ return true; } - function getSessionEndpointKey() { - return getCurrentEndpointKey(); - } - - function getSessionEndpoint(k) { - return getCurrentEndpoint()[getSessionEndpointKey()]; - } - - //// only should work for current session - //export function getSignOutUrl (endpointKey) { - // return `${getApiUrl(endpointKey)}${getSessionEndpoint(endpointKey).signOutPath}` - //} - - function getEmailSignInUrl() { - return '' + getSessionEndpoint().emailSignInPath; - } - - function getEmailSignUpUrl() { - return getCustomersUrl(); - } - - function getCurrentUserUrl() { - return '' + getSessionEndpoint().currentUserPath; - } - - function getAccountsUrl() { - return '' + getSessionEndpoint().accountsPath; - } - - function getCustomersUrl() { - return '' + getSessionEndpoint().customersPath; - } - - function getTransfersUrl() { - return '' + getSessionEndpoint().transfersPath; - } - - /** - * @deprecated - * @param key - * @returns {string|string} - */ - function getApiUrl(key) { - var configKey = getSessionEndpointKey(key); - return rauthState.currentEndpoint[configKey].apiUrl; - } - function getTokenFormat() { return authState.currentSettings.tokenFormat; } @@ -2294,6 +2194,29 @@ webpackJsonp([0,3],{ /***/ }, +/***/ 319: +/***/ function(module, exports, __webpack_require__) { + + /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + /** + * Created by andrew on 26/02/16. + */ + var INITIAL_CONFIG_KEY = exports.INITIAL_CONFIG_KEY = "default"; + var DEFAULT_CONFIG_KEY = exports.DEFAULT_CONFIG_KEY = "defaultConfigKey"; + var SAVED_CONFIG_KEY = exports.SAVED_CONFIG_KEY = "currentConfigName"; + var SAVED_CREDS_KEY = exports.SAVED_CREDS_KEY = "authHeaders"; + var SAVED_USER_INFO = exports.SAVED_USER_INFO = "user-info"; + + /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "constants.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } + +/***/ }, + /***/ 320: /***/ function(module, exports, __webpack_require__) { @@ -2325,204 +2248,134 @@ webpackJsonp([0,3],{ Object.defineProperty(exports, "__esModule", { value: true }); - exports.apiSignIn = apiSignIn; - exports.apiSignUp = apiSignUp; - exports.apiGetCurrentUser = apiGetCurrentUser; - exports.apiCreateAccount = apiCreateAccount; - exports.apiCreateRefAccount = apiCreateRefAccount; - exports.apiMakeTransfer = apiMakeTransfer; - exports.apiRetrieveAccounts = apiRetrieveAccounts; - exports.apiRetrieveTransfers = apiRetrieveTransfers; - exports.apiRetrieveAccount = apiRetrieveAccount; - exports.apiDeleteAccount = apiDeleteAccount; - exports.apiRetrieveUsers = apiRetrieveUsers; - exports.apiRetrieveUser = apiRetrieveUser; + exports.apiRetrieveUsers = exports.apiDeleteRefAccount = exports.apiDeleteAccount = exports.apiRetrieveAccount = exports.apiRetrieveTransfers = exports.apiRetrieveAccounts = exports.apiMakeTransfer = exports.apiCreateRefAccount = exports.apiCreateAccount = exports.apiGetCurrentUser = exports.apiSignUp = exports.apiSignIn = undefined; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** + * Created by andrew on 12/03/16. + */ + var _fetch = __webpack_require__(322); var _fetch2 = _interopRequireDefault(_fetch); - var _sessionStorage = __webpack_require__(318); + var _apiEndpoints = __webpack_require__(325); + + var ENDPOINTS = _interopRequireWildcard(_apiEndpoints); var _root = __webpack_require__(320); var _root2 = _interopRequireDefault(_root); - var _handleFetchResponse = __webpack_require__(325); + var _handleFetchResponse = __webpack_require__(326); + + function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - /** - * Created by andrew on 12/03/16. - */ - function makeQuery(params) { - return Object.keys(params).map(function (key) { - return [encodeURIComponent(key), encodeURIComponent(params[key])].join('='); - }).join('&'); - } + var JSON_HEADERS = { + headers: { + "Accept": "application/json", + "Content-Type": "application/json" + } + }; - function apiSignIn(body) { - return (0, _fetch2.default)((0, _sessionStorage.getEmailSignInUrl)(), { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "post", - body: _root2.default.JSON.stringify(body) - }).then(_handleFetchResponse.parseResponse); - } - - function apiSignUp(body) { - return (0, _fetch2.default)((0, _sessionStorage.getEmailSignUpUrl)(), { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "post", - body: _root2.default.JSON.stringify(body) - }).then(_handleFetchResponse.parseResponse); - } - - function apiGetCurrentUser() { - return (0, _fetch2.default)((0, _sessionStorage.getCurrentUserUrl)(), { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, + var METHODS = { + DELETE: _extends({}, JSON_HEADERS, { + method: "delete" + }), + GET: _extends({}, JSON_HEADERS, { method: "get" - }).then(_handleFetchResponse.parseResponse); - } + }), + POST: _extends({}, JSON_HEADERS, { + method: "post" + }) + }; - function apiCreateAccount(customerId, _ref) { + var fetch = function fetch() { + return _fetch2.default.apply(undefined, arguments).then(_handleFetchResponse.parseResponse); + }; + + var apiSignIn = exports.apiSignIn = function apiSignIn(body) { + return fetch(ENDPOINTS.emailSignIn(), _extends({}, METHODS.POST, { + body: _root2.default.JSON.stringify(body) + })); + }; + + var apiSignUp = exports.apiSignUp = function apiSignUp(body) { + return fetch(ENDPOINTS.emailSignUp(), _extends({}, METHODS.POST, { + body: _root2.default.JSON.stringify(body) + })); + }; + + var apiGetCurrentUser = exports.apiGetCurrentUser = function apiGetCurrentUser() { + return fetch(ENDPOINTS.currentUser(), _extends({}, METHODS.GET)); + }; + + var apiCreateAccount = exports.apiCreateAccount = function apiCreateAccount(customerId, _ref) { var title = _ref.title; var initialBalance = _ref.balance; var description = _ref.description; - - //{ - //"accountId": "0000015377cf131b-a250093f26850000" - //} - - return (0, _fetch2.default)((0, _sessionStorage.getAccountsUrl)(), { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "post", + return fetch(ENDPOINTS.accountsPath(), _extends({}, METHODS.POST, { body: _root2.default.JSON.stringify({ customerId: customerId, title: title, initialBalance: initialBalance, description: description }) - }).then(_handleFetchResponse.parseResponse); - } + })); + }; - function apiCreateRefAccount(customerId, _ref2) { + var apiCreateRefAccount = exports.apiCreateRefAccount = function apiCreateRefAccount(customerId, _ref2) { var owner = _ref2.owner; var accountId = _ref2.account; var title = _ref2.title; var description = _ref2.description; - - - return (0, _fetch2.default)((0, _sessionStorage.getCustomersUrl)() + '/' + customerId + '/toaccounts', { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "post", + return fetch(ENDPOINTS.refAccounts(customerId), _extends({}, METHODS.POST, { body: _root2.default.JSON.stringify({ owner: owner, id: accountId, title: title, description: description }) - }).then(_handleFetchResponse.parseResponse); - } + })); + }; - function apiMakeTransfer(fromAccountId, _ref3) { + var apiMakeTransfer = exports.apiMakeTransfer = function apiMakeTransfer(fromAccountId, _ref3) { var account = _ref3.account; var amount = _ref3.amount; var description = _ref3.description; - - - return (0, _fetch2.default)((0, _sessionStorage.getTransfersUrl)(), { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "post", + return fetch(ENDPOINTS.transfers(), _extends({}, METHODS.POST, { body: _root2.default.JSON.stringify({ - "amount": amount, - "fromAccountId": fromAccountId, + amount: amount, + fromAccountId: fromAccountId, "toAccountId": account, description: description }) - }).then(_handleFetchResponse.parseResponse); - } + })); + }; - function apiRetrieveAccounts(customerId) { + var apiRetrieveAccounts = exports.apiRetrieveAccounts = function apiRetrieveAccounts(customerId) { + return fetch(ENDPOINTS.customersAccounts(customerId), _extends({}, METHODS.GET)); + }; - return (0, _fetch2.default)((0, _sessionStorage.getCustomersUrl)() + '/' + customerId + '/accounts', { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "get" - }).then(_handleFetchResponse.parseResponse); - } + var apiRetrieveTransfers = exports.apiRetrieveTransfers = function apiRetrieveTransfers(accountId) { + return fetch(ENDPOINTS.history(accountId), _extends({}, METHODS.GET)); + }; - function apiRetrieveTransfers(accountId) { + var apiRetrieveAccount = exports.apiRetrieveAccount = function apiRetrieveAccount(accountId) { + return fetch(ENDPOINTS.account(accountId), _extends({}, METHODS.GET)); + }; - return (0, _fetch2.default)((0, _sessionStorage.getAccountsUrl)() + '/' + accountId + '/history', { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "get" - }).then(_handleFetchResponse.parseResponse); - } + var apiDeleteAccount = exports.apiDeleteAccount = function apiDeleteAccount(customerId, accountId) { + return fetch(ENDPOINTS.account(accountId), _extends({}, METHODS.DELETE)); + }; - function apiRetrieveAccount(accountId) { - return (0, _fetch2.default)((0, _sessionStorage.getAccountsUrl)() + '/' + accountId, { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "get" - }).then(_handleFetchResponse.parseResponse); - } + var apiDeleteRefAccount = exports.apiDeleteRefAccount = function apiDeleteRefAccount(customerId, accountId) { + return fetch(ENDPOINTS.refAccount(customerId, accountId), _extends({}, METHODS.DELETE)); + }; - function apiDeleteAccount(accountId) { - return Promise.reject({ - message: '\'Delete Account\' is not implemented.' - }); - - return (0, _fetch2.default)((0, _sessionStorage.getAccountsUrl)() + '/' + accountId, { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "delete" - }).then(_handleFetchResponse.parseResponse); - } - - function apiRetrieveUsers(email) { - return (0, _fetch2.default)((0, _sessionStorage.getCustomersUrl)() + '?' + makeQuery({ email: email }), { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "get" - }).then(_handleFetchResponse.parseResponse); - } - - function apiRetrieveUser(customerId) { - return (0, _fetch2.default)((0, _sessionStorage.getCustomersUrl)() + '/' + customerId, { - headers: { - "Accept": "application/json", - "Content-Type": "application/json" - }, - method: "get" - }).then(_handleFetchResponse.parseResponse); - } + var apiRetrieveUsers = exports.apiRetrieveUsers = function apiRetrieveUsers(email) { + return fetch(ENDPOINTS.customersLookup({ email: email }), _extends({}, METHODS.GET)); + }; /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "api.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } @@ -2564,11 +2417,11 @@ webpackJsonp([0,3],{ var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch); - var _constants = __webpack_require__(315); + var _constants = __webpack_require__(319); var C = _interopRequireWildcard(_constants); - var _sessionStorage = __webpack_require__(318); + var _sessionStorage = __webpack_require__(317); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -2601,28 +2454,25 @@ webpackJsonp([0,3],{ function updateAuthCredentials(resp) { - // check config apiUrl matches the current response url - if ((0, _sessionStorage.isApiRequest)(resp.url)) { - // set header for each key in `tokenFormat` config - var newHeaders = {}; + // set header for each key in `tokenFormat` config + var newHeaders = {}; - // set flag to ensure that we don't accidentally nuke the headers - // if the response tokens aren't sent back from the API - var blankHeaders = true; + // set flag to ensure that we don't accidentally nuke the headers + // if the response tokens aren't sent back from the API + var blankHeaders = true; - // set header key + val for each key in `tokenFormat` config - for (var key in (0, _sessionStorage.getTokenFormat)()) { - newHeaders[key] = resp.headers.get(key); + // set header key + val for each key in `tokenFormat` config + for (var key in (0, _sessionStorage.getTokenFormat)()) { + newHeaders[key] = resp.headers.get(key); - if (newHeaders[key]) { - blankHeaders = false; - } + if (newHeaders[key]) { + blankHeaders = false; } + } - // persist headers for next request - if (!blankHeaders) { - (0, _sessionStorage.persistData)(C.SAVED_CREDS_KEY, newHeaders); - } + // persist headers for next request + if (!blankHeaders) { + (0, _sessionStorage.persistData)(C.SAVED_CREDS_KEY, newHeaders); } return resp; @@ -2639,6 +2489,65 @@ webpackJsonp([0,3],{ 'use strict'; + Object.defineProperty(exports, "__esModule", { + value: true + }); + /** + * Created by andrew on 9/16/16. + */ + var API_ROOT = '/api'; + + var emailSignIn = exports.emailSignIn = function emailSignIn() { + return API_ROOT + '/login'; + }; + var emailSignUp = exports.emailSignUp = function emailSignUp() { + return API_ROOT + '/customers'; + }; + var currentUser = exports.currentUser = function currentUser() { + return API_ROOT + '/user'; + }; + var accountsPath = exports.accountsPath = function accountsPath() { + return API_ROOT + '/accounts'; + }; + var customersLookup = exports.customersLookup = function customersLookup(lookup) { + return API_ROOT + '/customers?' + makeQuery(lookup); + }; + var customersAccounts = exports.customersAccounts = function customersAccounts(customerId) { + return API_ROOT + '/customers/' + customerId + '/accounts'; + }; + var refAccounts = exports.refAccounts = function refAccounts(customerId) { + return API_ROOT + '/customers/' + customerId + '/toaccounts'; + }; + var refAccount = exports.refAccount = function refAccount(customerId, accountId) { + return API_ROOT + '/customers/' + customerId + '/toaccounts/' + accountId; + }; + var account = exports.account = function account(accountId) { + return API_ROOT + '/accounts/' + accountId; + }; + var history = exports.history = function history(accountId) { + return API_ROOT + '/accounts/' + accountId + '/history'; + }; + var transfers = exports.transfers = function transfers() { + return API_ROOT + '/transfers'; + }; + + function makeQuery(params) { + return Object.keys(params).map(function (key) { + return [encodeURIComponent(key), encodeURIComponent(params[key])].join('='); + }).join('&'); + } + + /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "apiEndpoints.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } + +/***/ }, + +/***/ 326: +/***/ function(module, exports, __webpack_require__) { + + /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { + + 'use strict'; + Object.defineProperty(exports, "__esModule", { value: true }); @@ -2690,7 +2599,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 326: +/***/ 327: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -2719,13 +2628,13 @@ webpackJsonp([0,3],{ var _ACTION_TYPES2 = _interopRequireDefault(_ACTION_TYPES); - var _actions = __webpack_require__(317); + var _actions = __webpack_require__(316); var _api = __webpack_require__(321); var api = _interopRequireWildcard(_api); - var _authenticate = __webpack_require__(316); + var _authenticate = __webpack_require__(315); var _root = __webpack_require__(320); @@ -2754,15 +2663,18 @@ webpackJsonp([0,3],{ var accountRefCreateError = exports.accountRefCreateError = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNTS.CREATE_REF_ERROR, 'error'); var accountRefCreateFormUpdate = exports.accountRefCreateFormUpdate = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNTS.CREATE_REF_FORM_UPDATE, 'key', 'value'); - var accountRequested = exports.accountRequested = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.SINGLE_START); - var accountComplete = exports.accountComplete = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.SINGLE_COMPLETE, 'payload'); - var accountError = exports.accountError = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.SINGLE_ERROR, 'error'); + var accountRequested = exports.accountRequested = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.SINGLE_START, 'id'); + var accountComplete = exports.accountComplete = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.SINGLE_COMPLETE, 'id', 'payload'); + var accountError = exports.accountError = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.SINGLE_ERROR, 'id', 'error'); - function accountsList(userId) { + function accountsList(customerId) { return function (dispatch) { dispatch(accountsListRequested()); - return api.apiRetrieveAccounts(userId).then(function (list) { - dispatch(accountsListReceived(list)); + return api.apiRetrieveAccounts(customerId).then(function (_ref) { + var _ref$accounts = _ref.accounts; + var accounts = _ref$accounts === undefined ? [] : _ref$accounts; + + dispatch(accountsListReceived(accounts)); }).catch(function (err) { dispatch(accountsListError(err)); return Promise.resolve({ error: err }); @@ -2770,21 +2682,23 @@ webpackJsonp([0,3],{ }; } - function readUntilChanged(initialData, customerId) { + function readUntilChanged(initialData, promisedFn, leftCalls) { var _this = this; + if (!leftCalls) { + return Promise.reject('Data not changed'); + } var initialDataFlat = _root2.default['JSON'].stringify(initialData); - debugger; return new Promise(function (rs, rj) { setTimeout(function () { - api.apiRetrieveAccounts(customerId).then(function (data) { + promisedFn().then(function (data) { debugger; if (initialDataFlat == _root2.default['JSON'].stringify(data)) { - return readUntilChanged.call(_this, data, customerId).then(rs, rj); // Promise + return readUntilChanged.call(_this, data, promisedFn, leftCalls - 1).then(rs, rj); // Promise } rs(data); }).catch(rj); - }, 500); + }, 500 * Math.pow(2, 4 - leftCalls)); }); } @@ -2802,7 +2716,10 @@ webpackJsonp([0,3],{ dispatch((0, _authenticate.authenticate)(true)); return accountId; } else { - return readUntilChanged(data, customerId).then(function () { + return readUntilChanged(data, function () { + return api.apiRetrieveAccounts(customerId); + }, 4).then(function () { + debugger; dispatch(accountCreateComplete({ id: '' })); @@ -2820,8 +2737,8 @@ webpackJsonp([0,3],{ function accountRefCreate(customerId, payload) { return function (dispatch) { dispatch(accountRefCreateStart()); - return api.apiCreateRefAccount(customerId, payload).then(function (_ref) { - var id = _ref.id; + return api.apiCreateRefAccount(customerId, payload).then(function (_ref2) { + var id = _ref2.id; dispatch(accountRefCreateComplete(_extends({}, payload, { id: id @@ -2847,11 +2764,11 @@ webpackJsonp([0,3],{ function fetchAccount(accountId) { return function (dispatch) { - dispatch(accountRequested()); + dispatch(accountRequested(accountId)); return api.apiRetrieveAccount(accountId).then(function (data) { - dispatch(accountComplete(data)); + dispatch(accountComplete(accountId, data)); }).catch(function (err) { - dispatch(accountError(err)); + dispatch(accountError(accountId, err)); }); }; } @@ -2860,15 +2777,17 @@ webpackJsonp([0,3],{ var deleteAccountComplete = exports.deleteAccountComplete = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.DELETE_COMPLETE); var deleteAccountError = exports.deleteAccountError = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.ACCOUNT.DELETE_ERROR); - function deleteAccount(customerId, accountId) { + function deleteAccount(customerId, accountId, isRef) { return function (dispatch) { dispatch(deleteAccountRequested()); - return api.apiDeleteAccount(accountId).then(function (data) { - //debugger; - dispatch(deleteAccountComplete()); - return Promise.resolve('ok'); + + var deleteApiAction = isRef ? api.apiDeleteRefAccount(customerId, accountId) : api.apiDeleteAccount(customerId, accountId); + + return deleteApiAction.then(function (data) { + dispatch(deleteAccountComplete(data)); + return Promise.resolve(data); }).catch(function (err) { - dispatch(deleteAccountError()); + dispatch(deleteAccountError(err)); return Promise.reject(err); }); }; @@ -2896,10 +2815,10 @@ webpackJsonp([0,3],{ return function (dispatch) { dispatch(createRefOwnerLookupStart(lookup)); return api.apiRetrieveUsers(lookup).then(function (data) { - var _ref2 = data || {}; + var _ref3 = data || {}; - var _ref2$customers = _ref2.customers; - var customers = _ref2$customers === undefined ? [] : _ref2$customers; + var _ref3$customers = _ref3.customers; + var customers = _ref3$customers === undefined ? [] : _ref3$customers; var arr = customers.map(function (c) { @@ -2927,13 +2846,13 @@ webpackJsonp([0,3],{ var createRefAccountLookup = exports.createRefAccountLookup = function createRefAccountLookup(customerId) { return function (dispatch) { - dispatch(createRefAccountLookupStart()); - return api.apiRetrieveAccounts(customerId).then(function (_ref3) { - var accounts = _ref3.accounts; + dispatch(createRefAccountLookupStart(customerId)); + return api.apiRetrieveAccounts(customerId).then(function (_ref4) { + var accounts = _ref4.accounts; - var arr = accounts.map(function (_ref4) { - var accountId = _ref4.accountId; - var title = _ref4.title; + var arr = accounts.map(function (_ref5) { + var accountId = _ref5.accountId; + var title = _ref5.title; return { value: accountId, label: title @@ -2976,7 +2895,7 @@ webpackJsonp([0,3],{ return function (dispatch) { dispatch(getTransfersRequested(accountId)); return api.apiRetrieveTransfers(accountId).then(function (data) { - dispatch(getTransfersComplete(accountId, data.transactionsHistory)); + dispatch(getTransfersComplete(accountId, data['transactionsHistory'])); return data; }).catch(function (err) { dispatch(getTransfersError(accountId, err)); @@ -2989,7 +2908,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 327: +/***/ 328: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -3006,70 +2925,31 @@ webpackJsonp([0,3],{ exports.applyConfig = applyConfig; - var _constants = __webpack_require__(315); + var _constants = __webpack_require__(319); var C = _interopRequireWildcard(_constants); - var _root = __webpack_require__(320); - - var _root2 = _interopRequireDefault(_root); - - var _fetch = __webpack_require__(322); - - var _fetch2 = _interopRequireDefault(_fetch); - - var _parseEndpointConfig2 = __webpack_require__(328); + var _parseEndpointConfig2 = __webpack_require__(329); var _parseEndpointConfig3 = _interopRequireDefault(_parseEndpointConfig2); var _configure = __webpack_require__(314); - var _sessionStorage = __webpack_require__(318); + var _sessionStorage = __webpack_require__(317); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var defaultSettings = { - //proxyIf: function() { return false; }, - //proxyUrl: "/proxy", forceHardRedirect: false, storage: "cookies", cookieExpiry: 14, cookiePath: "/", initialCredentials: null, - passwordResetSuccessUrl: function passwordResetSuccessUrl() { - return _root2.default.location.href; - }, - - confirmationSuccessUrl: function confirmationSuccessUrl() { - return _root2.default.location.href; - }, - tokenFormat: { "access-token": "{{ access-token }}" - //"token-type": "Bearer", - //client: "{{ client }}", - //expiry: "{{ expiry }}", - //uid: "{{ uid }}" - }, - - parseExpiry: function parseExpiry(headers) { - // convert from ruby time (seconds) to js time (millis) - return parseInt(headers["expiry"], 10) * 1000 || null; - }, - - handleLoginResponse: function handleLoginResponse(resp) { - return resp.data; - }, - - handleAccountUpdateResponse: function handleAccountUpdateResponse(resp) { - return resp.data; - }, - - handleTokenValidationResponse: function handleTokenValidationResponse(resp) { - return resp.data; } }; @@ -3136,7 +3016,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 328: +/***/ 329: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -3154,7 +3034,7 @@ webpackJsonp([0,3],{ exports.default = parseEndpointConfig; - var _constants = __webpack_require__(315); + var _constants = __webpack_require__(319); var C = _interopRequireWildcard(_constants); @@ -3224,171 +3104,36 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 329: +/***/ 330: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); + exports.visitLocation = undefined; - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** - * Created by andrew on 26/02/16. - */ + var _ACTION_TYPES = __webpack_require__(295); + var _ACTION_TYPES2 = _interopRequireDefault(_ACTION_TYPES); - exports.normalizeTokenKeys = normalizeTokenKeys; - exports.getAllParams = getAllParams; - exports.default = getRedirectInfo; - - var _querystring = __webpack_require__(330); - - var _querystring2 = _interopRequireDefault(_querystring); + var _actions = __webpack_require__(316); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function normalizeTokenKeys(params) { - // normalize keys - if (params.token) { - params["access-token"] = params.token; - delete params.token; - } - if (params.auth_token) { - params["access-token"] = params.auth_token; - delete params.auth_token; - } - if (params.client_id) { - params.client = params.client_id; - delete params.client_id; - } - if (params.config) { - params.endpointKey = params.config; - delete params.config; - } + /** + * Created by andrew on 26/02/16. + */ + var visitLocation = exports.visitLocation = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.LOCATION.ENTER, 'location'); - return params; - }; - - var getAnchorSearch = function getAnchorSearch(location) { - var rawAnchor = location.hash || "", - arr = rawAnchor.split("?"); - return arr.length > 1 ? arr[1] : null; - }; - - var getSearchQs = function getSearchQs(location) { - var rawQs = location.search || "", - qs = rawQs.replace("?", ""), - qsObj = qs ? _querystring2.default.parse(qs) : {}; - - return qsObj; - }; - - var getAnchorQs = function getAnchorQs(location) { - var anchorQs = getAnchorSearch(location), - anchorQsObj = anchorQs ? _querystring2.default.parse(anchorQs) : {}; - - return anchorQsObj; - }; - - var stripKeys = function stripKeys(obj, keys) { - for (var q in keys) { - delete obj[keys[q]]; - } - - return obj; - }; - - function getAllParams(location) { - return _extends({}, getAnchorQs(location), getSearchQs(location)); - }; - - var buildCredentials = function buildCredentials(location, keys) { - var params = getAllParams(location); - var authHeaders = {}; - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var key = _step.value; - - authHeaders[key] = params[key]; - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return normalizeTokenKeys(authHeaders); - }; - - // this method is tricky. we want to reconstruct the current URL with the - // following conditions: - // 1. search contains none of the supplied keys - // 2. anchor search (i.e. `#/?key=val`) contains none of the supplied keys - // 3. all of the keys NOT supplied are presevered in their original form - // 4. url protocol, host, and path are preserved - var getLocationWithoutParams = function getLocationWithoutParams(currentLocation, keys) { - // strip all values from both actual and anchor search params - var newSearch = _querystring2.default.stringify(stripKeys(getSearchQs(currentLocation), keys)), - newAnchorQs = _querystring2.default.stringify(stripKeys(getAnchorQs(currentLocation), keys)), - newAnchor = (currentLocation.hash || "").split("?")[0]; - - if (newSearch) { - newSearch = "?" + newSearch; - } - - if (newAnchorQs) { - newAnchor += "?" + newAnchorQs; - } - - if (newAnchor && !newAnchor.match(/^#/)) { - newAnchor = "#/" + newAnchor; - } - - // reconstruct location with stripped auth keys - var newLocation = currentLocation.pathname + newSearch + newAnchor; - - return newLocation; - }; - - function getRedirectInfo(currentLocation) { - if (!currentLocation) { - return {}; - } else { - var authKeys = ["access-token", "token", "auth_token", "config", "client", "client_id", "expiry", "uid", "reset_password", "account_confirmation_success"]; - - var authRedirectHeaders = buildCredentials(currentLocation, authKeys); - var authRedirectPath = getLocationWithoutParams(currentLocation, authKeys); - - if (authRedirectPath !== currentLocation) { - return { authRedirectHeaders: authRedirectHeaders, authRedirectPath: authRedirectPath }; - } else { - return {}; - } - } - } - - /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "parseUrl.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } + /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "navigate.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/***/ 333: +/***/ 331: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -3411,7 +3156,7 @@ webpackJsonp([0,3],{ var _reduxRouter = __webpack_require__(246); - var _readProp = __webpack_require__(334); + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); @@ -3495,7 +3240,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 334: +/***/ 332: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -3544,7 +3289,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 335: +/***/ 333: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -3554,6 +3299,7 @@ webpackJsonp([0,3],{ Object.defineProperty(exports, "__esModule", { value: true }); + exports.Container = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); @@ -3561,11 +3307,11 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); - var _reactRouterBootstrap = __webpack_require__(579); + var _reactRouterBootstrap = __webpack_require__(577); - var _HeaderLinks = __webpack_require__(582); + var _HeaderLinks = __webpack_require__(580); var _HeaderLinks2 = _interopRequireDefault(_HeaderLinks); @@ -3580,11 +3326,7 @@ webpackJsonp([0,3],{ */ - //import { SignOutButton } from "redux-auth/bootstrap-theme"; - - //const SignOutButton = () => (
SignOutButton!
); - - var Container = function (_React$Component) { + var Container = exports.Container = function (_React$Component) { _inherits(Container, _React$Component); function Container() { @@ -3677,14 +3419,6 @@ webpackJsonp([0,3],{ return Container; }(_react2.default.Component); - /* - Fork me on GitHub - */ - Container.propTypes = { children: _react.PropTypes.node @@ -3695,7 +3429,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 582: +/***/ 580: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -3715,19 +3449,17 @@ webpackJsonp([0,3],{ var _reactRedux = __webpack_require__(170); - var _reactRouterBootstrap = __webpack_require__(579); + var _reactRouterBootstrap = __webpack_require__(577); - var _readProp = __webpack_require__(334); - - var _readProp2 = _interopRequireDefault(_readProp); - - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _reactRouter = __webpack_require__(183); + var _readProp = __webpack_require__(332); - var _signOut2 = __webpack_require__(583); + var _readProp2 = _interopRequireDefault(_readProp); + + var _signOut2 = __webpack_require__(581); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -3742,9 +3474,6 @@ webpackJsonp([0,3],{ */ - //import { PageHeader, OverlayTrigger, Tooltip, Grid, Col, Row, Nav, NavItem, ButtonGroup, Button, Table } from "react-bootstrap"; - - var HeaderLinks = exports.HeaderLinks = function (_React$Component) { _inherits(HeaderLinks, _React$Component); @@ -3829,69 +3558,48 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 583: +/***/ 581: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - exports.signOutStart = signOutStart; - exports.signOutComplete = signOutComplete; - exports.signOut = signOut; - - var _sessionStorage = __webpack_require__(318); - - var _entities = __webpack_require__(326); - - var _configure = __webpack_require__(314); - - var _handleFetchResponse = __webpack_require__(325); - - var _fetch = __webpack_require__(322); - - var _fetch2 = _interopRequireDefault(_fetch); + exports.signOut = exports.signOutComplete = exports.signOutStart = undefined; var _ACTION_TYPES = __webpack_require__(295); var _ACTION_TYPES2 = _interopRequireDefault(_ACTION_TYPES); - var _root = __webpack_require__(320); + var _actions = __webpack_require__(316); - var _root2 = _interopRequireDefault(_root); + var _sessionStorage = __webpack_require__(317); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - /** - * Created by andrew on 11/03/16. - */ - function signOutStart() { - return { type: _ACTION_TYPES2.default.AUTH.SIGN_OUT_START }; - } + var signOutStart = exports.signOutStart = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_OUT_START); /** + * Created by andrew on 11/03/16. + */ + var signOutComplete = exports.signOutComplete = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_OUT_COMPLETE); - function signOutComplete() { - return { type: _ACTION_TYPES2.default.AUTH.SIGN_OUT_COMPLETE }; - } - - function signOut() { + var signOut = exports.signOut = function signOut() { return function (dispatch) { - dispatch(signOutStart()); (0, _sessionStorage.destroySession)(); dispatch(signOutComplete()); }; - } + }; /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "signOut.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/***/ 584: +/***/ 582: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -3910,39 +3618,37 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _reactRouter = __webpack_require__(183); - var _reactRedux = __webpack_require__(170); - var _reactSelect = __webpack_require__(585); - - var _reactSelect2 = _interopRequireDefault(_reactSelect); - - var _AccountInfo = __webpack_require__(591); + var _AccountInfo = __webpack_require__(583); var _AccountInfo2 = _interopRequireDefault(_AccountInfo); - var _modals = __webpack_require__(594); + var _modals = __webpack_require__(586); - var Modals = _interopRequireWildcard(_modals); + var M = _interopRequireWildcard(_modals); - var _IndexPanel = __webpack_require__(601); + var _IndexPanel = __webpack_require__(600); var _IndexPanel2 = _interopRequireDefault(_IndexPanel); - var _entities = __webpack_require__(326); + var _entities = __webpack_require__(327); var A = _interopRequireWildcard(_entities); - var _readProp = __webpack_require__(334); + var _authenticate = __webpack_require__(315); + + var AU = _interopRequireWildcard(_authenticate); + + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); - var _Money = __webpack_require__(602); + var _Money = __webpack_require__(599); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -3956,8 +3662,6 @@ webpackJsonp([0,3],{ * Created by andrew on 17/02/16. */ - //import * as DefaultTheme from "redux-auth"; - var resetModals = { showAccountModal: false, @@ -4030,13 +3734,14 @@ webpackJsonp([0,3],{ var _this3 = this; var customerId = this.props.auth.user.attributes.id; + var dispatch = this.props.dispatch; - this.props.dispatch(A.accountRefCreate(customerId, payload)).then(function () { + dispatch(A.accountRefCreate(customerId, payload)).then(function () { _this3.close(); return new Promise(function (rs, rj) { setTimeout(function () { - _this3.props.dispatch(A.fetchOwnAccounts(customerId)).then(rs, rj); + Promise.all([dispatch(AU.authenticate(true)), dispatch(A.fetchOwnAccounts(customerId))]).then(rs, rj); }, 1500); }); }).catch(function (err) { @@ -4055,15 +3760,23 @@ webpackJsonp([0,3],{ } }, { key: "remove3rdPartyAccountModalConfirmed", - value: function remove3rdPartyAccountModalConfirmed(accountId) { + value: function remove3rdPartyAccountModalConfirmed(account) { var _this4 = this; - var customerId = this.props.customerId; + var accountId = account.id || account.accountId; + var isRef = typeof account.balance == 'undefined'; - this.props.dispatch(A.deleteAccount(customerId, accountId)).then(function () { + var _props = this.props; + var customerId = _props.customerId; + var dispatch = _props.dispatch; + + dispatch(A.deleteAccount(customerId, accountId, isRef)).then(function () { _this4.close(); + setTimeout(function () { + return Promise.all([dispatch(AU.authenticate(true)), dispatch(A.fetchOwnAccounts(customerId))]); + }, 1500); }, function (err) { - _this4.props.dispatch(A.errorMessageTimedOut(err && err.message || err)); + dispatch(A.errorMessageTimedOut(err && err.message || err)); _this4.close(); }); } @@ -4116,7 +3829,7 @@ webpackJsonp([0,3],{ _react2.default.createElement( "strong", null, - error + JSON.stringify(error.errors || error) ) ) : []; @@ -4351,16 +4064,16 @@ webpackJsonp([0,3],{ accounts ) ), - _react2.default.createElement(Modals.NewAccountModal, { show: showAccountModal, + _react2.default.createElement(M.NewAccountModal, { show: showAccountModal, action: this.createAccountModalConfirmed.bind(this), account: this.props.app.accounts.create, onHide: this.close.bind(this), key: 0 }), - _react2.default.createElement(Modals.Add3rdPartyAccountModal, { show: show3rdPartyAccountModal, + _react2.default.createElement(M.Add3rdPartyAccountModal, { show: show3rdPartyAccountModal, action: this.create3rdPartyAccountModalConfirmed.bind(this), onHide: this.close.bind(this), key: 1 }), - _react2.default.createElement(Modals.RemoveAccountBookmarkModal, { show: showDeleteAccountModal, + _react2.default.createElement(M.RemoveAccountBookmarkModal, { show: showDeleteAccountModal, account: accountToRemove, action: this.remove3rdPartyAccountModalConfirmed.bind(this), onHide: this.close.bind(this), @@ -4387,7 +4100,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 591: +/***/ 583: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -4407,19 +4120,19 @@ webpackJsonp([0,3],{ var _reactRedux = __webpack_require__(170); - var _reactLoader = __webpack_require__(592); + var _reactLoader = __webpack_require__(584); var _reactLoader2 = _interopRequireDefault(_reactLoader); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _entities = __webpack_require__(326); + var _entities = __webpack_require__(327); var A = _interopRequireWildcard(_entities); - var _readProp = __webpack_require__(334); + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); @@ -4483,12 +4196,20 @@ webpackJsonp([0,3],{ if (!account || !accountId) { return _react2.default.createElement( "div", - { title: "" + accountId }, - accountId, - " ", + { className: "text-info", title: "" + accountId }, + "Loading.. ", _react2.default.createElement(_reactLoader2.default, { loaded: false }) ); - // {/*return ({ accountId } )*/} + } + + var errors = account.errors; + + if (errors) { + return _react2.default.createElement( + "div", + { className: "text-danger" }, + errors + ); } var title = account.title; @@ -4526,7 +4247,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 594: +/***/ 586: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -4537,7 +4258,7 @@ webpackJsonp([0,3],{ value: true }); - var _Add3rdPartyAccountModal = __webpack_require__(595); + var _Add3rdPartyAccountModal = __webpack_require__(587); Object.defineProperty(exports, 'Add3rdPartyAccountModal', { enumerable: true, @@ -4546,7 +4267,7 @@ webpackJsonp([0,3],{ } }); - var _NewAccountModal = __webpack_require__(599); + var _NewAccountModal = __webpack_require__(597); Object.defineProperty(exports, 'NewAccountModal', { enumerable: true, @@ -4555,7 +4276,7 @@ webpackJsonp([0,3],{ } }); - var _RemoveAccountModal = __webpack_require__(600); + var _RemoveAccountModal = __webpack_require__(598); Object.defineProperty(exports, 'RemoveAccountBookmarkModal', { enumerable: true, @@ -4570,7 +4291,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 595: +/***/ 587: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -4590,23 +4311,23 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _ButtonLoader = __webpack_require__(596); + var _ButtonLoader = __webpack_require__(588); var _ButtonLoader2 = _interopRequireDefault(_ButtonLoader); - var _Input = __webpack_require__(597); + var _Input = __webpack_require__(589); var _Input2 = _interopRequireDefault(_Input); - var _AuxErrorLabel = __webpack_require__(598); + var _AuxErrorLabel = __webpack_require__(590); var _AuxErrorLabel2 = _interopRequireDefault(_AuxErrorLabel); - var _readProp = __webpack_require__(334); + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); @@ -4614,11 +4335,11 @@ webpackJsonp([0,3],{ var _reactRedux = __webpack_require__(170); - var _reactSelect = __webpack_require__(585); + var _reactSelect = __webpack_require__(591); var _reactSelect2 = _interopRequireDefault(_reactSelect); - var _entities = __webpack_require__(326); + var _entities = __webpack_require__(327); var A = _interopRequireWildcard(_entities); @@ -4800,7 +4521,7 @@ webpackJsonp([0,3],{ options: (0, _readProp2.default)(this.props.data, 'accountsLookup.options', []), onChange: this.handleInput.bind(this, 'account') }), _react2.default.createElement(_AuxErrorLabel2.default, { - label: "Owner:", + label: "Account:", errors: (0, _readProp2.default)(this.props.data, 'errors.account', []) }) ), @@ -4864,7 +4585,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 596: +/***/ 588: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -4883,9 +4604,9 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); - var _reactLoader = __webpack_require__(592); + var _reactLoader = __webpack_require__(584); var _reactLoader2 = _interopRequireDefault(_reactLoader); @@ -4992,7 +4713,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 597: +/***/ 589: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -5011,7 +4732,7 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -5104,7 +4825,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 598: +/***/ 590: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -5121,7 +4842,7 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -5145,11 +4866,6 @@ webpackJsonp([0,3],{ _createClass(AuxErrorLabel, [{ key: "render", - - - // value: function render() { var _this2 = this; @@ -5203,7 +4919,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 599: +/***/ 597: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -5225,25 +4941,25 @@ webpackJsonp([0,3],{ var _reactRedux = __webpack_require__(170); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _Input = __webpack_require__(597); + var _Input = __webpack_require__(589); var _Input2 = _interopRequireDefault(_Input); - var _ButtonLoader = __webpack_require__(596); + var _ButtonLoader = __webpack_require__(588); var _ButtonLoader2 = _interopRequireDefault(_ButtonLoader); var _reactRouter = __webpack_require__(183); - var _readProp = __webpack_require__(334); + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); - var _entities = __webpack_require__(326); + var _entities = __webpack_require__(327); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -5426,7 +5142,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 600: +/***/ 598: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -5444,17 +5160,11 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _reactRouter = __webpack_require__(183); - - var _reactRedux = __webpack_require__(170); - - var _reactSelect = __webpack_require__(585); - - var _reactSelect2 = _interopRequireDefault(_reactSelect); + var _Money = __webpack_require__(599); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -5482,17 +5192,12 @@ webpackJsonp([0,3],{ key: "handleAction", value: function handleAction(evt) { evt.preventDefault(); - var action = this.props.action; - var account = this.props.account; - - var _ref = account || {}; - - var id = _ref.id; - var accountId = _ref.accountId; - + var _props = this.props; + var action = _props.action; + var account = _props.account; if (action) { - action(id || accountId); + action(account); } } }, { @@ -5500,20 +5205,20 @@ webpackJsonp([0,3],{ value: function render() { var account = this.props.account; - var _ref2 = account || {}; + var _ref = account || {}; - var titleRaw = _ref2.title; - var descriptionRaw = _ref2.description; - var balanceRaw = _ref2.balance; - var id = _ref2.id; - var accountId = _ref2.accountId; + var titleRaw = _ref.title; + var descriptionRaw = _ref.description; + var balanceRaw = _ref.balance; + var id = _ref.id; + var accountId = _ref.accountId; var entityId = id || accountId; - var title = titleRaw || '[No title]'; - var balance = (balanceRaw > 0 && balanceRaw < 1 ? '$0' : '$') + Number(balanceRaw).toFixed(2); - var description = descriptionRaw || '[No description]'; + var title = titleRaw || '—'; + var balance = (0, _Money.moneyText)(balanceRaw); + var description = descriptionRaw || '—'; return _react2.default.createElement( _reactBootstrap.Modal, @@ -5581,75 +5286,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 601: -/***/ function(module, exports, __webpack_require__) { - - /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { - - "use strict"; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - - var _react = __webpack_require__(2); - - var _react2 = _interopRequireDefault(_react); - - var _reactBootstrap = __webpack_require__(336); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * Created by andrew on 17/02/16. - */ - - - var IndexPanel = function (_React$Component) { - _inherits(IndexPanel, _React$Component); - - function IndexPanel() { - _classCallCheck(this, IndexPanel); - - return _possibleConstructorReturn(this, (IndexPanel.__proto__ || Object.getPrototypeOf(IndexPanel)).apply(this, arguments)); - } - - _createClass(IndexPanel, [{ - key: "render", - value: function render() { - return _react2.default.createElement( - _reactBootstrap.Col, - { sm: 6 }, - _react2.default.createElement(_reactBootstrap.Panel, this.props) - ); - } - }]); - - return IndexPanel; - }(_react2.default.Component); - - IndexPanel.propTypes = { - bsStyle: _react.PropTypes.string, - header: _react.PropTypes.string, - children: _react.PropTypes.node - }; - IndexPanel.defaultProps = { - bsStyle: "info", - children: _react2.default.createElement("span", null) - }; - exports.default = IndexPanel; - - /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "IndexPanel.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } - -/***/ }, - -/***/ 602: +/***/ 599: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -5670,7 +5307,7 @@ webpackJsonp([0,3],{ var moneyText = exports.moneyText = function moneyText(amount) { if (Number.isNaN(Number(amount))) { - return ''; + return '—'; } var absNum = Math.abs(Number(amount) / 100); if (absNum < 0) { @@ -5709,7 +5346,76 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 603: +/***/ 600: +/***/ function(module, exports, __webpack_require__) { + + /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.IndexPanel = undefined; + + var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + + var _react = __webpack_require__(2); + + var _react2 = _interopRequireDefault(_react); + + var _reactBootstrap = __webpack_require__(334); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** + * Created by andrew on 17/02/16. + */ + + + var IndexPanel = exports.IndexPanel = function (_React$Component) { + _inherits(IndexPanel, _React$Component); + + function IndexPanel() { + _classCallCheck(this, IndexPanel); + + return _possibleConstructorReturn(this, (IndexPanel.__proto__ || Object.getPrototypeOf(IndexPanel)).apply(this, arguments)); + } + + _createClass(IndexPanel, [{ + key: "render", + value: function render() { + return _react2.default.createElement( + _reactBootstrap.Col, + { sm: 6 }, + _react2.default.createElement(_reactBootstrap.Panel, this.props) + ); + } + }]); + + return IndexPanel; + }(_react2.default.Component); + + IndexPanel.propTypes = { + bsStyle: _react.PropTypes.string, + header: _react.PropTypes.string, + children: _react.PropTypes.node + }; + IndexPanel.defaultProps = { + bsStyle: "info", + children: _react2.default.createElement("span", null) + }; + exports.default = IndexPanel; + + /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "IndexPanel.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } + +/***/ }, + +/***/ 601: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -5731,45 +5437,41 @@ webpackJsonp([0,3],{ var _reactRedux = __webpack_require__(170); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _reactLoader = __webpack_require__(592); - - var _reactLoader2 = _interopRequireDefault(_reactLoader); - - var _reactSelect = __webpack_require__(585); + var _reactSelect = __webpack_require__(591); var _reactSelect2 = _interopRequireDefault(_reactSelect); - var _Input = __webpack_require__(597); + var _Input = __webpack_require__(589); var _Input2 = _interopRequireDefault(_Input); - var _Money = __webpack_require__(602); + var _Money = __webpack_require__(599); - var _TransfersTable = __webpack_require__(604); + var _TransfersTable = __webpack_require__(602); var _reactRouter = __webpack_require__(183); - var _IndexPanel = __webpack_require__(601); + var _IndexPanel = __webpack_require__(600); var _IndexPanel2 = _interopRequireDefault(_IndexPanel); - var _modals = __webpack_require__(594); + var _modals = __webpack_require__(586); var Modals = _interopRequireWildcard(_modals); - var _entities = __webpack_require__(326); + var _entities = __webpack_require__(327); var A = _interopRequireWildcard(_entities); - var _readProp = __webpack_require__(334); + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); - var _blockedExecution = __webpack_require__(606); + var _blockedExecution = __webpack_require__(604); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -5783,7 +5485,7 @@ webpackJsonp([0,3],{ * Created by andrew on 12/02/16. */ - //import { PageHeader } from "react-bootstrap"; + // import Spinner from "react-loader"; var resetModals = { @@ -5894,18 +5596,6 @@ webpackJsonp([0,3],{ this.ensureAccounts(nextProps); this.ensureTransfers(nextProps); } - }, { - key: "createAccountModal", - value: function createAccountModal() { - this.setState({ - showAccountModal: true - }); - } - }, { - key: "createAccountModalConfirmed", - value: function createAccountModalConfirmed() { - // debugger; - } }, { key: "close", value: function close() { @@ -5966,9 +5656,24 @@ webpackJsonp([0,3],{ if (!account) { if (errors.length) { return _react2.default.createElement( - "h2", + "div", null, - "Error loading specified account" + _react2.default.createElement( + "h2", + null, + "Error loading specified account" + ), + _react2.default.createElement( + "div", + null, + "Return ", + _react2.default.createElement( + _reactRouter.Link, + { to: "/" }, + "Home" + ), + " to pick another" + ) ); } else { return spinnerResult; @@ -6023,7 +5728,7 @@ webpackJsonp([0,3],{ null, _react2.default.createElement( _reactBootstrap.Button, - { bsStyle: "link", onClick: this.createAccountModal.bind(this) }, + { bsStyle: "link", onClick: null, disabled: true }, "Edit" ) ) @@ -6181,7 +5886,7 @@ webpackJsonp([0,3],{ ), _react2.default.createElement(_TransfersTable.TransfersTable, { forAccount: accountId, transfers: this.props.transfers[accountId] }), _react2.default.createElement(Modals.NewAccountModal, { show: showAccountModal, - action: this.createAccountModalConfirmed.bind(this), + action: null, account: { loading: true }, onHide: this.close.bind(this), key: 0 }) @@ -6210,7 +5915,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 604: +/***/ 602: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -6228,21 +5933,21 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactLoader = __webpack_require__(592); + var _reactLoader = __webpack_require__(584); var _reactLoader2 = _interopRequireDefault(_reactLoader); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _reactTimeago = __webpack_require__(605); + var _reactTimeago = __webpack_require__(603); var _reactTimeago2 = _interopRequireDefault(_reactTimeago); - var _Money = __webpack_require__(602); + var _Money = __webpack_require__(599); - var _AccountInfo = __webpack_require__(591); + var _AccountInfo = __webpack_require__(583); var _AccountInfo2 = _interopRequireDefault(_AccountInfo); @@ -6284,7 +5989,7 @@ webpackJsonp([0,3],{ if (v.entryType == 'account') { balance = v.initialBalance; - } else if (v.entryType == 'transaction') { + } else if (v.entryType == 'transaction' && v.status !== 'FAILED_DUE_TO_INSUFFICIENT_FUNDS') { var isOriginating = v.fromAccountId == currentAccountId; balance += (isOriginating ? -1 : 1) * v.amount; } @@ -6498,7 +6203,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 606: +/***/ 604: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -6542,7 +6247,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 607: +/***/ 605: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -6560,7 +6265,7 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); @@ -6568,9 +6273,11 @@ webpackJsonp([0,3],{ var _reduxRouter = __webpack_require__(246); - var _EmailSignInForm = __webpack_require__(608); + var _EmailSignInForm = __webpack_require__(606); - var _EmailSignInForm2 = _interopRequireDefault(_EmailSignInForm); + var _readProp = __webpack_require__(332); + + var _readProp2 = _interopRequireDefault(_readProp); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -6585,18 +6292,6 @@ webpackJsonp([0,3],{ */ - //import ButtonLoader from "./ButtonLoader"; - - //import ButtonLoader from "../controls/bootstrap/ButtonLoader"; - - - //export {bootstrap, materialUi} from "./views"; - - - // bootstrap theme - //import { EmailSignInForm } from "redux-auth/bootstrap-theme"; - - var SignIn = exports.SignIn = function (_React$Component) { _inherits(SignIn, _React$Component); @@ -6609,8 +6304,13 @@ webpackJsonp([0,3],{ _createClass(SignIn, [{ key: "checkRedirect", value: function checkRedirect(props) { - if (props.auth.user.isSignedIn) { - props.dispatch((0, _reduxRouter.pushState)(null, props.location.query.next)); + + var isSignedIn = (0, _readProp2.default)(props.auth, 'user.isSignedIn'); + if (isSignedIn) { + + var nextLocation = (0, _readProp2.default)(props.location, 'query.next'); + props.dispatch((0, _reduxRouter.pushState)(null, nextLocation)); + //// redirect to login and add next param so we can redirect again after login //const redirectAfterLogin = this.props.location.pathname; //this.props.dispatch(pushState(null, `/signin?next=${redirectAfterLogin}`)); @@ -6629,16 +6329,6 @@ webpackJsonp([0,3],{ }, { key: "render", value: function render() { - var signInProps = { - inputProps: { - password: { - className: 'hide hidden', - style: { display: 'none' }, - value: null, - disabled: true - } - } - }; return _react2.default.createElement( BS.Well, @@ -6648,7 +6338,7 @@ webpackJsonp([0,3],{ null, "Sign In" ), - _react2.default.createElement(_EmailSignInForm2.default, this.props) + _react2.default.createElement(_EmailSignInForm.EmailSignInForm, this.props) ); } }]); @@ -6670,7 +6360,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 608: +/***/ 606: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -6680,6 +6370,7 @@ webpackJsonp([0,3],{ Object.defineProperty(exports, "__esModule", { value: true }); + exports.EmailSignInForm = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; @@ -6689,29 +6380,29 @@ webpackJsonp([0,3],{ var _react2 = _interopRequireDefault(_react); - var _reactRedux = __webpack_require__(170); - - var _readProp = __webpack_require__(334); - - var _readProp2 = _interopRequireDefault(_readProp); - - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); - var _Input = __webpack_require__(597); + var _readProp = __webpack_require__(332); + + var _readProp2 = _interopRequireDefault(_readProp); + + var _Input = __webpack_require__(589); var _Input2 = _interopRequireDefault(_Input); - var _ButtonLoader = __webpack_require__(596); + var _ButtonLoader = __webpack_require__(588); var _ButtonLoader2 = _interopRequireDefault(_ButtonLoader); - var _AuxErrorLabel = __webpack_require__(598); + var _AuxErrorLabel = __webpack_require__(590); var _AuxErrorLabel2 = _interopRequireDefault(_AuxErrorLabel); - var _signIn = __webpack_require__(609); + var _signIn = __webpack_require__(607); + + var AS = _interopRequireWildcard(_signIn); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -6726,19 +6417,28 @@ webpackJsonp([0,3],{ */ - /* - - */ + var formValidation = function formValidation(payload) { + return ['email', 'password'].reduce(function (memo, prop) { + var result = []; + var value = (payload[prop] || '').replace(/(^\s+)|(\s+$)/g, ''); - var EmailSignInForm = function (_React$Component) { + switch (prop) { + case 'email': + case 'password': + if (/^$/.test(value)) { + result.push('required'); + } + } + + if (result.length) { + memo[prop] = result; + memo.hasErrors = true; + } + return memo; + }, {}); + }; + + var EmailSignInForm = exports.EmailSignInForm = function (_React$Component) { _inherits(EmailSignInForm, _React$Component); function EmailSignInForm() { @@ -6750,14 +6450,22 @@ webpackJsonp([0,3],{ _createClass(EmailSignInForm, [{ key: "handleInput", value: function handleInput(key, val) { - this.props.dispatch((0, _signIn.emailSignInFormUpdate)(key, val)); + this.props.dispatch(AS.emailSignInFormUpdate(key, val)); } }, { key: "handleSubmit", value: function handleSubmit(event) { event.preventDefault(); - var formData = _extends({}, this.props.auth.signIn.form); - this.props.dispatch((0, _signIn.emailSignIn)(formData)); + + var formData = (0, _readProp2.default)(this.props.auth, 'signIn.form'); + + var validationErrors = formValidation(formData); + if (validationErrors.hasErrors) { + this.props.dispatch(AS.emailSignInError(validationErrors)); + return; + } + + this.props.dispatch(AS.emailSignIn(formData)); } }, { key: "render", @@ -6767,7 +6475,6 @@ webpackJsonp([0,3],{ var disabled = this.props.auth.user.isSignedIn || this.props.auth.signIn.loading; //const error = read(this.props.auth, 'signIn.errors.email', null); - //debugger; var formErrors = (0, _readProp2.default)(this.props.auth, 'signIn.errors.errors', ''); return _react2.default.createElement( @@ -6794,6 +6501,16 @@ webpackJsonp([0,3],{ errors: (0, _readProp2.default)(this.props.auth, 'signIn.errors.email', []), onChange: this.handleInput.bind(this, "email") }, this.props.inputProps.email)), + _react2.default.createElement(_Input2.default, _extends({ type: "password", + className: "password-sign-in-email", + label: "Password", + placeholder: "Password", + name: "password", + disabled: disabled, + value: (0, _readProp2.default)(this.props.auth, 'signIn.form.password', ''), + errors: (0, _readProp2.default)(this.props.auth, 'signIn.errors.password', []), + onChange: this.handleInput.bind(this, "password") + }, this.props.inputProps.password)), _react2.default.createElement( _ButtonLoader2.default, _extends({ loading: (0, _readProp2.default)(this.props.auth, 'signIn.loading', false), @@ -6824,6 +6541,7 @@ webpackJsonp([0,3],{ submit: _react.PropTypes.object }) }; + EmailSignInForm.defaultProps = { inputProps: { email: {}, @@ -6831,21 +6549,17 @@ webpackJsonp([0,3],{ submit: {} } }; - exports.default = (0, _reactRedux.connect)(function (_ref) { - var app = _ref.app; - return { auth: app.auth }; - })(EmailSignInForm); /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "EmailSignInForm.js" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/***/ 609: +/***/ 607: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true @@ -6853,31 +6567,23 @@ webpackJsonp([0,3],{ exports.emailSignInError = exports.emailSignInComplete = exports.emailSignInStart = exports.emailSignInFormUpdate = undefined; exports.emailSignIn = emailSignIn; - var _sessionStorage = __webpack_require__(318); - - var _entities = __webpack_require__(326); - - var _configure = __webpack_require__(314); - - var _api = __webpack_require__(321); - - var _actions = __webpack_require__(317); - var _ACTION_TYPES = __webpack_require__(295); var _ACTION_TYPES2 = _interopRequireDefault(_ACTION_TYPES); + var _actions = __webpack_require__(316); + + var _sessionStorage = __webpack_require__(317); + + var _entities = __webpack_require__(327); + + var _api = __webpack_require__(321); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - //import root from '../utils/root'; - - /** - * Created by andrew on 26/02/16. - */ - var emailSignInFormUpdate = exports.emailSignInFormUpdate = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_IN_FORM_UPDATE, 'key', 'value'); - //import { parseResponse } from "../utils/handleFetchResponse"; - //import fetch from "../utils/fetch"; - + var emailSignInFormUpdate = exports.emailSignInFormUpdate = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_IN_FORM_UPDATE, 'key', 'value'); /** + * Created by andrew on 26/02/16. + */ var emailSignInStart = exports.emailSignInStart = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_IN_START); var emailSignInComplete = exports.emailSignInComplete = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_IN_COMPLETE, 'user'); var emailSignInError = exports.emailSignInError = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_IN_ERROR, 'error'); @@ -6911,7 +6617,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 610: +/***/ 608: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -6933,17 +6639,17 @@ webpackJsonp([0,3],{ var _reduxRouter = __webpack_require__(246); - var _readProp = __webpack_require__(334); + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); - var _reactBootstrap = __webpack_require__(336); + var _reactBootstrap = __webpack_require__(334); var BS = _interopRequireWildcard(_reactBootstrap); var _reactRouter = __webpack_require__(183); - var _EmailSignUpForm = __webpack_require__(611); + var _EmailSignUpForm = __webpack_require__(609); var _EmailSignUpForm2 = _interopRequireDefault(_EmailSignUpForm); @@ -6997,18 +6703,14 @@ webpackJsonp([0,3],{ key: "render", value: function render() { return _react2.default.createElement( - "div", + BS.Well, null, _react2.default.createElement( - _reactBootstrap.PageHeader, + BS.PageHeader, null, "Register" ), - _react2.default.createElement( - BS.Well, - null, - _react2.default.createElement(_EmailSignUpForm2.default, null) - ) + _react2.default.createElement(_EmailSignUpForm2.default, null) ); } }]); @@ -7028,7 +6730,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 611: +/***/ 609: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -7039,37 +6741,43 @@ webpackJsonp([0,3],{ value: true }); - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = __webpack_require__(2); var _react2 = _interopRequireDefault(_react); - var _Input = __webpack_require__(597); + var _reactRedux = __webpack_require__(170); + + var _reactBootstrap = __webpack_require__(334); + + var _Input = __webpack_require__(589); var _Input2 = _interopRequireDefault(_Input); - var _ButtonLoader = __webpack_require__(596); + var _ButtonLoader = __webpack_require__(588); var _ButtonLoader2 = _interopRequireDefault(_ButtonLoader); - var _IndexPanel = __webpack_require__(601); + var _IndexPanel = __webpack_require__(600); var _IndexPanel2 = _interopRequireDefault(_IndexPanel); - var _formToPayloadMappers = __webpack_require__(612); + var _AuxErrorLabel = __webpack_require__(590); - var _readProp = __webpack_require__(334); + var _AuxErrorLabel2 = _interopRequireDefault(_AuxErrorLabel); + + var _formToPayloadMappers = __webpack_require__(610); + + var _readProp = __webpack_require__(332); var _readProp2 = _interopRequireDefault(_readProp); - var _reactBootstrap = __webpack_require__(336); + var _signUp = __webpack_require__(611); - var _reactRedux = __webpack_require__(170); + var AS = _interopRequireWildcard(_signUp); - var _signUp = __webpack_require__(613); + function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -7081,10 +6789,38 @@ webpackJsonp([0,3],{ * Created by andrew on 15/02/16. */ - //import auth from "redux-auth"; - //import { emailSignUpFormUpdate, emailSignUp } from "redux-auth"; + var formValidation = function formValidation(payload) { + return ['fname', 'lname', 'email', 'password', 'passwordConfirm', 'ssn', 'phoneNumber', 'address1', 'address2', 'city', 'state', 'zip'].reduce(function (memo, prop) { + var result = []; + var value = (payload[prop] || '').replace(/(^\s+)|(\s+$)/g, ''); + switch (prop) { + case 'fname': + case 'lname': + case 'email': + case 'ssn': + case 'password': + case 'passwordConfirm': + if (/^$/.test(value)) { + result.push('required'); + } + } + + switch (prop) { + case 'passwordConfirm': + if (value != payload['password']) { + result.push('need to be equal to password'); + } + } + + if (result.length) { + memo[prop] = result; + memo.hasErrors = true; + } + return memo; + }, {}); + }; var EmailSignUpForm = function (_React$Component) { _inherits(EmailSignUpForm, _React$Component); @@ -7096,22 +6832,23 @@ webpackJsonp([0,3],{ } _createClass(EmailSignUpForm, [{ - key: "getEndpoint", - value: function getEndpoint() { - return this.props.endpoint || this.props.auth.getIn(["configure", "currentEndpointKey"]) || this.props.auth.getIn(["configure", "defaultEndpointKey"]); - } - }, { key: "handleInput", value: function handleInput(key, val) { - this.props.dispatch((0, _signUp.emailSignUpFormUpdate)(key, val)); + this.props.dispatch(AS.emailSignUpFormUpdate(key, val)); } }, { key: "handleSubmit", value: function handleSubmit(event) { event.preventDefault(); - var formData = _extends({}, this.props.auth.signUp.form); - this.props.dispatch((0, _signUp.emailSignUp)((0, _formToPayloadMappers.customerInfoMap)(formData))); + var formData = (0, _readProp2.default)(this.props.auth, 'signUp.form'); + var validationErrors = formValidation(formData); + if (validationErrors.hasErrors) { + this.props.dispatch(AS.emailSignUpError(validationErrors)); + return; + } + + this.props.dispatch(AS.emailSignUp((0, _formToPayloadMappers.customerInfoMap)(formData))); } }, { key: "render", @@ -7119,10 +6856,22 @@ webpackJsonp([0,3],{ var disabled = this.props.auth.user.isSignedIn || this.props.auth.signUp.loading; + var formErrors = (0, _readProp2.default)(this.props.auth, 'signUp.errors.errors', ''); + return _react2.default.createElement( "form", { className: "redux-auth email-sign-up-form clearfix", onSubmit: this.handleSubmit.bind(this) }, + _react2.default.createElement( + "div", + { className: "form-group", style: { + display: formErrors ? 'block' : 'none' + } }, + _react2.default.createElement(_AuxErrorLabel2.default, { + label: "Form:", + errors: formErrors.length ? [formErrors] : [] + }) + ), _react2.default.createElement( _IndexPanel2.default, { header: "basic" }, @@ -7152,6 +6901,26 @@ webpackJsonp([0,3],{ value: (0, _readProp2.default)(this.props.auth, 'signUp.form.email', ''), errors: (0, _readProp2.default)(this.props.auth, 'signUp.errors.email', []), onChange: this.handleInput.bind(this, "email") + }), + _react2.default.createElement(_Input2.default, { type: "password", + className: "password-sign-in-email", + label: "Password", + placeholder: "Password", + name: "password", + disabled: disabled, + value: (0, _readProp2.default)(this.props.auth, 'signUp.form.password', ''), + errors: (0, _readProp2.default)(this.props.auth, 'signUp.errors.password', []), + onChange: this.handleInput.bind(this, "password") + }), + _react2.default.createElement(_Input2.default, { type: "password", + className: "password-sign-in-email", + label: "Confirm password", + placeholder: "Confirm password", + name: "password-confirm", + disabled: disabled, + value: (0, _readProp2.default)(this.props.auth, 'signUp.form.passwordConfirm', ''), + errors: (0, _readProp2.default)(this.props.auth, 'signUp.errors.passwordConfirm', []), + onChange: this.handleInput.bind(this, "passwordConfirm") }) ), _react2.default.createElement( @@ -7255,7 +7024,7 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 612: +/***/ 610: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -7270,6 +7039,7 @@ webpackJsonp([0,3],{ */ var customerInfoMap = exports.customerInfoMap = function customerInfoMap(_ref) { var ssn = _ref.ssn; + var password = _ref.password; var address1 = _ref.address1; var address2 = _ref.address2; var city = _ref.city; @@ -7284,6 +7054,7 @@ webpackJsonp([0,3],{ "firstName": fname, "lastName": lname }, + password: password, email: email, ssn: ssn, "phoneNumber": phoneNumber, @@ -7301,57 +7072,39 @@ webpackJsonp([0,3],{ /***/ }, -/***/ 613: +/***/ 611: /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/Users/andrew/dev/clients/ES/code/event-sourcing-examples/js-frontend/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { - "use strict"; + 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); - exports.emailSignUpFormUpdate = emailSignUpFormUpdate; - exports.emailSignUpStart = emailSignUpStart; - exports.emailSignUpComplete = emailSignUpComplete; - exports.emailSignUpError = emailSignUpError; + exports.emailSignUpError = exports.emailSignUpComplete = exports.emailSignUpStart = exports.emailSignUpFormUpdate = undefined; exports.emailSignUp = emailSignUp; - var _sessionStorage = __webpack_require__(318); - - var _entities = __webpack_require__(326); - - var _configure = __webpack_require__(314); - - var _api = __webpack_require__(321); - - var _signIn = __webpack_require__(609); - var _reduxRouter = __webpack_require__(246); var _ACTION_TYPES = __webpack_require__(295); var _ACTION_TYPES2 = _interopRequireDefault(_ACTION_TYPES); + var _actions = __webpack_require__(316); + + var _api = __webpack_require__(321); + + var _signIn = __webpack_require__(607); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - //import { parseResponse } from "../utils/handleFetchResponse"; - function emailSignUpFormUpdate(key, value) { - return { type: _ACTION_TYPES2.default.AUTH.SIGN_UP_FORM_UPDATE, key: key, value: value }; - } /** - * Created by andrew on 11/03/16. - */ - function emailSignUpStart() { - return { type: _ACTION_TYPES2.default.AUTH.SIGN_UP_START }; - } - - function emailSignUpComplete(user) { - return { type: _ACTION_TYPES2.default.AUTH.SIGN_UP_COMPLETE, user: user }; - } - - function emailSignUpError(errors) { - return { type: _ACTION_TYPES2.default.AUTH.SIGN_UP_ERROR, errors: errors }; - } + var emailSignUpFormUpdate = exports.emailSignUpFormUpdate = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_UP_FORM_UPDATE, 'key', 'value'); /** + * Created by andrew on 11/03/16. + */ + var emailSignUpStart = exports.emailSignUpStart = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_UP_START); + var emailSignUpComplete = exports.emailSignUpComplete = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_UP_COMPLETE, 'user'); + var emailSignUpError = exports.emailSignUpError = (0, _actions.makeActionCreator)(_ACTION_TYPES2.default.AUTH.SIGN_UP_ERROR, 'error'); function emailSignUp(body) { return function (dispatch) { @@ -7367,7 +7120,10 @@ webpackJsonp([0,3],{ dispatch((0, _reduxRouter.push)('/signin')); }).catch(function (_ref2) { var errors = _ref2.errors; - return dispatch(emailSignUpError(errors)); + + dispatch(emailSignUpError({ + errors: errors + })); }); }; } @@ -7377,4 +7133,4 @@ webpackJsonp([0,3],{ /***/ } }); -//# sourceMappingURL=app.fcbedf54f0345474ccc1.js.map \ No newline at end of file +//# sourceMappingURL=app.497ed0e9fa8411cbbf1d.js.map \ No newline at end of file diff --git a/js-frontend/build/app.497ed0e9fa8411cbbf1d.js.map b/js-frontend/build/app.497ed0e9fa8411cbbf1d.js.map new file mode 100644 index 0000000..bfb6db7 --- /dev/null +++ b/js-frontend/build/app.497ed0e9fa8411cbbf1d.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/client.js?","webpack:///./src/app.js?","webpack:///./~/redux-router/server.js?","webpack:///./~/redux-router/lib/server.js?","webpack:///./~/redux-router/lib/matchMiddleware.js?","webpack:///./src/reducers/index.js?","webpack:///./src/reducers/auth/index.js?","webpack:///./src/reducers/auth/configure.js?","webpack:///./src/constants/ACTION_TYPES.js?","webpack:///./src/utils/defineActionTypes.js?","webpack:///./src/reducers/createDataReducer.js?","webpack:///./src/reducers/auth/authenticate.js?","webpack:///./src/reducers/auth/signin.js?","webpack:///./src/reducers/createFormReducer.js?","webpack:///./src/reducers/auth/signup.js?","webpack:///./src/reducers/auth/signout.js?","webpack:///./src/reducers/auth/user.js?","webpack:///./src/reducers/data/index.js?","webpack:///./src/reducers/data/accounts.js?","webpack:///./src/reducers/data/transfers.js?","webpack:///./src/reducers/data/entities.js?","webpack:///./src/reducers/data/bookmarkAccount.js?","webpack:///./src/reducers/ui/index.js?","webpack:///./src/reducers/ui/account.js?","webpack:///./src/reducers/ui/errors.js?","webpack:///./src/reducers/ui/bookmarkAccount.js?","webpack:///./src/reducers/ui/transfersMake.js?","webpack:///./src/actions/configure.js?","webpack:///./src/actions/authenticate.js?","webpack:///./src/utils/actions.js?","webpack:///./src/utils/sessionStorage.js?","webpack:///./src/utils/constants.js?","webpack:///./src/utils/root.js?","webpack:///./src/utils/api.js?","webpack:///./src/utils/fetch.js?","webpack:///./src/utils/apiEndpoints.js?","webpack:///./src/utils/handleFetchResponse.js?","webpack:///./src/actions/entities.js?","webpack:///./src/utils/clientSettings.js?","webpack:///./src/utils/parseEndpointConfig.js?","webpack:///./src/actions/navigate.js?","webpack:///./src/components/AuthComponent.js?","webpack:///./src/utils/readProp.js?","webpack:///./src/components/partials/Container.js?","webpack:///./src/components/HeaderLinks.js?","webpack:///./src/actions/signOut.js?","webpack:///./src/views/MyAccounts.js?","webpack:///./src/components/AccountInfo.js?","webpack:///./src/views/modals/index.js?","webpack:///./src/views/modals/Add3rdPartyAccountModal.js?","webpack:///./src/controls/bootstrap/ButtonLoader.js?","webpack:///./src/controls/bootstrap/Input.js?","webpack:///./src/controls/bootstrap/AuxErrorLabel.js?","webpack:///./src/views/modals/NewAccountModal.js?","webpack:///./src/views/modals/RemoveAccountModal.js?","webpack:///./src/components/Money.js?","webpack:///./src/components/partials/IndexPanel.js?","webpack:///./src/views/Account.js?","webpack:///./src/components/TransfersTable.js?","webpack:///./src/utils/blockedExecution.js?","webpack:///./src/views/SignIn.js?","webpack:///./src/controls/bootstrap/EmailSignInForm.js?","webpack:///./src/actions/signIn.js?","webpack:///./src/views/SignUp.js?","webpack:///./src/controls/bootstrap/EmailSignUpForm.js?","webpack:///./src/entities/formToPayloadMappers.js?","webpack:///./src/actions/signUp.js?"],"names":["then","provider","reactRoot","window","document","getElementById","render","process","env","NODE_ENV","firstChild","attributes","console","error","initialize","App","props","children","Component","cookies","isServer","currentLocation","userAgent","reducer","app","router","dispatch","onEnter","nextState","location","routes","reduxReactRouter","createHistoryMethod","store","createHistory","default","emailSignInPath","customersPath","currentUserPath","accountsPath","transfersPath","storage","tokenFormat","handleLoginResponse","resp","data","handleAccountUpdateResponse","handleTokenValidationResponse","redirectPath","blank","global","navigator","log","mainReducer","auth","ui","authStateReducer","configure","signIn","signUp","signOut","authentication","user","configReducer","AUTH","CONFIGURE_START","CONFIGURE_COMPLETE","CONFIGURE_ERROR","c","LOCATION","ENTER","AUTHENTICATE_START","AUTHENTICATE_COMPLETE","AUTHENTICATE_ERROR","SIGN_IN_START","SIGN_IN_COMPLETE","SIGN_IN_ERROR","SIGN_IN_FORM_UPDATE","SIGN_UP_START","SIGN_UP_COMPLETE","SIGN_UP_ERROR","SIGN_UP_FORM_UPDATE","SIGN_OUT_START","SIGN_OUT_COMPLETE","ENTITIES","REQUESTED","RECEIVED","RECEIVED_LIST","ACCOUNTS","LIST_START","LIST_COMPLETE","LIST_ERROR","LIST_REF_START","LIST_REF_COMPLETE","LIST_REF_ERROR","CREATE_START","CREATE_COMPLETE","CREATE_ERROR","CREATE_FORM_UPDATE","EDIT_START","EDIT_COMPLETE","EDIT_ERROR","EDIT_FORM_UPDATE","CREATE_REF_START","CREATE_REF_COMPLETE","CREATE_REF_ERROR","CREATE_REF_FORM_UPDATE","CREATE_REF_OWNER_LOOKUP_START","CREATE_REF_OWNER_LOOKUP_COMPLETE","CREATE_REF_ACCOUNT_LOOKUP_START","CREATE_REF_ACCOUNT_LOOKUP_COMPLETE","ACCOUNT","SINGLE_START","SINGLE_COMPLETE","SINGLE_ERROR","DELETE_START","DELETE_COMPLETE","DELETE_ERROR","TRANSFERS","MAKE_START","MAKE_COMPLETE","MAKE_ERROR","MAKE_FORM_UPDATE","ERROR","START","STOP","defineActionTypes","TODO_DEFINE","Symbol","defineActionType","obj","result","Object","keys","reduce","memo","namespace","value","types","namespaceTypes","trim","split","filter","key","test","Set","size","length","forEach","t","entries","type","createByIdDataReducer","next","KEY_REQUEST","KEY_SUCCESS","KEY_ERROR","state","action","id","errors","createDataReducer","payloadActionNameProp","payloadStateNameProp","payloadAssignFn","k","initialState","loading","formReducer","payload","isSealed","aggregate","valid","authReducer","internalSignInReducer","signInReducer","pathname","createFormReducer","KEY_UPDATE","form","internalSignUpReducer","signUpReducer","signOutInitialState","signOutReducer","initalState","isSignedIn","userReducer","dataReducer","transfers","entities","accounts","bookmarkAccount","ownAccountsReducer","otherAccountsReducer","toAccounts","map","createAccountReducer","editAccountReducer","own","other","create","edit","selectedEvents","nodeInitialState","entity","hashMap","item","accountId","isError","isStart","isLoading","optionsLoaderInitialState","options","accountsDisabled","ownersLookup","accountsLookup","optionsLoaderReducer","isOwnerSetBlank","isOwnerSelected","nextAccountsDisabled","nextForm","account","nextErrors","uiReducer","transfersMake","setEndpointKeys","SET_ENDPOINT_KEYS","endpoints","currentEndpointKey","defaultEndpointKey","endpoint","settings","authenticate","U","authenticateStart","authenticateComplete","authenticateError","forceReread","savedUserPromise","Promise","rs","rj","currentHeaders","retrieveHeaders","accessToken","reason","savedUser","retrieveUserData","userData","persistUserData","err","catch","resolve","makeActionCreator","argNames","args","arg","index","setCurrentSettings","setCurrentEndpoint","setCurrentEndpointKey","setDefaultEndpointKey","getDefaultEndpointKey","resetConfig","destroySession","getInitialEndpointKey","isApiRequest","getTokenFormat","persistData","retrieveData","C","authState","currentSettings","currentEndpoint","memoryStorage","clean","s","e","SAVED_CONFIG_KEY","DEFAULT_CONFIG_KEY","SAVED_CREDS_KEY","SAVED_USER_INFO","localStorage","removeItem","remove","path","cookiePath","unescapeQuotes","val","replace","get","getItem","url","JSON","stringify","setItem","set","expires","cookieExpiry","parse","INITIAL_CONFIG_KEY","Function","eval","ENDPOINTS","JSON_HEADERS","headers","METHODS","DELETE","method","GET","POST","fetch","apiSignIn","body","emailSignIn","apiSignUp","emailSignUp","apiGetCurrentUser","currentUser","apiCreateAccount","customerId","title","initialBalance","balance","description","apiCreateRefAccount","owner","refAccounts","apiMakeTransfer","fromAccountId","amount","apiRetrieveAccounts","customersAccounts","apiRetrieveTransfers","history","apiRetrieveAccount","apiDeleteAccount","apiDeleteRefAccount","refAccount","apiRetrieveUsers","email","customersLookup","getAuthHeaders","updateAuthCredentials","nextHeaders","newHeaders","blankHeaders","API_ROOT","lookup","makeQuery","params","encodeURIComponent","join","parseResponse","response","json","status","message","rest","jvmPattern","m","name","reject","accountsList","accountCreate","accountRefCreate","fetchOwnAccounts","fetchAccount","deleteAccount","errorMessageTimedOut","api","entityRequested","entityReceived","accountsListRequested","accountsListReceived","accountsListError","accountsRefListReceived","accountCreateStart","accountCreateComplete","accountCreateError","accountCreateFormUpdate","accountRefCreateStart","accountRefCreateComplete","accountRefCreateError","accountRefCreateFormUpdate","accountRequested","accountComplete","accountError","readUntilChanged","initialData","promisedFn","leftCalls","initialDataFlat","setTimeout","call","Math","pow","deleteAccountRequested","deleteAccountComplete","deleteAccountError","isRef","deleteApiAction","errorMessageStart","errorMessageStop","timeout","createRefOwnerLookupStart","createRefOwnerLookupComplete","createRefAccountLookupStart","createRefAccountLookupComplete","createRefOwnerLookup","customers","arr","fullName","firstName","lastName","i","label","createRefAccountLookup","makeTransferRequested","makeTransferComplete","makeTransferError","makeTransferFormUpdate","makeTransfer","moneyTransferId","getTransfersRequested","getTransfersComplete","getTransfersError","getTransfers","applyConfig","defaultSettings","forceHardRedirect","initialCredentials","reset","match","parseEndpointConfig","defaultEndpoint","apiUrl","signOutPath","emailRegistrationPath","accountUpdatePath","accountDeletePath","passwordResetPath","passwordUpdatePath","tokenValidationPath","authProviderPaths","github","facebook","google","getFirstObjectKey","constructor","Array","defaultConfig","configName","visitLocation","requireAuthentication","AuthComponent","isAuthenticated","redirectAfterLogin","checkRedirect","nextProps","mapStateToProps","read","src","defaultVal","pathItem","Container","propTypes","node","BS","HeaderLinks","evt","buttonSet","isRegister","isLogin","condition","bind","signOutStart","signOutComplete","M","A","AU","resetModals","showAccountModal","show3rdPartyAccountModal","showDeleteAccountModal","MyAccounts","setState","close","all","accountToRemove","ssn","phoneNumber","address","city","street1","street2","zipCode","errorLine","ownAccountsData","ownAccounts","idx","remove3rdPartyAccountModal","refAccountsData","concat","createAccountModal","create3rdPartyAccountModal","createAccountModalConfirmed","create3rdPartyAccountModalConfirmed","remove3rdPartyAccountModalConfirmed","AccountInfo","ensureData","padding","formValidation","prop","push","hasErrors","Add3rdPartyAccountModal","preventDefault","validationErrors","onHide","input","disabled","ownersLoading","formErrors","show","display","getOwnersOptions","handleInput","handleSubmit","ButtonLoader","icon","spinColor","bsStyle","spinColorDark","spinColorLight","spinConfig","position","marginRight","width","height","top","onClick","className","style","bsSize","renderIcon","bool","object","string","func","isRequired","defaultProps","lines","radius","AuthInput","ev","onChange","target","paddingLeft","marginBottom","left","renderErrorList","array","AuxErrorLabel","NewAccountModal","event","actionLabel","RemoveAccountBookmarkModal","titleRaw","descriptionRaw","balanceRaw","entityId","handleAction","moneyText","Number","isNaN","absNum","abs","toFixed","Money","IndexPanel","header","Modals","unsaved","Account","ensureTransfers","ensureAccounts","cb","forceFetch","transfer","spinnerResult","transferTo","itemAccountId","substr","transferDisabled","initiateTransfer","TransfersTable","currentAccountId","sort","a","b","date","entryType","toAccountId","v","items","isOriginating","forAccount","transfersMarkup","preprocessItems","transactionId","transferTimestamp","Date","timeAgoTitle","toLocaleDateString","toLocaleTimeString","directionMarkup","counterAccountMarkup","blocked","fn","useCb","isBlocked","SignIn","nextLocation","AS","EmailSignInForm","emailSignInFormUpdate","formData","emailSignInError","inputProps","password","submit","ex","shape","emailSignInStart","emailSignInComplete","SignUp","EmailSignUpForm","emailSignUpFormUpdate","emailSignUpError","customerInfoMap","address1","address2","fname","lname","zip","emailSignUpStart","emailSignUpComplete"],"mappings":"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","file":"app.497ed0e9fa8411cbbf1d.js","sourcesContent":["/**\n * Created by andrew on 12/02/16.\n */\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { initialize } from \"./app\";\n/**\n * Fire-up React Router.\n */\ninitialize().then(({ provider }) => {\n const reactRoot = window.document.getElementById(\"root\");\n ReactDOM.render(provider, reactRoot);\n});\n\n\n/**\n * Detect whether the server-side render has been discarded due to an invalid checksum.\n */\nif (process.env.NODE_ENV !== \"production\") {\n const reactRoot = window.document.getElementById(\"root\");\n if (!reactRoot.firstChild || !reactRoot.firstChild.attributes ||\n !reactRoot.firstChild.attributes[\"data-react-checksum\"]) {\n console.error(\"Server-side React render was discarded. Make sure that your initial render does not contain any client-side code.\");\n }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/client.js\n **/","/**\n * Created by andrew on 12/02/16.\n */\n\nimport React from \"react\";\nimport { createStore, compose, applyMiddleware, combineReducers} from \"redux\";\nimport { Provider, connect} from \"react-redux\";\nimport thunk from \"redux-thunk\";\nimport createLogger from 'redux-logger';\nimport { Route, IndexRoute, Link, IndexLink } from \"react-router\";\nimport { RouterContext } from 'react-router';\nimport { ReduxRouter} from \"redux-router\";\nimport { createHistory, createHashHistory, createMemoryHistory } from \"history\";\nimport { pushState, routerStateReducer, reduxReactRouter as clientRouter} from \"redux-router\";\nimport { reduxReactRouter as serverRouter } from \"redux-router/server\";\n\nimport mainReducer from './reducers';\n\nimport { configure as endpointsConfig } from './actions/configure';\nimport { visitLocation } from './actions/navigate';\nimport { requireAuthentication } from './components/AuthComponent';\nimport Container from \"./components/partials/Container\";\nimport MyAccounts from \"./views/MyAccounts\";\nimport Account from \"./views/Account\";\nimport SignIn from \"./views/SignIn\";\nimport SignUp from \"./views/SignUp\";\n\nclass App extends React.Component {\n render() {\n return (\n \n {this.props.children}\n );\n }\n}\n\nexport function initialize({cookies, isServer, currentLocation, userAgent} = {}) {\n\n const reducer = combineReducers({\n app: mainReducer,\n router: routerStateReducer\n });\n\n let dispatch = null;\n\n const onEnter = (nextState) => {\n const { location } = nextState;\n dispatch && dispatch(visitLocation(location));\n };\n\n const routes = (\n \n \n \n \n \n \n );\n\n // these methods will differ from server to client\n const reduxReactRouter = isServer ? serverRouter : clientRouter;\n const createHistoryMethod = isServer ? createMemoryHistory : createHashHistory;\n\n // create the redux store\n const store = compose(\n applyMiddleware(thunk, createLogger()),\n reduxReactRouter({\n routes,\n createHistory: createHistoryMethod\n })\n )(createStore)(reducer);\n\n dispatch = store.dispatch;\n\n /**\n * The React Router 1.0 routes for both the server and the client.\n */\n return store.dispatch(endpointsConfig([\n {\n default: {\n //apiUrl: '/',\n emailSignInPath: '/api/login',\n customersPath: '/api/customers',\n currentUserPath: '/api/user',\n accountsPath: '/api/accounts',\n transfersPath: '/api/transfers'\n }\n }\n ], {\n cookies,\n isServer,\n currentLocation,\n storage: 'localStorage',\n tokenFormat: {\n \"access-token\": \"{{ access-token }}\"\n },\n handleLoginResponse: function(resp) {\n debugger;\n return resp.data;\n },\n\n handleAccountUpdateResponse: function(resp) {\n debugger;\n return resp.data;\n },\n\n handleTokenValidationResponse: function(resp) {\n debugger;\n return resp.data;\n }\n })).then(({ redirectPath, blank } = {}) => {\n // hack for material-ui server-side rendering.\n // see https://github.com/callemall/material-ui/pull/2007\n if (userAgent) {\n global.navigator = {userAgent};\n }\n\n if (blank) {\n // if `blank` is true, this is an OAuth redirect and should not\n // be rendered\n return