- messagingService
- .send(transfer)
- .thenApply(
- $ ->
- {
- repository.update(transfer.getId(), SENT, PENDING);
- return null;
- })
- .exceptionally(
- e ->
- {
- repository.update(transfer.getId(), SENT, FAILED);
- return null;
- });
+ Transfer.State state = transfer.getState();
+ switch (state)
+ {
+ case RECEIVED:
+ repository.store(transfer);
+ create(transfer);
+ break;
+
+ case CREATED:
+ repository.store(transfer);
+ check(transfer);
+ break;
+
+ case CHECKED:
+ repository.store(transfer);
+ // TODO: What's next...?
+ break;
+
+ default:
+ log.warn("TODO: handle {} state {}", state.foreign ? "foreign" : "domain", state);
+ }
+ }
+
+ private void check(Transfer transfer)
+ {
+ // TODO: Do some time consuming checks...
+ transfer.setState(CHECKED);
+ messagingService.send(transfer);