From 7efe0077f62cf5166dc5517697b8284e6536009a Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Tue, 20 Apr 2021 20:31:47 +0200 Subject: [PATCH 01/23] Update to work on k8s --- deployment/kubernetes/cdc-service/ftgo-cdc-service.yml | 5 ++++- .../kubernetes/stateful-services/ftgo-dynamodb-local.yml | 5 ++++- .../kubernetes/stateful-services/ftgo-kafka-deployment.yml | 5 ++++- .../kubernetes/stateful-services/ftgo-mysql-deployment.yml | 5 ++++- .../stateful-services/ftgo-zookeeper-deployment.yml | 5 ++++- .../src/deployment/kubernetes/ftgo-accounting-service.yml | 6 +++++- .../src/deployment/kubernetes/ftgo-api-gateway.yml | 6 +++++- .../src/deployment/kubernetes/ftgo-consumer-service.yml | 6 +++++- .../src/deployment/kubernetes/ftgo-kitchen-service.yml | 6 +++++- .../deployment/kubernetes/ftgo-order-history-service.yml | 6 +++++- .../src/deployment/kubernetes-prometheus/rbac.yml | 2 +- .../src/deployment/kubernetes/ftgo-order-service.yml | 6 +++++- .../src/deployment/kubernetes/ftgo-restaurant-service.yml | 6 +++++- 13 files changed, 56 insertions(+), 13 deletions(-) diff --git a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml index 449edef3..eca965c7 100644 --- a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml +++ b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-cdc-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-cdc-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-cdc-service replicas: 1 strategy: rollingUpdate: diff --git a/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml b/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml index 7413bee3..a84f8722 100644 --- a/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml +++ b/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-dynamodb-local --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-dynamodb-local labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-dynamodb-local serviceName: "ftgo-dynamodb" replicas: 1 template: diff --git a/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml b/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml index 0190b53e..91aba08f 100644 --- a/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml +++ b/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml @@ -11,11 +11,14 @@ spec: selector: role: ftgo-kafka --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-kafka spec: + selector: + matchLabels: + role: ftgo-kafka serviceName: "kafka" replicas: 1 template: diff --git a/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml b/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml index 73b98479..c71e8024 100644 --- a/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml +++ b/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml @@ -12,11 +12,14 @@ spec: selector: role: ftgo-mysql --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-mysql spec: + selector: + matchLabels: + role: ftgo-mysql serviceName: "mysql" replicas: 1 template: diff --git a/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml b/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml index 4bfadd5d..becf34df 100644 --- a/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml +++ b/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml @@ -12,11 +12,14 @@ spec: selector: role: ftgo-zookeeper --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-zookeeper spec: + selector: + matchLabels: + role: ftgo-zookeeper serviceName: "zookeeper" replicas: 1 template: diff --git a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml index 4076b11a..b9d758bd 100644 --- a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml +++ b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml @@ -9,7 +9,7 @@ spec: selector: svc: ftgo-accounting-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-accounting-service @@ -21,6 +21,10 @@ spec: rollingUpdate: maxUnavailable: 0 template: + selector: + matchLabels: + svc: ftgo-accounting-service + application: ftgo metadata: labels: svc: ftgo-accounting-service diff --git a/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml b/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml index da9a31c7..586a91e0 100644 --- a/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml +++ b/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml @@ -16,13 +16,17 @@ spec: # loadBalancerSourceRanges: # - 88.128.82.195/32 --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-api-gateway labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-api-gateway + application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml b/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml index 28a7e8a4..515c8cff 100644 --- a/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml +++ b/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml @@ -9,13 +9,17 @@ spec: selector: svc: ftgo-consumer-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-consumer-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-consumer-service + application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml index 341e6f8f..a74c19b0 100644 --- a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml +++ b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml @@ -9,13 +9,17 @@ spec: selector: svc: ftgo-kitchen-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-kitchen-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-kitchen-service + application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml b/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml index c77fe573..03764829 100644 --- a/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml +++ b/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml @@ -9,13 +9,17 @@ spec: selector: svc: ftgo-order-history-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-order-history-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-order-history-service + application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml b/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml index 47955c72..7b04506b 100644 --- a/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml +++ b/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml @@ -1,4 +1,4 @@ -apiVersion: rbac.authorization.k8s.io/v1beta1 +apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-operator diff --git a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml index 1258554b..172966cd 100644 --- a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml +++ b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml @@ -17,13 +17,17 @@ spec: selector: svc: ftgo-order-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-order-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-order-service + application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml index bf251277..78c80ab4 100644 --- a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml +++ b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml @@ -9,7 +9,7 @@ spec: selector: svc: ftgo-restaurant-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-restaurant-service @@ -17,6 +17,10 @@ metadata: application: ftgo svc: ftgo-restaurant-service spec: + selector: + matchLabels: + svc: ftgo-restaurant-service + application: ftgo replicas: 1 strategy: rollingUpdate: From a819a81ae7fe518fa39ad23f0367c72c2d45a5ba Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Wed, 21 Apr 2021 13:51:10 +0200 Subject: [PATCH 02/23] Update to work on k8s --- deployment/kubernetes/scripts/kubernetes-deploy-all.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deployment/kubernetes/scripts/kubernetes-deploy-all.sh b/deployment/kubernetes/scripts/kubernetes-deploy-all.sh index 790cef24..e0f73ec9 100755 --- a/deployment/kubernetes/scripts/kubernetes-deploy-all.sh +++ b/deployment/kubernetes/scripts/kubernetes-deploy-all.sh @@ -1,9 +1,11 @@ #! /bin/bash -e +set -vx + kubectl apply -f <(cat deployment/kubernetes/stateful-services/*.yml) ./deployment/kubernetes/scripts/kubernetes-wait-for-ready-pods.sh ftgo-mysql-0 ftgo-kafka-0 ftgo-dynamodb-local-0 ftgo-zookeeper-0 -kubectl apply -f <(cat deployment/kubernetes/cdc-services/*.yml) +kubectl apply -f <(cat deployment/kubernetes/cdc-service/*.yml) kubectl apply -f <(cat */src/deployment/kubernetes/*.yml) From cbe0d8e34a2a4bb0dc1b6b7cb15c4a00d5c85237 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Wed, 21 Apr 2021 16:14:24 +0200 Subject: [PATCH 03/23] Update deployment files --- .../src/deployment/kubernetes/ftgo-accounting-service.yml | 1 - ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml | 1 - .../src/deployment/kubernetes/ftgo-consumer-service.yml | 1 - .../src/deployment/kubernetes/ftgo-kitchen-service.yml | 1 - .../src/deployment/kubernetes/ftgo-order-history-service.yml | 1 - .../src/deployment/kubernetes/ftgo-order-service.yml | 1 - .../src/deployment/kubernetes/ftgo-restaurant-service.yml | 1 - 7 files changed, 7 deletions(-) diff --git a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml index b9d758bd..7d7038e9 100644 --- a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml +++ b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml @@ -24,7 +24,6 @@ spec: selector: matchLabels: svc: ftgo-accounting-service - application: ftgo metadata: labels: svc: ftgo-accounting-service diff --git a/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml b/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml index 586a91e0..d85da904 100644 --- a/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml +++ b/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml @@ -26,7 +26,6 @@ spec: selector: matchLabels: svc: ftgo-api-gateway - application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml b/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml index 515c8cff..c4a7d2ce 100644 --- a/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml +++ b/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml @@ -19,7 +19,6 @@ spec: selector: matchLabels: svc: ftgo-consumer-service - application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml index a74c19b0..5c531efe 100644 --- a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml +++ b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml @@ -19,7 +19,6 @@ spec: selector: matchLabels: svc: ftgo-kitchen-service - application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml b/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml index 03764829..bcea3b9a 100644 --- a/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml +++ b/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml @@ -19,7 +19,6 @@ spec: selector: matchLabels: svc: ftgo-order-history-service - application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml index 172966cd..4492fe74 100644 --- a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml +++ b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml @@ -27,7 +27,6 @@ spec: selector: matchLabels: svc: ftgo-order-service - application: ftgo replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml index 78c80ab4..8e498259 100644 --- a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml +++ b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml @@ -20,7 +20,6 @@ spec: selector: matchLabels: svc: ftgo-restaurant-service - application: ftgo replicas: 1 strategy: rollingUpdate: From 7eb32f3a84a0679cbb0a6d1ee293281f391060c9 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Wed, 21 Apr 2021 17:42:37 +0200 Subject: [PATCH 04/23] Update deployment files --- .../src/deployment/kubernetes/ftgo-accounting-service.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml index 7d7038e9..c0a5a172 100644 --- a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml +++ b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml @@ -16,14 +16,14 @@ metadata: labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-accounting-service replicas: 1 strategy: rollingUpdate: maxUnavailable: 0 template: - selector: - matchLabels: - svc: ftgo-accounting-service metadata: labels: svc: ftgo-accounting-service From 6515f63ebedf115eaf067884cafed357eb69c919 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Tue, 20 Apr 2021 20:31:47 +0200 Subject: [PATCH 05/23] Update apiVersion in K8s objects, fix path --- deployment/kubernetes/cdc-service/ftgo-cdc-service.yml | 5 ++++- deployment/kubernetes/scripts/kubernetes-deploy-all.sh | 4 +++- .../kubernetes/stateful-services/ftgo-dynamodb-local.yml | 5 ++++- .../kubernetes/stateful-services/ftgo-kafka-deployment.yml | 5 ++++- .../kubernetes/stateful-services/ftgo-mysql-deployment.yml | 5 ++++- .../stateful-services/ftgo-zookeeper-deployment.yml | 5 ++++- .../src/deployment/kubernetes/ftgo-accounting-service.yml | 5 ++++- .../src/deployment/kubernetes/ftgo-api-gateway.yml | 5 ++++- .../src/deployment/kubernetes/ftgo-consumer-service.yml | 5 ++++- .../src/deployment/kubernetes/ftgo-kitchen-service.yml | 5 ++++- .../src/deployment/kubernetes/ftgo-order-history-service.yml | 5 ++++- .../src/deployment/kubernetes-prometheus/rbac.yml | 2 +- .../src/deployment/kubernetes/ftgo-order-service.yml | 5 ++++- .../src/deployment/kubernetes/ftgo-restaurant-service.yml | 5 ++++- 14 files changed, 52 insertions(+), 14 deletions(-) diff --git a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml index 449edef3..eca965c7 100644 --- a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml +++ b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-cdc-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-cdc-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-cdc-service replicas: 1 strategy: rollingUpdate: diff --git a/deployment/kubernetes/scripts/kubernetes-deploy-all.sh b/deployment/kubernetes/scripts/kubernetes-deploy-all.sh index 790cef24..e0f73ec9 100755 --- a/deployment/kubernetes/scripts/kubernetes-deploy-all.sh +++ b/deployment/kubernetes/scripts/kubernetes-deploy-all.sh @@ -1,9 +1,11 @@ #! /bin/bash -e +set -vx + kubectl apply -f <(cat deployment/kubernetes/stateful-services/*.yml) ./deployment/kubernetes/scripts/kubernetes-wait-for-ready-pods.sh ftgo-mysql-0 ftgo-kafka-0 ftgo-dynamodb-local-0 ftgo-zookeeper-0 -kubectl apply -f <(cat deployment/kubernetes/cdc-services/*.yml) +kubectl apply -f <(cat deployment/kubernetes/cdc-service/*.yml) kubectl apply -f <(cat */src/deployment/kubernetes/*.yml) diff --git a/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml b/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml index 7413bee3..a84f8722 100644 --- a/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml +++ b/deployment/kubernetes/stateful-services/ftgo-dynamodb-local.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-dynamodb-local --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-dynamodb-local labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-dynamodb-local serviceName: "ftgo-dynamodb" replicas: 1 template: diff --git a/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml b/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml index 0190b53e..91aba08f 100644 --- a/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml +++ b/deployment/kubernetes/stateful-services/ftgo-kafka-deployment.yml @@ -11,11 +11,14 @@ spec: selector: role: ftgo-kafka --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-kafka spec: + selector: + matchLabels: + role: ftgo-kafka serviceName: "kafka" replicas: 1 template: diff --git a/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml b/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml index 73b98479..c71e8024 100644 --- a/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml +++ b/deployment/kubernetes/stateful-services/ftgo-mysql-deployment.yml @@ -12,11 +12,14 @@ spec: selector: role: ftgo-mysql --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-mysql spec: + selector: + matchLabels: + role: ftgo-mysql serviceName: "mysql" replicas: 1 template: diff --git a/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml b/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml index 4bfadd5d..becf34df 100644 --- a/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml +++ b/deployment/kubernetes/stateful-services/ftgo-zookeeper-deployment.yml @@ -12,11 +12,14 @@ spec: selector: role: ftgo-zookeeper --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: ftgo-zookeeper spec: + selector: + matchLabels: + role: ftgo-zookeeper serviceName: "zookeeper" replicas: 1 template: diff --git a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml index 4076b11a..c0a5a172 100644 --- a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml +++ b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-accounting-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-accounting-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-accounting-service replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml b/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml index da9a31c7..d85da904 100644 --- a/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml +++ b/ftgo-api-gateway/src/deployment/kubernetes/ftgo-api-gateway.yml @@ -16,13 +16,16 @@ spec: # loadBalancerSourceRanges: # - 88.128.82.195/32 --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-api-gateway labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-api-gateway replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml b/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml index 28a7e8a4..c4a7d2ce 100644 --- a/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml +++ b/ftgo-consumer-service/src/deployment/kubernetes/ftgo-consumer-service.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-consumer-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-consumer-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-consumer-service replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml index 341e6f8f..5c531efe 100644 --- a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml +++ b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-kitchen-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-kitchen-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-kitchen-service replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml b/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml index c77fe573..bcea3b9a 100644 --- a/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml +++ b/ftgo-order-history-service/src/deployment/kubernetes/ftgo-order-history-service.yml @@ -9,13 +9,16 @@ spec: selector: svc: ftgo-order-history-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-order-history-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-order-history-service replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml b/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml index 47955c72..7b04506b 100644 --- a/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml +++ b/ftgo-order-service/src/deployment/kubernetes-prometheus/rbac.yml @@ -1,4 +1,4 @@ -apiVersion: rbac.authorization.k8s.io/v1beta1 +apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-operator diff --git a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml index 1258554b..4492fe74 100644 --- a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml +++ b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml @@ -17,13 +17,16 @@ spec: selector: svc: ftgo-order-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-order-service labels: application: ftgo spec: + selector: + matchLabels: + svc: ftgo-order-service replicas: 1 strategy: rollingUpdate: diff --git a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml index bf251277..8e498259 100644 --- a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml +++ b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml @@ -9,7 +9,7 @@ spec: selector: svc: ftgo-restaurant-service --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: ftgo-restaurant-service @@ -17,6 +17,9 @@ metadata: application: ftgo svc: ftgo-restaurant-service spec: + selector: + matchLabels: + svc: ftgo-restaurant-service replicas: 1 strategy: rollingUpdate: From 0f5ecf60aa94a1913134825107d23988a6279167 Mon Sep 17 00:00:00 2001 From: Beata <bposluszny@student.agh.edu.pl> Date: Wed, 12 May 2021 22:59:41 +0200 Subject: [PATCH 06/23] create tables on startup --- .../src/main/resources/application.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ftgo-delivery-service/src/main/resources/application.properties b/ftgo-delivery-service/src/main/resources/application.properties index 1ad5dce5..1fc91833 100644 --- a/ftgo-delivery-service/src/main/resources/application.properties +++ b/ftgo-delivery-service/src/main/resources/application.properties @@ -7,6 +7,7 @@ management.endpoints.web.exposure.include=health,prometheus,beans,endpoints logging.level.org.springframework.cloud=INFO spring.jpa.generate-ddl=true +spring.jpa.properties.hibernate.hbm2ddl.auto=create logging.level.org.springframework.orm.jpa=INFO logging.level.org.hibernate.SQL=DEBUG logging.level.io.eventuate=DEBUG @@ -17,7 +18,7 @@ eventuate.database.schema=none spring.datasource.url=jdbc:mysql://${DOCKER_HOST_IP:localhost}/ftgo_delivery_service spring.datasource.username=ftgo_delivery_service_user spring.datasource.password=ftgo_delivery_service_password -spring.datasource.driver-class-name=com.mysql.jdbc.Driver +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver eventuatelocal.kafka.bootstrap.servers=${DOCKER_HOST_IP:localhost}:9092 eventuatelocal.zookeeper.connection.string=${DOCKER_HOST_IP:localhost}:2181 From 60ecfd593596d7444e467586e6c8ed45beff2c65 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Thu, 13 May 2021 17:40:47 +0200 Subject: [PATCH 07/23] Fix Kafka port number in CDC Service --- deployment/kubernetes/cdc-service/ftgo-cdc-service.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml index eca965c7..198f6b4d 100644 --- a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml +++ b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml @@ -40,7 +40,7 @@ spec: - name: JAVA_OPTS value: "-Dsun.net.inetaddr.ttl=30" - name: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS - value: ftgo-kafka:29092 + value: ftgo-kafka:9092 - name: EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING value: ftgo-zookeeper:2181 - name: EVENTUATE_CDC_PIPELINE_PIPELINE1_TYPE From 78759ff0eee04b0e3a278d9706b18a8609b25ddb Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Fri, 14 May 2021 00:00:26 +0200 Subject: [PATCH 08/23] Update database details and credentials, add Order History Service to port forwards, update CDC Service image --- .../kubernetes/cdc-service/ftgo-cdc-service.yml | 2 +- deployment/kubernetes/scripts/port-forwards.sh | 2 +- .../kubernetes/ftgo-accounting-service.yml | 14 +++++--------- .../kubernetes/ftgo-kitchen-service.yml | 14 +++++--------- .../deployment/kubernetes/ftgo-order-service.yml | 16 ++++++---------- .../kubernetes/ftgo-restaurant-service.yml | 16 ++++++---------- 6 files changed, 24 insertions(+), 40 deletions(-) diff --git a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml index 198f6b4d..c5fadb70 100644 --- a/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml +++ b/deployment/kubernetes/cdc-service/ftgo-cdc-service.yml @@ -30,7 +30,7 @@ spec: spec: containers: - name: ftgo-cdc-service - image: eventuateio/eventuate-cdc-service:0.4.0.RELEASE + image: eventuateio/eventuate-cdc-service:0.6.0.RC3 imagePullPolicy: Always ports: - containerPort: 8080 diff --git a/deployment/kubernetes/scripts/port-forwards.sh b/deployment/kubernetes/scripts/port-forwards.sh index b277763e..af72ad29 100755 --- a/deployment/kubernetes/scripts/port-forwards.sh +++ b/deployment/kubernetes/scripts/port-forwards.sh @@ -15,7 +15,7 @@ doforward() { doforward 'ftgo-accounting-service' 8085 8080 - +doforward 'ftgo-order-history-service' 8086 8080 doforward 'ftgo-consumer-service' 8081 8080 doforward 'ftgo-api-gateway' 8087 8080 doforward 'ftgo-order-service' 8082 8080 diff --git a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml index c0a5a172..536faa77 100644 --- a/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml +++ b/ftgo-accounting-service/src/deployment/kubernetes/ftgo-accounting-service.yml @@ -40,23 +40,19 @@ spec: - name: JAVA_OPTS value: "-Dsun.net.inetaddr.ttl=30" - name: SPRING_DATASOURCE_URL - value: jdbc:mysql://ftgo-mysql/eventuate + value: jdbc:mysql://ftgo-mysql/ftgo_accounting_service - name: SPRING_DATASOURCE_USERNAME - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: username + value: ftgo_accounting_service_user - name: SPRING_DATASOURCE_PASSWORD - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: password + value: ftgo_accounting_service_password - name: SPRING_DATASOURCE_DRIVER_CLASS_NAME value: com.mysql.jdbc.Driver - name: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS value: ftgo-kafka:9092 - name: EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING value: ftgo-zookeeper:2181 + - name: EVENTUATE_DATABASE_SCHEMA + value: ftgo_accounting_service livenessProbe: httpGet: path: /actuator/health diff --git a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml index 5c531efe..18df66ca 100644 --- a/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml +++ b/ftgo-kitchen-service/src/deployment/kubernetes/ftgo-kitchen-service.yml @@ -40,23 +40,19 @@ spec: - name: JAVA_OPTS value: "-Dsun.net.inetaddr.ttl=30" - name: SPRING_DATASOURCE_URL - value: jdbc:mysql://ftgo-mysql/eventuate + value: jdbc:mysql://ftgo-mysql/ftgo_kitchen_service - name: SPRING_DATASOURCE_USERNAME - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: username + value: ftgo_kitchen_service_user - name: SPRING_DATASOURCE_PASSWORD - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: password + value: ftgo_kitchen_service_password - name: SPRING_DATASOURCE_DRIVER_CLASS_NAME value: com.mysql.jdbc.Driver - name: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS value: ftgo-kafka:9092 - name: EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING value: ftgo-zookeeper:2181 + - name: EVENTUATE_DATABASE_SCHEMA + value: ftgo_kitchen_service livenessProbe: httpGet: path: /actuator/health diff --git a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml index 4492fe74..973f043b 100644 --- a/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml +++ b/ftgo-order-service/src/deployment/kubernetes/ftgo-order-service.yml @@ -46,25 +46,21 @@ spec: name: httpport env: - name: JAVA_OPTS - value: "-Dsun.net.inetaddr.ttl=30" + value: "-Dsun.net.inetaddr.ttl=30 -Xmx192m" - name: SPRING_DATASOURCE_URL - value: jdbc:mysql://ftgo-mysql/eventuate + value: jdbc:mysql://ftgo-mysql/ftgo_order_service - name: SPRING_DATASOURCE_USERNAME - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: username + value: ftgo_order_service_user - name: SPRING_DATASOURCE_PASSWORD - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: password + value: ftgo_order_service_password - name: SPRING_DATASOURCE_DRIVER_CLASS_NAME value: com.mysql.jdbc.Driver - name: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS value: ftgo-kafka:9092 - name: EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING value: ftgo-zookeeper:2181 + - name: EVENTUATE_DATABASE_SCHEMA + value: ftgo_order_service livenessProbe: httpGet: path: /actuator/health diff --git a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml index 8e498259..a8494a86 100644 --- a/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml +++ b/ftgo-restaurant-service/src/deployment/kubernetes/ftgo-restaurant-service.yml @@ -39,25 +39,21 @@ spec: name: httpport env: - name: JAVA_OPTS - value: "-Dsun.net.inetaddr.ttl=30" + value: "-Dsun.net.inetaddr.ttl=30 -Xmx192m" - name: SPRING_DATASOURCE_URL - value: jdbc:mysql://ftgo-mysql/eventuate + value: jdbc:mysql://ftgo-mysql/ftgo_restaurant_service - name: SPRING_DATASOURCE_USERNAME - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: username + value: ftgo_restaurant_service_user - name: SPRING_DATASOURCE_PASSWORD - valueFrom: - secretKeyRef: - name: ftgo-db-secret - key: password + value: ftgo_restaurant_service_password - name: SPRING_DATASOURCE_DRIVER_CLASS_NAME value: com.mysql.jdbc.Driver - name: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS value: ftgo-kafka:9092 - name: EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING value: ftgo-zookeeper:2181 + - name: EVENTUATE_DATABASE_SCHEMA + value: ftgo_restaurant_service livenessProbe: httpGet: path: /actuator/health From b50f6bc8ca5f72050f86700f6f1ad8efc5a304ba Mon Sep 17 00:00:00 2001 From: Beata <bposluszny@student.agh.edu.pl> Date: Wed, 12 May 2021 22:59:41 +0200 Subject: [PATCH 09/23] create tables on startup --- .../src/main/resources/application.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ftgo-delivery-service/src/main/resources/application.properties b/ftgo-delivery-service/src/main/resources/application.properties index 1ad5dce5..1fc91833 100644 --- a/ftgo-delivery-service/src/main/resources/application.properties +++ b/ftgo-delivery-service/src/main/resources/application.properties @@ -7,6 +7,7 @@ management.endpoints.web.exposure.include=health,prometheus,beans,endpoints logging.level.org.springframework.cloud=INFO spring.jpa.generate-ddl=true +spring.jpa.properties.hibernate.hbm2ddl.auto=create logging.level.org.springframework.orm.jpa=INFO logging.level.org.hibernate.SQL=DEBUG logging.level.io.eventuate=DEBUG @@ -17,7 +18,7 @@ eventuate.database.schema=none spring.datasource.url=jdbc:mysql://${DOCKER_HOST_IP:localhost}/ftgo_delivery_service spring.datasource.username=ftgo_delivery_service_user spring.datasource.password=ftgo_delivery_service_password -spring.datasource.driver-class-name=com.mysql.jdbc.Driver +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver eventuatelocal.kafka.bootstrap.servers=${DOCKER_HOST_IP:localhost}:9092 eventuatelocal.zookeeper.connection.string=${DOCKER_HOST_IP:localhost}:2181 From 3aed814cb8ad106da7333a60055a06f3a3bec5df Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Wed, 19 May 2021 22:18:19 +0200 Subject: [PATCH 10/23] Add consumer ID to the get endpoint --- .../ftgo/consumerservice/web/ConsumerController.java | 2 +- .../ftgo/consumerservice/web/GetConsumerResponse.java | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java index 76b2761c..36e5161b 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java @@ -26,7 +26,7 @@ public CreateConsumerResponse create(@RequestBody CreateConsumerRequest request) @RequestMapping(method= RequestMethod.GET, path="/{consumerId}") public ResponseEntity<GetConsumerResponse> get(@PathVariable long consumerId) { return consumerService.findById(consumerId) - .map(consumer -> new ResponseEntity<>(new GetConsumerResponse(consumer.getName()), HttpStatus.OK)) + .map(consumer -> new ResponseEntity<>(new GetConsumerResponse(consumer.getName(), consumerId), HttpStatus.OK)) .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); } } diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumerResponse.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumerResponse.java index 0185bb91..c712d9ec 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumerResponse.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumerResponse.java @@ -4,13 +4,22 @@ public class GetConsumerResponse extends CreateConsumerResponse { private PersonName name; + private long consumerId; public PersonName getName() { return name; } - public GetConsumerResponse(PersonName name) { + public long getConsumerId() { + return consumerId; + } + + public void setConsumerId(long consumerId) { + this.consumerId = consumerId; + } + public GetConsumerResponse(PersonName name, long consumerId) { this.name = name; + this.consumerId = consumerId; } } From fe44b0288606c6ed5e578fc868cf35ef8f31c394 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Thu, 20 May 2021 00:57:21 +0200 Subject: [PATCH 11/23] Add endpoint for getting all consumers --- .../domain/ConsumerService.java | 6 +++ .../web/ConsumerController.java | 49 +++++++++++++------ .../web/GetConsumersResponse.java | 19 +++++++ 3 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumersResponse.java diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java index 50e1bdfc..a73c39ce 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java @@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; +import java.util.List; import java.util.Optional; public class ConsumerService { @@ -33,4 +34,9 @@ public ResultWithEvents<Consumer> create(PersonName name) { public Optional<Consumer> findById(long consumerId) { return consumerRepository.findById(consumerId); } + + + public List<Consumer> getAllConsumers() { + return (List<Consumer>) consumerRepository.findAll(); + } } diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java index 36e5161b..f6267c96 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/ConsumerController.java @@ -7,26 +7,43 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import static java.util.stream.Collectors.toList; + @RestController -@RequestMapping(path="/consumers") +@RequestMapping(path = "/consumers") public class ConsumerController { - private ConsumerService consumerService; + private ConsumerService consumerService; + + public ConsumerController(ConsumerService consumerService) { + this.consumerService = consumerService; + } + + @RequestMapping(method = RequestMethod.POST) + public CreateConsumerResponse create(@RequestBody CreateConsumerRequest request) { + ResultWithEvents<Consumer> result = consumerService.create(request.getName()); + return new CreateConsumerResponse(result.result.getId()); + } - public ConsumerController(ConsumerService consumerService) { - this.consumerService = consumerService; - } + @RequestMapping(method = RequestMethod.GET, path = "/{consumerId}") + public ResponseEntity<GetConsumerResponse> get(@PathVariable long consumerId) { + return consumerService.findById(consumerId) + .map(consumer -> new ResponseEntity<>(new GetConsumerResponse(consumer.getName(), consumerId), HttpStatus.OK)) + .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } - @RequestMapping(method= RequestMethod.POST) - public CreateConsumerResponse create(@RequestBody CreateConsumerRequest request) { - ResultWithEvents<Consumer> result = consumerService.create(request.getName()); - return new CreateConsumerResponse(result.result.getId()); - } + @RequestMapping(method = RequestMethod.GET) + public ResponseEntity<GetConsumersResponse> get() { + return new ResponseEntity<>( + new GetConsumersResponse(consumerService.getAllConsumers() + .stream() + .map(this::makeGetConsumerResponse) + .collect(toList())), + HttpStatus.OK + ); + } - @RequestMapping(method= RequestMethod.GET, path="/{consumerId}") - public ResponseEntity<GetConsumerResponse> get(@PathVariable long consumerId) { - return consumerService.findById(consumerId) - .map(consumer -> new ResponseEntity<>(new GetConsumerResponse(consumer.getName(), consumerId), HttpStatus.OK)) - .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); - } + private GetConsumerResponse makeGetConsumerResponse(Consumer consumer) { + return new GetConsumerResponse(consumer.getName(), consumer.getId()); + } } diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumersResponse.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumersResponse.java new file mode 100644 index 00000000..c681d030 --- /dev/null +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/web/GetConsumersResponse.java @@ -0,0 +1,19 @@ +package net.chrisrichardson.ftgo.consumerservice.web; + +import java.util.List; + +public class GetConsumersResponse { + private List<GetConsumerResponse> consumers; + + public List<GetConsumerResponse> getConsumers() { + return consumers; + } + + public void setConsumers(List<GetConsumerResponse> consumers) { + this.consumers = consumers; + } + + public GetConsumersResponse(List<GetConsumerResponse> consumers) { + this.consumers = consumers; + } +} From c2bee97f964d4855c4d131d863b0cefb8fe761f0 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Thu, 20 May 2021 01:13:22 +0200 Subject: [PATCH 12/23] Add endpoint for getting all restaurants --- .../domain/RestaurantService.java | 5 +++++ .../web/GetRestaurantsResponse.java | 19 +++++++++++++++++++ .../web/RestaurantController.java | 10 ++++++++-- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/GetRestaurantsResponse.java diff --git a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java index ecd4ae2a..183eb120 100644 --- a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java +++ b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java @@ -5,6 +5,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Collections; +import java.util.List; import java.util.Optional; @Transactional @@ -27,4 +28,8 @@ public Restaurant create(CreateRestaurantRequest request) { public Optional<Restaurant> findById(long restaurantId) { return restaurantRepository.findById(restaurantId); } + + public List<Restaurant> getAllRestaurants() { + return (List<Restaurant>) restaurantRepository.findAll(); + } } diff --git a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/GetRestaurantsResponse.java b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/GetRestaurantsResponse.java new file mode 100644 index 00000000..b66b193a --- /dev/null +++ b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/GetRestaurantsResponse.java @@ -0,0 +1,19 @@ +package net.chrisrichardson.ftgo.restaurantservice.web; + +import java.util.List; + +public class GetRestaurantsResponse { + private List<GetRestaurantResponse> restaurants; + + public GetRestaurantsResponse(List<GetRestaurantResponse> restaurants) { + this.restaurants = restaurants; + } + + public List<GetRestaurantResponse> getRestaurants() { + return restaurants; + } + + public void setRestaurants(List<GetRestaurantResponse> restaurants) { + this.restaurants = restaurants; + } +} diff --git a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/RestaurantController.java b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/RestaurantController.java index f07f8042..432fb0fb 100644 --- a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/RestaurantController.java +++ b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/web/RestaurantController.java @@ -8,6 +8,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.stream.Collectors; + @RestController @RequestMapping(path = "/restaurants") public class RestaurantController { @@ -28,9 +30,13 @@ public ResponseEntity<GetRestaurantResponse> get(@PathVariable long restaurantId .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); } + @RequestMapping(method = RequestMethod.GET) + public ResponseEntity<GetRestaurantsResponse> get() { + return new ResponseEntity<>(new GetRestaurantsResponse(restaurantService.getAllRestaurants().stream() + .map(this::makeGetRestaurantResponse).collect(Collectors.toList())), HttpStatus.OK); + } + private GetRestaurantResponse makeGetRestaurantResponse(Restaurant r) { return new GetRestaurantResponse(r.getId(), r.getName()); } - - } From 3d47ded6859d71225431613a0bdb82cec5a3108d Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Thu, 20 May 2021 01:23:38 +0200 Subject: [PATCH 13/23] Add endpoint for getting all orders --- .../orderservice/web/GetOrdersResponse.java | 19 ++++ .../orderservice/web/OrderController.java | 90 ++++++++++--------- 2 files changed, 69 insertions(+), 40 deletions(-) create mode 100644 ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/GetOrdersResponse.java diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/GetOrdersResponse.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/GetOrdersResponse.java new file mode 100644 index 00000000..98cd66b9 --- /dev/null +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/GetOrdersResponse.java @@ -0,0 +1,19 @@ +package net.chrisrichardson.ftgo.orderservice.web; + +import java.util.List; + +public class GetOrdersResponse { + private List<GetOrderResponse> orders; + + public GetOrdersResponse(List<GetOrderResponse> orders) { + this.orders = orders; + } + + public List<GetOrderResponse> getOrders() { + return orders; + } + + public void setOrders(List<GetOrderResponse> orders) { + this.orders = orders; + } +} diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/OrderController.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/OrderController.java index 1a3c5d60..1a5afe28 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/OrderController.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/web/OrderController.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Optional; import static java.util.stream.Collectors.toList; @@ -20,55 +21,64 @@ @RequestMapping(path = "/orders") public class OrderController { - private OrderService orderService; + private OrderService orderService; - private OrderRepository orderRepository; + private OrderRepository orderRepository; - public OrderController(OrderService orderService, OrderRepository orderRepository) { - this.orderService = orderService; - this.orderRepository = orderRepository; - } + public OrderController(OrderService orderService, OrderRepository orderRepository) { + this.orderService = orderService; + this.orderRepository = orderRepository; + } - @RequestMapping(method = RequestMethod.POST) - public CreateOrderResponse create(@RequestBody CreateOrderRequest request) { - Order order = orderService.createOrder(request.getConsumerId(), - request.getRestaurantId(), - new DeliveryInformation(request.getDeliveryTime(), request.getDeliveryAddress()), - request.getLineItems().stream().map(x -> new MenuItemIdAndQuantity(x.getMenuItemId(), x.getQuantity())).collect(toList()) - ); - return new CreateOrderResponse(order.getId()); - } + @RequestMapping(method = RequestMethod.POST) + public CreateOrderResponse create(@RequestBody CreateOrderRequest request) { + Order order = orderService.createOrder(request.getConsumerId(), + request.getRestaurantId(), + new DeliveryInformation(request.getDeliveryTime(), request.getDeliveryAddress()), + request.getLineItems().stream().map(x -> new MenuItemIdAndQuantity(x.getMenuItemId(), x.getQuantity())).collect(toList()) + ); + return new CreateOrderResponse(order.getId()); + } - @RequestMapping(path = "/{orderId}", method = RequestMethod.GET) - public ResponseEntity<GetOrderResponse> getOrder(@PathVariable long orderId) { - Optional<Order> order = orderRepository.findById(orderId); - return order.map(o -> new ResponseEntity<>(makeGetOrderResponse(o), HttpStatus.OK)).orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); - } + @RequestMapping(path = "/{orderId}", method = RequestMethod.GET) + public ResponseEntity<GetOrderResponse> getOrder(@PathVariable long orderId) { + Optional<Order> order = orderRepository.findById(orderId); + return order.map(o -> new ResponseEntity<>(makeGetOrderResponse(o), HttpStatus.OK)).orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } - private GetOrderResponse makeGetOrderResponse(Order order) { - return new GetOrderResponse(order.getId(), order.getState(), order.getOrderTotal()); - } + @RequestMapping(method = RequestMethod.GET) + public ResponseEntity<GetOrdersResponse> getAll() { + List<Order> orders = (List<Order>) orderRepository.findAll(); + return new ResponseEntity<>( + new GetOrdersResponse(orders.stream().map(this::makeGetOrderResponse).collect(toList())), + HttpStatus.OK + ); + } - @RequestMapping(path = "/{orderId}/cancel", method = RequestMethod.POST) - public ResponseEntity<GetOrderResponse> cancel(@PathVariable long orderId) { - try { - Order order = orderService.cancel(orderId); - return new ResponseEntity<>(makeGetOrderResponse(order), HttpStatus.OK); - } catch (OrderNotFoundException e) { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); + private GetOrderResponse makeGetOrderResponse(Order order) { + return new GetOrderResponse(order.getId(), order.getState(), order.getOrderTotal()); } - } - - @RequestMapping(path = "/{orderId}/revise", method = RequestMethod.POST) - public ResponseEntity<GetOrderResponse> revise(@PathVariable long orderId, @RequestBody ReviseOrderRequest request) { - try { - Order order = orderService.reviseOrder(orderId, new OrderRevision(Optional.empty(), request.getRevisedOrderLineItems())); - return new ResponseEntity<>(makeGetOrderResponse(order), HttpStatus.OK); - } catch (OrderNotFoundException e) { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); + + @RequestMapping(path = "/{orderId}/cancel", method = RequestMethod.POST) + public ResponseEntity<GetOrderResponse> cancel(@PathVariable long orderId) { + try { + Order order = orderService.cancel(orderId); + return new ResponseEntity<>(makeGetOrderResponse(order), HttpStatus.OK); + } catch (OrderNotFoundException e) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @RequestMapping(path = "/{orderId}/revise", method = RequestMethod.POST) + public ResponseEntity<GetOrderResponse> revise(@PathVariable long orderId, @RequestBody ReviseOrderRequest request) { + try { + Order order = orderService.reviseOrder(orderId, new OrderRevision(Optional.empty(), request.getRevisedOrderLineItems())); + return new ResponseEntity<>(makeGetOrderResponse(order), HttpStatus.OK); + } catch (OrderNotFoundException e) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } } - } } From 8d441f284add7d0b4a320a35fbe74a4ed9543eef Mon Sep 17 00:00:00 2001 From: beata <b.heartbeats@gmail.com> Date: Thu, 20 May 2021 16:27:45 +0200 Subject: [PATCH 14/23] add balance to account --- docker-compose.yml | 4 +++ .../api/AccountLimitExceededReply.java | 4 +++ .../api/CheckAccountLimitCommand.java | 32 +++++++++++++++++++ .../accountingservice/domain/Account.java | 13 +++++++- .../domain/AccountCreatedEvent.java | 11 +++++++ .../domain/AccountLimitExceededEvent.java | 6 ++++ .../domain/AccountLimitExceededException.java | 4 +++ .../domain/AccountLimitSufficientEvent.java | 6 ++++ .../domain/AccountingService.java | 7 ++-- .../CheckAccountLimitCommandInternal.java | 31 ++++++++++++++++++ .../domain/CreateAccountCommand.java | 17 ++++++++++ .../messaging/AccountingEventConsumer.java | 3 +- .../AccountingServiceCommandHandler.java | 20 +++++++++--- .../domain/ConsumerCreated.java | 11 +++++++ .../src/main/resources/application.properties | 1 + .../AccountingServiceCommandHandlerTest.java | 2 +- ftgo-common/build.gradle | 6 ++-- .../chrisrichardson/ftgo/common/Money.java | 4 +++ .../ftgo/consumerservice/domain/Consumer.java | 3 +- .../domain/ConsumerCreated.java | 11 +++++++ .../domain/ConsumerService.java | 2 +- .../src/main/resources/application.properties | 2 +- .../AccountingServiceProxy.java | 6 ++++ .../sagas/createorder/CreateOrderSaga.java | 2 ++ .../createorder/CreateOrderSagaState.java | 6 ++++ 25 files changed, 199 insertions(+), 15 deletions(-) create mode 100644 ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/AccountLimitExceededReply.java create mode 100644 ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java create mode 100644 ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededEvent.java create mode 100644 ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededException.java create mode 100644 ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitSufficientEvent.java create mode 100644 ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java diff --git a/docker-compose.yml b/docker-compose.yml index 6ed56191..b4e94a4c 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -161,6 +161,7 @@ services: - kafka - zookeeper - cdc-service + - zipkin environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql/ftgo_accounting_service SPRING_DATASOURCE_USERNAME: ftgo_accounting_service_user @@ -169,6 +170,9 @@ services: EVENTUATELOCAL_KAFKA_BOOTSTRAP_SERVERS: kafka:29092 EVENTUATELOCAL_ZOOKEEPER_CONNECTION_STRING: zookeeper:2181 EVENTUATE_DATABASE_SCHEMA: ftgo_accounting_service + SPRING_SLEUTH_ENABLED: "true" + SPRING_SLEUTH_SAMPLER_PROBABILITY: 1 + SPRING_ZIPKIN_BASE_URL: http://zipkin:9411/ ftgo-delivery-service: build: ./ftgo-delivery-service ports: diff --git a/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/AccountLimitExceededReply.java b/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/AccountLimitExceededReply.java new file mode 100644 index 00000000..3a1bd0a7 --- /dev/null +++ b/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/AccountLimitExceededReply.java @@ -0,0 +1,4 @@ +package net.chrisrichardson.ftgo.accountservice.api; + +public class AccountLimitExceededReply { +} diff --git a/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java b/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java new file mode 100644 index 00000000..64601940 --- /dev/null +++ b/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java @@ -0,0 +1,32 @@ +package net.chrisrichardson.ftgo.accountservice.api; + +import io.eventuate.tram.commands.common.Command; +import net.chrisrichardson.ftgo.common.Money; + +public class CheckAccountLimitCommand implements Command { + + private Money money; + private Long consumerId; + private Long orderId; + + private CheckAccountLimitCommand() { + } + + public CheckAccountLimitCommand(Long consumerId, Money money, Long orderId) { + this.money = money; + this.consumerId = consumerId; + this.orderId = orderId; + } + + public Money getMoney() { + return money; + } + + public Long getConsumerId() { + return consumerId; + } + + public Long getOrderId() { + return orderId; + } +} diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java index 95af838d..d99b5d68 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java @@ -3,22 +3,33 @@ import io.eventuate.Event; import io.eventuate.ReflectiveMutableCommandProcessingAggregate; import io.eventuate.tram.sagas.eventsourcingsupport.SagaReplyRequestedEvent; +import net.chrisrichardson.ftgo.common.Money; +import java.math.BigDecimal; import java.util.Collections; import java.util.List; +import java.util.Map; import static io.eventuate.EventUtil.events; public class Account extends ReflectiveMutableCommandProcessingAggregate<Account, AccountCommand> { + private Money balance; + public List<Event> process(CreateAccountCommand command) { - return events(new AccountCreatedEvent()); + return events(new AccountCreatedEvent(command.getInitialBalance())); } public void apply(AccountCreatedEvent event) { } + public List<Event> process(CheckAccountLimitCommandInternal command) { + if(balance.isGreaterThanOrEqual(command.getMoney())){ + return events(new AccountLimitSufficientEvent()); + } + return events(new AccountLimitExceededEvent()); + } public List<Event> process(AuthorizeCommandInternal command) { return events(new AccountAuthorizedEvent()); diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java index b13bc435..97f4a970 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java @@ -1,6 +1,17 @@ package net.chrisrichardson.ftgo.accountingservice.domain; import io.eventuate.Event; +import net.chrisrichardson.ftgo.common.Money; + +import java.math.BigDecimal; public class AccountCreatedEvent implements Event { + private Money initialBalance; + + + private AccountCreatedEvent() {} + + public AccountCreatedEvent(Money initialBalance){ + this.initialBalance = initialBalance; + } } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededEvent.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededEvent.java new file mode 100644 index 00000000..74dd7f05 --- /dev/null +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededEvent.java @@ -0,0 +1,6 @@ +package net.chrisrichardson.ftgo.accountingservice.domain; + +import io.eventuate.Event; + +public class AccountLimitExceededEvent implements Event { +} diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededException.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededException.java new file mode 100644 index 00000000..1508987d --- /dev/null +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitExceededException.java @@ -0,0 +1,4 @@ +package net.chrisrichardson.ftgo.accountingservice.domain; + +public class AccountLimitExceededException extends RuntimeException { +} diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitSufficientEvent.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitSufficientEvent.java new file mode 100644 index 00000000..81c5fd95 --- /dev/null +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountLimitSufficientEvent.java @@ -0,0 +1,6 @@ +package net.chrisrichardson.ftgo.accountingservice.domain; + +import io.eventuate.Event; + +public class AccountLimitSufficientEvent implements Event { +} diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java index 4c4d1f7b..9162df98 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java @@ -3,8 +3,10 @@ import io.eventuate.sync.AggregateRepository; import io.eventuate.EntityWithIdAndVersion; import io.eventuate.SaveOptions; +import net.chrisrichardson.ftgo.common.Money; import org.springframework.beans.factory.annotation.Autowired; +import java.math.BigDecimal; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -14,8 +16,9 @@ public class AccountingService { @Autowired private AggregateRepository<Account, AccountCommand> accountRepository; - public void create(String aggregateId) { - EntityWithIdAndVersion<Account> account = accountRepository.save(new CreateAccountCommand(), + public void create(Long consumerId, String aggregateId) { + Money initialBalance = new Money(100); + EntityWithIdAndVersion<Account> account = accountRepository.save(new CreateAccountCommand(consumerId, initialBalance), Optional.of(new SaveOptions().withId(aggregateId))); } } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java new file mode 100644 index 00000000..49e0a6a4 --- /dev/null +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java @@ -0,0 +1,31 @@ +package net.chrisrichardson.ftgo.accountingservice.domain; + +import io.eventuate.tram.commands.common.Command; +import net.chrisrichardson.ftgo.common.Money; + +public class CheckAccountLimitCommandInternal implements AccountCommand, Command { + private Money money; + private String consumerId; + private String orderId; + + private CheckAccountLimitCommandInternal() { + } + + public CheckAccountLimitCommandInternal(String consumerId, Money money, String orderId) { + this.money = money; + this.consumerId = consumerId; + this.orderId = orderId; + } + + public Money getMoney() { + return money; + } + + public String getConsumerId() { + return consumerId; + } + + public String getOrderId() { + return orderId; + } +} diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java index 1074d7a8..b51c570a 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java @@ -1,4 +1,21 @@ package net.chrisrichardson.ftgo.accountingservice.domain; +import net.chrisrichardson.ftgo.common.Money; + +import java.math.BigDecimal; + public class CreateAccountCommand implements AccountCommand { + private Long customerId; + private Money initialBalance; + + private CreateAccountCommand(){} + + public CreateAccountCommand(Long customerId, Money initialBalance){ + this.customerId = customerId; + this.initialBalance = initialBalance; + } + + public Money getInitialBalance() { + return initialBalance; + } } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java index 314ad3bc..cabbdf40 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java @@ -21,7 +21,8 @@ public DomainEventHandlers domainEventHandlers() { } private void createAccount(DomainEventEnvelope<ConsumerCreated> dee) { - accountingService.create(dee.getAggregateId()); + ConsumerCreated ccEvent = dee.getEvent(); + accountingService.create(ccEvent.getConsumerId(), dee.getAggregateId()); } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java index 4f3fac48..5d39f70f 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java @@ -5,10 +5,7 @@ import io.eventuate.tram.commands.consumer.CommandMessage; import io.eventuate.tram.sagas.participant.SagaCommandHandlersBuilder; import net.chrisrichardson.ftgo.accountingservice.domain.*; -import net.chrisrichardson.ftgo.accountservice.api.AccountDisabledReply; -import net.chrisrichardson.ftgo.accountservice.api.AuthorizeCommand; -import net.chrisrichardson.ftgo.accountservice.api.ReverseAuthorizationCommand; -import net.chrisrichardson.ftgo.accountservice.api.ReviseAuthorization; +import net.chrisrichardson.ftgo.accountservice.api.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +24,7 @@ public CommandHandlers commandHandlers() { return SagaCommandHandlersBuilder .fromChannel("accountingService") .onMessage(AuthorizeCommand.class, this::authorize) + .onMessage(CheckAccountLimitCommand.class, this::checkAccountLimit) .onMessage(ReverseAuthorizationCommand.class, this::reverseAuthorization) .onMessage(ReviseAuthorization.class, this::reviseAuthorization) .build(); @@ -44,6 +42,17 @@ public void authorize(CommandMessage<AuthorizeCommand> cm) { } + public void checkAccountLimit(CommandMessage<CheckAccountLimitCommand> cm){ + CheckAccountLimitCommand command = cm.getCommand(); + + accountRepository.update(Long.toString(command.getConsumerId()), + makeCheckAccountLimitCommandInternal(command), + replyingTo(cm) + .catching(AccountLimitExceededException.class, () -> withFailure(new AccountLimitExceededReply())) + .build()); + + } + public void reverseAuthorization(CommandMessage<ReverseAuthorizationCommand> cm) { ReverseAuthorizationCommand command = cm.getCommand(); @@ -71,6 +80,9 @@ public void reviseAuthorization(CommandMessage<ReviseAuthorization> cm) { private AuthorizeCommandInternal makeAuthorizeCommandInternal(AuthorizeCommand command) { return new AuthorizeCommandInternal(Long.toString(command.getConsumerId()), Long.toString(command.getOrderId()), command.getOrderTotal()); } + private CheckAccountLimitCommandInternal makeCheckAccountLimitCommandInternal(CheckAccountLimitCommand command) { + return new CheckAccountLimitCommandInternal(Long.toString(command.getConsumerId()), command.getMoney(), Long.toString(command.getOrderId())); + } private ReverseAuthorizationCommandInternal makeReverseAuthorizeCommandInternal(ReverseAuthorizationCommand command) { return new ReverseAuthorizationCommandInternal(Long.toString(command.getConsumerId()), Long.toString(command.getOrderId()), command.getOrderTotal()); } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java index 5afb2de5..e90f4064 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java @@ -3,4 +3,15 @@ import io.eventuate.tram.events.common.DomainEvent; public class ConsumerCreated implements DomainEvent { + private Long consumerId; + private ConsumerCreated() { + } + + public ConsumerCreated(Long consumerId) { + this.consumerId = consumerId; + } + + public Long getConsumerId() { + return consumerId; + } } diff --git a/ftgo-accounting-service/src/main/resources/application.properties b/ftgo-accounting-service/src/main/resources/application.properties index 70c4dcd6..6f7394c0 100644 --- a/ftgo-accounting-service/src/main/resources/application.properties +++ b/ftgo-accounting-service/src/main/resources/application.properties @@ -1,4 +1,5 @@ spring.application.name=ftgo-accounting-service +spring.sleuth.sampler.probability=1.0 management.endpoint.health.show-details=always diff --git a/ftgo-accounting-service/src/test/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandlerTest.java b/ftgo-accounting-service/src/test/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandlerTest.java index 702b2f06..3c390eda 100644 --- a/ftgo-accounting-service/src/test/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandlerTest.java +++ b/ftgo-accounting-service/src/test/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandlerTest.java @@ -71,7 +71,7 @@ public void shouldReply() { long consumerId = System.currentTimeMillis(); long orderId = 102L; - domainEventPublisher.publish("net.chrisrichardson.ftgo.consumerservice.domain.Consumer", consumerId, Collections.singletonList(new ConsumerCreated())); + domainEventPublisher.publish("net.chrisrichardson.ftgo.consumerservice.domain.Consumer", consumerId, Collections.singletonList(new ConsumerCreated(consumerId))); Eventually.eventually(() -> { accountRepository.find(Long.toString(consumerId)); diff --git a/ftgo-common/build.gradle b/ftgo-common/build.gradle index 51d5ccc1..04a17d65 100644 --- a/ftgo-common/build.gradle +++ b/ftgo-common/build.gradle @@ -13,8 +13,8 @@ dependencies { compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.7" - runtime "javax.xml.bind:jaxb-api:2.2.11" - runtime "com.sun.xml.bind:jaxb-core:2.2.11" - runtime "com.sun.xml.bind:jaxb-impl:2.2.11" + runtime "javax.xml.bind:jaxb-api:2.3.0" + runtime "com.sun.xml.bind:jaxb-core:2.3.0" + runtime "com.sun.xml.bind:jaxb-impl:2.3.0" runtime "javax.activation:activation:1.1.1" } diff --git a/ftgo-common/src/main/java/net/chrisrichardson/ftgo/common/Money.java b/ftgo-common/src/main/java/net/chrisrichardson/ftgo/common/Money.java index 0f75ec53..b413d419 100644 --- a/ftgo-common/src/main/java/net/chrisrichardson/ftgo/common/Money.java +++ b/ftgo-common/src/main/java/net/chrisrichardson/ftgo/common/Money.java @@ -61,6 +61,10 @@ public Money add(Money delta) { return new Money(amount.add(delta.amount)); } + public Money subtract(Money other) { + return new Money(amount.subtract(other.amount)); + } + public boolean isGreaterThanOrEqual(Money other) { return amount.compareTo(other.amount) >= 0; } diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java index 5206e643..92612ace 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java @@ -45,6 +45,7 @@ public PersonName getName() { } public static ResultWithEvents<Consumer> create(PersonName name) { - return new ResultWithEvents<>(new Consumer(name), new ConsumerCreated()); + Consumer newConsumer = new Consumer(name); + return new ResultWithEvents<>(newConsumer, new ConsumerCreated(newConsumer.getId())); } } diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java index 5afb2de5..a83bd4b0 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java @@ -3,4 +3,15 @@ import io.eventuate.tram.events.common.DomainEvent; public class ConsumerCreated implements DomainEvent { + private Long consumerId; + + private ConsumerCreated(){} + + public ConsumerCreated(Long id){ + this.consumerId = id; + } + + public Long getConsumerId() { + return consumerId; + } } diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java index 50e1bdfc..ebf525fd 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerService.java @@ -19,7 +19,7 @@ public class ConsumerService { public void validateOrderForConsumer(long consumerId, Money orderTotal) { Optional<Consumer> consumer = consumerRepository.findById(consumerId); - consumer.orElseThrow(ConsumerNotFoundException::new).validateOrderByConsumer(orderTotal); + consumer.orElseThrow(ConsumerNotFoundException::new);//.validateOrderByConsumer(orderTotal); } @Transactional diff --git a/ftgo-delivery-service/src/main/resources/application.properties b/ftgo-delivery-service/src/main/resources/application.properties index 1fc91833..8a2f7ee8 100644 --- a/ftgo-delivery-service/src/main/resources/application.properties +++ b/ftgo-delivery-service/src/main/resources/application.properties @@ -18,7 +18,7 @@ eventuate.database.schema=none spring.datasource.url=jdbc:mysql://${DOCKER_HOST_IP:localhost}/ftgo_delivery_service spring.datasource.username=ftgo_delivery_service_user spring.datasource.password=ftgo_delivery_service_password -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.driver-class-name=com.mysql.jdbc.Driver eventuatelocal.kafka.bootstrap.servers=${DOCKER_HOST_IP:localhost}:9092 eventuatelocal.zookeeper.connection.string=${DOCKER_HOST_IP:localhost}:2181 diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagaparticipants/AccountingServiceProxy.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagaparticipants/AccountingServiceProxy.java index f360939b..ce3c92bf 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagaparticipants/AccountingServiceProxy.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagaparticipants/AccountingServiceProxy.java @@ -5,6 +5,7 @@ import io.eventuate.tram.sagas.simpledsl.CommandEndpointBuilder; import net.chrisrichardson.ftgo.accountservice.api.AccountingServiceChannels; import net.chrisrichardson.ftgo.accountservice.api.AuthorizeCommand; +import net.chrisrichardson.ftgo.accountservice.api.CheckAccountLimitCommand; public class AccountingServiceProxy { @@ -14,4 +15,9 @@ public class AccountingServiceProxy { .withReply(Success.class) .build(); + public final CommandEndpoint<CheckAccountLimitCommand> checkAccountLimit= CommandEndpointBuilder + .forCommand(CheckAccountLimitCommand.class) + .withChannel(AccountingServiceChannels.accountingServiceChannel) + .withReply(Success.class) + .build(); } diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSaga.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSaga.java index b7944eeb..9fc63040 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSaga.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSaga.java @@ -21,6 +21,8 @@ public CreateOrderSaga(OrderServiceProxy orderService, ConsumerServiceProxy cons .withCompensation(orderService.reject, CreateOrderSagaState::makeRejectOrderCommand) .step() .invokeParticipant(consumerService.validateOrder, CreateOrderSagaState::makeValidateOrderByConsumerCommand) + .step() + .invokeParticipant(accountingService.checkAccountLimit, CreateOrderSagaState::makeCheckAccountLimitCommand) .step() .invokeParticipant(kitchenService.create, CreateOrderSagaState::makeCreateTicketCommand) .onReply(CreateTicketReply.class, CreateOrderSagaState::handleCreateTicketReply) diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java index 274cea75..b8d3bf37 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java @@ -1,6 +1,7 @@ package net.chrisrichardson.ftgo.orderservice.sagas.createorder; import net.chrisrichardson.ftgo.accountservice.api.AuthorizeCommand; +import net.chrisrichardson.ftgo.accountservice.api.CheckAccountLimitCommand; import net.chrisrichardson.ftgo.consumerservice.api.ValidateOrderByConsumer; import net.chrisrichardson.ftgo.orderservice.api.events.OrderDetails; import net.chrisrichardson.ftgo.orderservice.api.events.OrderLineItem; @@ -101,6 +102,11 @@ ValidateOrderByConsumer makeValidateOrderByConsumerCommand() { return x; } + CheckAccountLimitCommand makeCheckAccountLimitCommand() { + CheckAccountLimitCommand x = new CheckAccountLimitCommand(getOrderDetails().getConsumerId(), getOrderDetails().getOrderTotal(), getOrderId()); + return x; + } + AuthorizeCommand makeAuthorizeCommand() { return new AuthorizeCommand().withConsumerId(getOrderDetails().getConsumerId()).withOrderId(getOrderId()).withOrderTotal(getOrderDetails().getOrderTotal().asString()); } From fa5f31ee03612fc60f59d49b8d738c98515ecc49 Mon Sep 17 00:00:00 2001 From: beata <b.heartbeats@gmail.com> Date: Thu, 20 May 2021 20:37:02 +0200 Subject: [PATCH 15/23] throw exception when account limit exceeds --- .../ftgo/accountingservice/domain/Account.java | 9 ++++++++- .../sagas/createorder/CreateOrderSagaState.java | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java index d99b5d68..aa234c16 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java @@ -28,7 +28,8 @@ public List<Event> process(CheckAccountLimitCommandInternal command) { if(balance.isGreaterThanOrEqual(command.getMoney())){ return events(new AccountLimitSufficientEvent()); } - return events(new AccountLimitExceededEvent()); + //return events(new AccountLimitExceededEvent()); + throw new AccountLimitExceededException(); } public List<Event> process(AuthorizeCommandInternal command) { @@ -46,6 +47,12 @@ public void apply(AccountAuthorizedEvent event) { } + public void apply(AccountLimitSufficientEvent event) { + } + + public void apply(AccountLimitExceededEvent event) { + } + public void apply(SagaReplyRequestedEvent event) { // TODO - need a way to not need this method } diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java index b8d3bf37..3e386b61 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java @@ -103,8 +103,7 @@ ValidateOrderByConsumer makeValidateOrderByConsumerCommand() { } CheckAccountLimitCommand makeCheckAccountLimitCommand() { - CheckAccountLimitCommand x = new CheckAccountLimitCommand(getOrderDetails().getConsumerId(), getOrderDetails().getOrderTotal(), getOrderId()); - return x; + return new CheckAccountLimitCommand(getOrderDetails().getConsumerId(), getOrderDetails().getOrderTotal(), getOrderId()); } AuthorizeCommand makeAuthorizeCommand() { From 1de764a96b447fd56d3ef5ce5687b79861c33ab8 Mon Sep 17 00:00:00 2001 From: beata <b.heartbeats@gmail.com> Date: Fri, 21 May 2021 14:00:16 +0200 Subject: [PATCH 16/23] set initial balance --- .../ftgo/accountingservice/domain/Account.java | 2 +- .../ftgo/accountingservice/domain/AccountCreatedEvent.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java index aa234c16..440a97e7 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java @@ -21,7 +21,7 @@ public List<Event> process(CreateAccountCommand command) { } public void apply(AccountCreatedEvent event) { - + this.balance = event.getInitialBalance(); } public List<Event> process(CheckAccountLimitCommandInternal command) { diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java index 97f4a970..e3a4d865 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java @@ -14,4 +14,8 @@ private AccountCreatedEvent() {} public AccountCreatedEvent(Money initialBalance){ this.initialBalance = initialBalance; } + + public Money getInitialBalance() { + return initialBalance; + } } From f2c794d470b0b4d831e2ced24be9ff7bddb065f1 Mon Sep 17 00:00:00 2001 From: beataposluszny <b.hertbeats@gmail.com> Date: Tue, 25 May 2021 22:37:51 +0200 Subject: [PATCH 17/23] remove bintray from dependencies as repo does not exist --- build.gradle | 5 +++-- ftgo-order-service/build.gradle | 5 +++-- .../ftgo/orderservice/main/OrderServiceMain.java | 10 +++++----- gradle.properties | 4 +++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 0dc4da43..34b4a4a1 100644 --- a/build.gradle +++ b/build.gradle @@ -30,10 +30,11 @@ subprojects { group = "net.chrisrichardson.ftgo" repositories { - eventuateMavenRepoUrl.split('[ ,]').each { repoUrl -> maven { url repoUrl.trim() } } - mavenCentral() jcenter() + eventuateMavenRepoUrl.split('[ ,]').each { repoUrl -> maven { url repoUrl.trim() } } + + maven { url 'https://jitpack.io' diff --git a/ftgo-order-service/build.gradle b/ftgo-order-service/build.gradle index 883c11d7..36f2d0f5 100644 --- a/ftgo-order-service/build.gradle +++ b/ftgo-order-service/build.gradle @@ -131,6 +131,7 @@ dependencies { compile project(":common-swagger") compile project(":ftgo-common-jpa") + compile 'org.jetbrains:annotations:13.0' compile "io.eventuate.tram.core:eventuate-tram-aggregate-domain-events:$eventuateTramVersion" compile "io.eventuate.tram.core:eventuate-tram-spring-jdbc-kafka:$eventuateTramVersion" compile "io.eventuate.tram.core:eventuate-tram-spring-commands:$eventuateTramVersion" @@ -154,8 +155,8 @@ dependencies { compile "io.grpc:grpc-protobuf:${grpcVersion}" compile "io.grpc:grpc-stub:${grpcVersion}" - compile "io.microservices.tools.canvas:microservice-canvas-springmvc:$microserviceCanvasVersion" - compile "io.microservices.tools.canvas:microservice-canvas-extractor-tram-sagas:$microserviceCanvasVersion" + //compile "io.microservices.tools.canvas:microservice-canvas-springmvc:$microserviceCanvasVersion" + //compile "io.microservices.tools.canvas:microservice-canvas-extractor-tram-sagas:$microserviceCanvasVersion" compile "io.eventuate.tram.core:eventuate-tram-spring-messaging:$eventuateTramVersion" compile "io.eventuate.tram.sagas:eventuate-tram-sagas-spring-orchestration:$eventuateTramSagasVersion" diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java index 9249122c..3479bb7a 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java @@ -1,8 +1,8 @@ package net.chrisrichardson.ftgo.orderservice.main; import io.eventuate.tram.spring.jdbckafka.TramJdbcKafkaConfiguration; -import io.microservices.canvas.extractor.spring.annotations.ServiceDescription; -import io.microservices.canvas.springmvc.MicroserviceCanvasWebConfiguration; +//import io.microservices.canvas.extractor.spring.annotations.ServiceDescription; +//import io.microservices.canvas.springmvc.MicroserviceCanvasWebConfiguration; import net.chrisrichardson.eventstore.examples.customersandorders.commonswagger.CommonSwaggerConfiguration; import net.chrisrichardson.ftgo.orderservice.grpc.GrpcConfiguration; import net.chrisrichardson.ftgo.orderservice.messaging.OrderServiceMessagingConfiguration; @@ -14,9 +14,9 @@ @SpringBootApplication @Import({OrderWebConfiguration.class, OrderCommandHandlersConfiguration.class, OrderServiceMessagingConfiguration.class, - TramJdbcKafkaConfiguration.class, CommonSwaggerConfiguration.class, GrpcConfiguration.class, - MicroserviceCanvasWebConfiguration.class}) -@ServiceDescription(description="Manages Orders", capabilities = "Order Management") + TramJdbcKafkaConfiguration.class, CommonSwaggerConfiguration.class, GrpcConfiguration.class/*, + MicroserviceCanvasWebConfiguration.class*/}) +//@ServiceDescription(description="Manages Orders", capabilities = "Order Management") public class OrderServiceMain { public static void main(String[] args) { diff --git a/gradle.properties b/gradle.properties index 96079472..60f1fa8f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,9 @@ deployUrl=file:///Users/cer/.m2/testdeploy -eventuateMavenRepoUrl=https://dl.bintray.com/eventuateio-oss/eventuate-maven-release,https://dl.bintray.com/eventuateio-oss/eventuate-maven-milestone,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-release,file:///Users/cer/.m2/testdeploy,https://dl.bintray.com/eventuateio-oss/eventuate-maven-rc,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-rc,https://snapshots.repositories.eventuate.io/repository +#eventuateMavenRepoUrl=https://dl.bintray.com/eventuateio-oss/eventuate-maven-release,https://dl.bintray.com/eventuateio-oss/eventuate-maven-milestone,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-release,file:///Users/cer/.m2/testdeploy,https://dl.bintray.com/eventuateio-oss/eventuate-maven-rc,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-rc,https://snapshots.repositories.eventuate.io/repository +eventuateMavenRepoUrl=file:///Users/cer/.m2/testdeploy,https://snapshots.repositories.eventuate.io/repository + springBootVersion=2.1.1.RELEASE restAssuredVersion=2.9.0 From 0c596ffc189833ea32f86018ff16f49e2fa99e6f Mon Sep 17 00:00:00 2001 From: beataposluszny <b.hertbeats@gmail.com> Date: Tue, 25 May 2021 22:37:51 +0200 Subject: [PATCH 18/23] remove bintray from dependencies as repo does not exist --- build.gradle | 5 +++-- ftgo-order-service/build.gradle | 5 +++-- .../ftgo/orderservice/main/OrderServiceMain.java | 10 +++++----- gradle.properties | 4 +++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 0dc4da43..34b4a4a1 100644 --- a/build.gradle +++ b/build.gradle @@ -30,10 +30,11 @@ subprojects { group = "net.chrisrichardson.ftgo" repositories { - eventuateMavenRepoUrl.split('[ ,]').each { repoUrl -> maven { url repoUrl.trim() } } - mavenCentral() jcenter() + eventuateMavenRepoUrl.split('[ ,]').each { repoUrl -> maven { url repoUrl.trim() } } + + maven { url 'https://jitpack.io' diff --git a/ftgo-order-service/build.gradle b/ftgo-order-service/build.gradle index 883c11d7..36f2d0f5 100644 --- a/ftgo-order-service/build.gradle +++ b/ftgo-order-service/build.gradle @@ -131,6 +131,7 @@ dependencies { compile project(":common-swagger") compile project(":ftgo-common-jpa") + compile 'org.jetbrains:annotations:13.0' compile "io.eventuate.tram.core:eventuate-tram-aggregate-domain-events:$eventuateTramVersion" compile "io.eventuate.tram.core:eventuate-tram-spring-jdbc-kafka:$eventuateTramVersion" compile "io.eventuate.tram.core:eventuate-tram-spring-commands:$eventuateTramVersion" @@ -154,8 +155,8 @@ dependencies { compile "io.grpc:grpc-protobuf:${grpcVersion}" compile "io.grpc:grpc-stub:${grpcVersion}" - compile "io.microservices.tools.canvas:microservice-canvas-springmvc:$microserviceCanvasVersion" - compile "io.microservices.tools.canvas:microservice-canvas-extractor-tram-sagas:$microserviceCanvasVersion" + //compile "io.microservices.tools.canvas:microservice-canvas-springmvc:$microserviceCanvasVersion" + //compile "io.microservices.tools.canvas:microservice-canvas-extractor-tram-sagas:$microserviceCanvasVersion" compile "io.eventuate.tram.core:eventuate-tram-spring-messaging:$eventuateTramVersion" compile "io.eventuate.tram.sagas:eventuate-tram-sagas-spring-orchestration:$eventuateTramSagasVersion" diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java index 9249122c..3479bb7a 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/main/OrderServiceMain.java @@ -1,8 +1,8 @@ package net.chrisrichardson.ftgo.orderservice.main; import io.eventuate.tram.spring.jdbckafka.TramJdbcKafkaConfiguration; -import io.microservices.canvas.extractor.spring.annotations.ServiceDescription; -import io.microservices.canvas.springmvc.MicroserviceCanvasWebConfiguration; +//import io.microservices.canvas.extractor.spring.annotations.ServiceDescription; +//import io.microservices.canvas.springmvc.MicroserviceCanvasWebConfiguration; import net.chrisrichardson.eventstore.examples.customersandorders.commonswagger.CommonSwaggerConfiguration; import net.chrisrichardson.ftgo.orderservice.grpc.GrpcConfiguration; import net.chrisrichardson.ftgo.orderservice.messaging.OrderServiceMessagingConfiguration; @@ -14,9 +14,9 @@ @SpringBootApplication @Import({OrderWebConfiguration.class, OrderCommandHandlersConfiguration.class, OrderServiceMessagingConfiguration.class, - TramJdbcKafkaConfiguration.class, CommonSwaggerConfiguration.class, GrpcConfiguration.class, - MicroserviceCanvasWebConfiguration.class}) -@ServiceDescription(description="Manages Orders", capabilities = "Order Management") + TramJdbcKafkaConfiguration.class, CommonSwaggerConfiguration.class, GrpcConfiguration.class/*, + MicroserviceCanvasWebConfiguration.class*/}) +//@ServiceDescription(description="Manages Orders", capabilities = "Order Management") public class OrderServiceMain { public static void main(String[] args) { diff --git a/gradle.properties b/gradle.properties index 96079472..60f1fa8f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,9 @@ deployUrl=file:///Users/cer/.m2/testdeploy -eventuateMavenRepoUrl=https://dl.bintray.com/eventuateio-oss/eventuate-maven-release,https://dl.bintray.com/eventuateio-oss/eventuate-maven-milestone,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-release,file:///Users/cer/.m2/testdeploy,https://dl.bintray.com/eventuateio-oss/eventuate-maven-rc,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-rc,https://snapshots.repositories.eventuate.io/repository +#eventuateMavenRepoUrl=https://dl.bintray.com/eventuateio-oss/eventuate-maven-release,https://dl.bintray.com/eventuateio-oss/eventuate-maven-milestone,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-release,file:///Users/cer/.m2/testdeploy,https://dl.bintray.com/eventuateio-oss/eventuate-maven-rc,https://dl.bintray.com/eventuateio-oss/microservice-canvas-tools-rc,https://snapshots.repositories.eventuate.io/repository +eventuateMavenRepoUrl=file:///Users/cer/.m2/testdeploy,https://snapshots.repositories.eventuate.io/repository + springBootVersion=2.1.1.RELEASE restAssuredVersion=2.9.0 From 47fea1cfa7a50895f46fef1fd2904a4b54a06b84 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Wed, 26 May 2021 21:05:41 +0200 Subject: [PATCH 19/23] Implement restaurant capacity --- .../kitchenservice/domain/KitchenService.java | 15 ++++++++++-- .../kitchenservice/domain/Restaurant.java | 14 ++++++++++- .../RestaurantCapacityExceededException.java | 4 ++++ .../KitchenServiceCommandHandler.java | 3 ++- .../KitchenServiceEventConsumer.java | 2 +- ...KitchenServiceInMemoryIntegrationTest.java | 2 +- .../orderservice/api/events/OrderState.java | 1 + .../messages/RestaurantCreated.json | 3 +++ .../DeliveryserviceMessagingBase.java | 4 ++-- .../domain/CreateRestaurantRequest.java | 13 +++++++++- .../restaurantservice/domain/Restaurant.java | 24 +++++++++++++------ .../domain/RestaurantService.java | 4 ++-- .../events/RestaurantCreated.java | 13 +++++++++- .../RestaurantCreatedSerializationTest.java | 2 +- 14 files changed, 84 insertions(+), 20 deletions(-) create mode 100644 ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/RestaurantCapacityExceededException.java diff --git a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java index f28a98b3..ba209dd7 100644 --- a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java +++ b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java @@ -3,7 +3,10 @@ import io.eventuate.tram.events.aggregates.ResultWithDomainEvents; import net.chrisrichardson.ftgo.common.RevisedOrderLineItem; import net.chrisrichardson.ftgo.kitchenservice.api.TicketDetails; +import net.chrisrichardson.ftgo.kitchenservice.api.TicketLineItem; import net.chrisrichardson.ftgo.kitchenservice.api.events.TicketDomainEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -22,8 +25,10 @@ public class KitchenService { @Autowired private RestaurantRepository restaurantRepository; - public void createMenu(long id, RestaurantMenu menu) { - Restaurant restaurant = new Restaurant(id, menu.getMenuItems()); + private Logger logger = LoggerFactory.getLogger(getClass()); + + public void createMenu(long id, RestaurantMenu menu, long efficiency) { + Restaurant restaurant = new Restaurant(id, menu.getMenuItems(), efficiency); restaurantRepository.save(restaurant); } @@ -34,6 +39,12 @@ public void reviseMenu(long ticketId, RestaurantMenu revisedMenu) { } public Ticket createTicket(long restaurantId, Long ticketId, TicketDetails ticketDetails) { + if (restaurantRepository.findById(restaurantId).isPresent() && ticketDetails.getLineItems().stream().map(TicketLineItem::getQuantity).reduce(Integer::sum).isPresent() && + (restaurantRepository.findById(restaurantId).get().getEfficiency() < ticketDetails.getLineItems().stream().map(TicketLineItem::getQuantity).reduce(Integer::sum).get())) { + logger.info("COS INNEGO NIZ DUPA"); + throw new RestaurantCapacityExceededException(); + } + logger.info("DUPA2"); ResultWithDomainEvents<Ticket, TicketDomainEvent> rwe = Ticket.create(restaurantId, ticketId, ticketDetails); ticketRepository.save(rwe.result); domainEventPublisher.publish(rwe.result, rwe.events); diff --git a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/Restaurant.java b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/Restaurant.java index a1786f55..b3426669 100644 --- a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/Restaurant.java +++ b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/Restaurant.java @@ -26,12 +26,23 @@ public class Restaurant { @CollectionTable(name = "kitchen_service_restaurant_menu_items") private List<MenuItem> menuItems; + public Long getEfficiency() { + return efficiency; + } + + public void setEfficiency(Long efficiency) { + this.efficiency = efficiency; + } + + private Long efficiency; + private Restaurant() { } - public Restaurant(long id, List<MenuItem> menuItems) { + public Restaurant(long id, List<MenuItem> menuItems, long efficiency) { this.id = id; this.menuItems = menuItems; + this.efficiency = efficiency; } public List<DomainEvent> reviseMenu(RestaurantMenu revisedMenu) { @@ -40,6 +51,7 @@ public List<DomainEvent> reviseMenu(RestaurantMenu revisedMenu) { public void verifyRestaurantDetails(TicketDetails ticketDetails) { // TODO - implement me + } public Long getId() { diff --git a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/RestaurantCapacityExceededException.java b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/RestaurantCapacityExceededException.java new file mode 100644 index 00000000..a57eb64f --- /dev/null +++ b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/RestaurantCapacityExceededException.java @@ -0,0 +1,4 @@ +package net.chrisrichardson.ftgo.kitchenservice.domain; + +public class RestaurantCapacityExceededException extends RuntimeException { +} diff --git a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceCommandHandler.java b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceCommandHandler.java index f5172f1f..cf8113bb 100644 --- a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceCommandHandler.java +++ b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceCommandHandler.java @@ -5,6 +5,7 @@ import io.eventuate.tram.messaging.common.Message; import io.eventuate.tram.sagas.participant.SagaCommandHandlersBuilder; import net.chrisrichardson.ftgo.kitchenservice.api.*; +import net.chrisrichardson.ftgo.kitchenservice.domain.RestaurantCapacityExceededException; import net.chrisrichardson.ftgo.kitchenservice.domain.RestaurantDetailsVerificationException; import net.chrisrichardson.ftgo.kitchenservice.domain.Ticket; import net.chrisrichardson.ftgo.kitchenservice.domain.KitchenService; @@ -48,7 +49,7 @@ private Message createTicket(CommandMessage<CreateTicket> Ticket ticket = kitchenService.createTicket(restaurantId, ticketId, ticketDetails); CreateTicketReply reply = new CreateTicketReply(ticket.getId()); return withLock(Ticket.class, ticket.getId()).withSuccess(reply); - } catch (RestaurantDetailsVerificationException e) { + } catch (RestaurantDetailsVerificationException | RestaurantCapacityExceededException e) { return withFailure(); } } diff --git a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceEventConsumer.java b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceEventConsumer.java index 4c916ea4..c708436a 100644 --- a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceEventConsumer.java +++ b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceEventConsumer.java @@ -27,7 +27,7 @@ private void createMenu(DomainEventEnvelope<RestaurantCreated> de) { String restaurantIds = de.getAggregateId(); long id = Long.parseLong(restaurantIds); RestaurantMenu menu = new RestaurantMenu(RestaurantEventMapper.toMenuItems(de.getEvent().getMenu().getMenuItems())); - kitchenService.createMenu(id, menu); + kitchenService.createMenu(id, menu, de.getEvent().getEfficiency()); } public void reviseMenu(DomainEventEnvelope<RestaurantMenuRevised> de) { diff --git a/ftgo-kitchen-service/src/test/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenServiceInMemoryIntegrationTest.java b/ftgo-kitchen-service/src/test/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenServiceInMemoryIntegrationTest.java index edb12e4b..d92be2e8 100644 --- a/ftgo-kitchen-service/src/test/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenServiceInMemoryIntegrationTest.java +++ b/ftgo-kitchen-service/src/test/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenServiceInMemoryIntegrationTest.java @@ -71,7 +71,7 @@ private String baseUrl(String path) { public void shouldCreateTicket() { long restaurantId = System.currentTimeMillis(); - Restaurant restaurant = new Restaurant(restaurantId, Collections.emptyList()); + Restaurant restaurant = new Restaurant(restaurantId, Collections.emptyList(), 50); restaurantRepository.save(restaurant); diff --git a/ftgo-order-service-api/src/main/java/net/chrisrichardson/ftgo/orderservice/api/events/OrderState.java b/ftgo-order-service-api/src/main/java/net/chrisrichardson/ftgo/orderservice/api/events/OrderState.java index f3cb8d86..eb71444a 100644 --- a/ftgo-order-service-api/src/main/java/net/chrisrichardson/ftgo/orderservice/api/events/OrderState.java +++ b/ftgo-order-service-api/src/main/java/net/chrisrichardson/ftgo/orderservice/api/events/OrderState.java @@ -7,4 +7,5 @@ public enum OrderState { CANCEL_PENDING, CANCELLED, REVISION_PENDING, + COMPLETED } diff --git a/ftgo-restaurant-service-api-spec/src/main/resources/ftgo-restaurant-service-api-spec/messages/RestaurantCreated.json b/ftgo-restaurant-service-api-spec/src/main/resources/ftgo-restaurant-service-api-spec/messages/RestaurantCreated.json index 7670229d..5972e82b 100644 --- a/ftgo-restaurant-service-api-spec/src/main/resources/ftgo-restaurant-service-api-spec/messages/RestaurantCreated.json +++ b/ftgo-restaurant-service-api-spec/src/main/resources/ftgo-restaurant-service-api-spec/messages/RestaurantCreated.json @@ -4,6 +4,9 @@ "name": { "type": "string" }, + "efficiency": { + "type": "integer" + }, "address": { "type": "object", "properties": { diff --git a/ftgo-restaurant-service/src/integration-test/java/net/chrisrichardson/ftgo/restaurantservice/contract/DeliveryserviceMessagingBase.java b/ftgo-restaurant-service/src/integration-test/java/net/chrisrichardson/ftgo/restaurantservice/contract/DeliveryserviceMessagingBase.java index b199da3e..f461ad08 100644 --- a/ftgo-restaurant-service/src/integration-test/java/net/chrisrichardson/ftgo/restaurantservice/contract/DeliveryserviceMessagingBase.java +++ b/ftgo-restaurant-service/src/integration-test/java/net/chrisrichardson/ftgo/restaurantservice/contract/DeliveryserviceMessagingBase.java @@ -42,11 +42,11 @@ public RestaurantDomainEventPublisher orderAggregateEventPublisher(DomainEventPu private RestaurantDomainEventPublisher restaurantDomainEventPublisher; protected void restaurantCreated() { - Restaurant restaurant = new Restaurant("Yummy Indian", new RestaurantMenu(Collections.emptyList())); + Restaurant restaurant = new Restaurant("Yummy Indian", new RestaurantMenu(Collections.emptyList()), 10L); restaurant.setId(99L); restaurantDomainEventPublisher.publish(restaurant, Collections.singletonList(new RestaurantCreated(restaurant.getName(), new Address("1 Main Street", "Unit 99", "Oakland", "CA", "94611"), - restaurant.getMenu()))); + restaurant.getMenu(), restaurant.getEfficiency()))); } } diff --git a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/CreateRestaurantRequest.java b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/CreateRestaurantRequest.java index 7e8b7c0c..dfe4801b 100644 --- a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/CreateRestaurantRequest.java +++ b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/CreateRestaurantRequest.java @@ -7,15 +7,17 @@ public class CreateRestaurantRequest { private String name; private Address address; private RestaurantMenu menu; + private Long efficiency; // how many orders can be processed within an hour private CreateRestaurantRequest() { } - public CreateRestaurantRequest(String name, Address address, RestaurantMenu menu) { + public CreateRestaurantRequest(String name, Address address, RestaurantMenu menu, Long efficiency) { this.name = name; this.address = address; this.menu = menu; + this.efficiency = efficiency; } public String getName() { @@ -37,4 +39,13 @@ public void setMenu(RestaurantMenu menu) { public Address getAddress() { return address; } + + public Long getEfficiency() { + return efficiency; + } + + public void setEfficiency(Long efficiency) { + this.efficiency = efficiency; + } + } diff --git a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/Restaurant.java b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/Restaurant.java index f4f0851b..ec43a760 100644 --- a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/Restaurant.java +++ b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/Restaurant.java @@ -19,12 +19,20 @@ public class Restaurant { private String name; + private Long efficiency; + @Embedded private RestaurantMenu menu; private Restaurant() { } + public Restaurant(String name, RestaurantMenu menu, Long efficiency) { + this.name = name; + this.menu = menu; + this.efficiency = efficiency; + } + public void setId(Long id) { this.id = id; } @@ -37,13 +45,6 @@ public void setName(String name) { this.name = name; } - - public Restaurant(String name, RestaurantMenu menu) { - this.name = name; - this.menu = menu; - } - - public Long getId() { return id; } @@ -51,4 +52,13 @@ public Long getId() { public RestaurantMenu getMenu() { return menu; } + + public Long getEfficiency() { + return efficiency; + } + + public void setEfficiency(Long efficiency) { + this.efficiency = efficiency; + } + } diff --git a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java index 183eb120..dd3662ad 100644 --- a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java +++ b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/domain/RestaurantService.java @@ -19,9 +19,9 @@ public class RestaurantService { private RestaurantDomainEventPublisher restaurantDomainEventPublisher; public Restaurant create(CreateRestaurantRequest request) { - Restaurant restaurant = new Restaurant(request.getName(), request.getMenu()); + Restaurant restaurant = new Restaurant(request.getName(), request.getMenu(), request.getEfficiency()); restaurantRepository.save(restaurant); - restaurantDomainEventPublisher.publish(restaurant, Collections.singletonList(new RestaurantCreated(request.getName(), request.getAddress(), request.getMenu()))); + restaurantDomainEventPublisher.publish(restaurant, Collections.singletonList(new RestaurantCreated(request.getName(), request.getAddress(), request.getMenu(), request.getEfficiency()))); return restaurant; } diff --git a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreated.java b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreated.java index 7e320d11..62562a66 100644 --- a/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreated.java +++ b/ftgo-restaurant-service/src/main/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreated.java @@ -8,6 +8,16 @@ public class RestaurantCreated implements RestaurantDomainEvent { private Address address; private RestaurantMenu menu; + public Long getEfficiency() { + return efficiency; + } + + public void setEfficiency(Long efficiency) { + this.efficiency = efficiency; + } + + private Long efficiency; + public String getName() { return name; } @@ -15,10 +25,11 @@ public String getName() { private RestaurantCreated() { } - public RestaurantCreated(String name, Address address, RestaurantMenu menu) { + public RestaurantCreated(String name, Address address, RestaurantMenu menu, Long efficiency) { this.name = name; this.address = address; this.menu = menu; + this.efficiency = efficiency; } public RestaurantMenu getMenu() { diff --git a/ftgo-restaurant-service/src/test/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreatedSerializationTest.java b/ftgo-restaurant-service/src/test/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreatedSerializationTest.java index a531d230..0aabd13b 100644 --- a/ftgo-restaurant-service/src/test/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreatedSerializationTest.java +++ b/ftgo-restaurant-service/src/test/java/net/chrisrichardson/ftgo/restaurantservice/events/RestaurantCreatedSerializationTest.java @@ -34,7 +34,7 @@ public void shouldSerialize() throws JSONException { ValidatingJSONMapper mapper = ValidatingJSONMapper.forSchema("/ftgo-restaurant-service-api-spec/messages/RestaurantCreated.json"); RestaurantCreated event = new RestaurantCreated(AJANTA_RESTAURANT_NAME, RESTAURANT_ADDRESS, - new RestaurantMenu(Collections.singletonList(CHICKEN_VINDALOO_MENU_ITEM))); + new RestaurantMenu(Collections.singletonList(CHICKEN_VINDALOO_MENU_ITEM)), 10L); String json = mapper.toJSON(event); assertNotNull(json); } From 8bdcf0c4fb977a8cd4aa54132a51214d175f4361 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Thu, 27 May 2021 22:07:03 +0200 Subject: [PATCH 20/23] Refactor --- .../kitchenservice/domain/KitchenService.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java index ba209dd7..75f47ea3 100644 --- a/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java +++ b/ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java @@ -13,6 +13,7 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Map; +import java.util.Optional; public class KitchenService { @@ -39,12 +40,18 @@ public void reviseMenu(long ticketId, RestaurantMenu revisedMenu) { } public Ticket createTicket(long restaurantId, Long ticketId, TicketDetails ticketDetails) { - if (restaurantRepository.findById(restaurantId).isPresent() && ticketDetails.getLineItems().stream().map(TicketLineItem::getQuantity).reduce(Integer::sum).isPresent() && - (restaurantRepository.findById(restaurantId).get().getEfficiency() < ticketDetails.getLineItems().stream().map(TicketLineItem::getQuantity).reduce(Integer::sum).get())) { - logger.info("COS INNEGO NIZ DUPA"); + Optional<Restaurant> restaurant = restaurantRepository.findById(restaurantId); + Optional<Integer> totalOrderQuantity = ticketDetails + .getLineItems() + .stream() + .map(TicketLineItem::getQuantity) + .reduce(Integer::sum); + if (restaurant.isPresent() && totalOrderQuantity.isPresent() && + restaurant.get().getEfficiency() < totalOrderQuantity.get()) { + logger.info("Restaurant efficiency exceeded!"); throw new RestaurantCapacityExceededException(); } - logger.info("DUPA2"); + logger.info("Creating ticket..."); ResultWithDomainEvents<Ticket, TicketDomainEvent> rwe = Ticket.create(restaurantId, ticketId, ticketDetails); ticketRepository.save(rwe.result); domainEventPublisher.publish(rwe.result, rwe.events); From 171ab9d257a4db5702320f3dae74bc0d43692ac4 Mon Sep 17 00:00:00 2001 From: pulnara <magnes.agnieszka@gmail.com> Date: Thu, 27 May 2021 19:40:27 +0200 Subject: [PATCH 21/23] Fixes to make saga compensation work --- .../api/CheckAccountLimitCommand.java | 2 +- .../accountingservice/domain/Account.java | 17 ++++++++++- .../domain/AccountCreatedEvent.java | 12 +++++++- .../domain/AccountingService.java | 3 +- .../CheckAccountLimitCommandInternal.java | 2 +- .../domain/CreateAccountCommand.java | 8 ++++++ .../messaging/AccountingEventConsumer.java | 9 ++++-- .../AccountingServiceCommandHandler.java | 28 ++++++++++++++----- .../ftgo/consumerservice/domain/Consumer.java | 7 ++++- .../domain/ConsumerCreated.java | 2 +- .../createorder/CreateOrderSagaState.java | 2 +- 11 files changed, 73 insertions(+), 19 deletions(-) diff --git a/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java b/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java index 64601940..ffee15b1 100644 --- a/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java +++ b/ftgo-accounting-service-api/src/main/java/net/chrisrichardson/ftgo/accountservice/api/CheckAccountLimitCommand.java @@ -12,7 +12,7 @@ public class CheckAccountLimitCommand implements Command { private CheckAccountLimitCommand() { } - public CheckAccountLimitCommand(Long consumerId, Money money, Long orderId) { + public CheckAccountLimitCommand(Long consumerId, Long orderId, Money money) { this.money = money; this.consumerId = consumerId; this.orderId = orderId; diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java index 440a97e7..d0bc1966 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java @@ -4,6 +4,8 @@ import io.eventuate.ReflectiveMutableCommandProcessingAggregate; import io.eventuate.tram.sagas.eventsourcingsupport.SagaReplyRequestedEvent; import net.chrisrichardson.ftgo.common.Money; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.util.Collections; @@ -14,14 +16,27 @@ public class Account extends ReflectiveMutableCommandProcessingAggregate<Account, AccountCommand> { + public Money getBalance() { + return balance; + } + + public void setBalance(Money balance) { + this.balance = balance; + } + + private final Logger logger = LoggerFactory.getLogger(getClass()); + private Money balance; public List<Event> process(CreateAccountCommand command) { - return events(new AccountCreatedEvent(command.getInitialBalance())); + logger.info(command.getCustomerId().toString()); + return events(new AccountCreatedEvent(command.getCustomerId(), command.getInitialBalance())); } public void apply(AccountCreatedEvent event) { this.balance = event.getInitialBalance(); + logger.info(this.balance.asString()); + logger.info(event.getCustomerId().toString()); } public List<Event> process(CheckAccountLimitCommandInternal command) { diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java index e3a4d865..2e9397ff 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountCreatedEvent.java @@ -8,14 +8,24 @@ public class AccountCreatedEvent implements Event { private Money initialBalance; + private Long customerId; private AccountCreatedEvent() {} - public AccountCreatedEvent(Money initialBalance){ + public AccountCreatedEvent(Long customerId, Money initialBalance){ + this.customerId = customerId; this.initialBalance = initialBalance; } public Money getInitialBalance() { return initialBalance; } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java index 9162df98..6262f05a 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountingService.java @@ -18,7 +18,6 @@ public class AccountingService { public void create(Long consumerId, String aggregateId) { Money initialBalance = new Money(100); - EntityWithIdAndVersion<Account> account = accountRepository.save(new CreateAccountCommand(consumerId, initialBalance), - Optional.of(new SaveOptions().withId(aggregateId))); + accountRepository.save(new CreateAccountCommand(consumerId, initialBalance), Optional.of(new SaveOptions().withId(aggregateId))); } } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java index 49e0a6a4..66c373c0 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CheckAccountLimitCommandInternal.java @@ -11,7 +11,7 @@ public class CheckAccountLimitCommandInternal implements AccountCommand, Command private CheckAccountLimitCommandInternal() { } - public CheckAccountLimitCommandInternal(String consumerId, Money money, String orderId) { + public CheckAccountLimitCommandInternal(String consumerId, String orderId, Money money) { this.money = money; this.consumerId = consumerId; this.orderId = orderId; diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java index b51c570a..2c057de6 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/CreateAccountCommand.java @@ -5,6 +5,14 @@ import java.math.BigDecimal; public class CreateAccountCommand implements AccountCommand { + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + private Long customerId; private Money initialBalance; diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java index cabbdf40..49a8391e 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingEventConsumer.java @@ -5,6 +5,8 @@ import io.eventuate.tram.events.subscriber.DomainEventHandlersBuilder; import net.chrisrichardson.ftgo.accountingservice.domain.AccountingService; import net.chrisrichardson.ftgo.consumerservice.domain.ConsumerCreated; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +15,8 @@ public class AccountingEventConsumer { @Autowired private AccountingService accountingService; + private Logger logger = LoggerFactory.getLogger(getClass()); + public DomainEventHandlers domainEventHandlers() { return DomainEventHandlersBuilder .forAggregateType("net.chrisrichardson.ftgo.consumerservice.domain.Consumer") @@ -21,9 +25,8 @@ public DomainEventHandlers domainEventHandlers() { } private void createAccount(DomainEventEnvelope<ConsumerCreated> dee) { - ConsumerCreated ccEvent = dee.getEvent(); - accountingService.create(ccEvent.getConsumerId(), dee.getAggregateId()); + String consumerId = dee.getAggregateId(); + accountingService.create(Long.parseLong(consumerId), consumerId); } - } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java index 5d39f70f..190ed88b 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java @@ -3,6 +3,7 @@ import io.eventuate.sync.AggregateRepository; import io.eventuate.tram.commands.consumer.CommandHandlers; import io.eventuate.tram.commands.consumer.CommandMessage; +import io.eventuate.tram.messaging.common.Message; import io.eventuate.tram.sagas.participant.SagaCommandHandlersBuilder; import net.chrisrichardson.ftgo.accountingservice.domain.*; import net.chrisrichardson.ftgo.accountservice.api.*; @@ -11,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import static io.eventuate.tram.commands.consumer.CommandHandlerReplyBuilder.withFailure; +import static io.eventuate.tram.commands.consumer.CommandHandlerReplyBuilder.withSuccess; import static io.eventuate.tram.sagas.eventsourcingsupport.UpdatingOptionsBuilder.replyingTo; public class AccountingServiceCommandHandler { @@ -42,15 +44,27 @@ public void authorize(CommandMessage<AuthorizeCommand> cm) { } - public void checkAccountLimit(CommandMessage<CheckAccountLimitCommand> cm){ + public Message checkAccountLimit(CommandMessage<CheckAccountLimitCommand> cm){ CheckAccountLimitCommand command = cm.getCommand(); - accountRepository.update(Long.toString(command.getConsumerId()), - makeCheckAccountLimitCommandInternal(command), - replyingTo(cm) - .catching(AccountLimitExceededException.class, () -> withFailure(new AccountLimitExceededReply())) - .build()); + logger.info(command.getConsumerId().toString()); + logger.info(replyingTo(cm).build().toString()); + + logger.info(Long.toString(command.getOrderId())); + logger.info(command.getMoney().asString()); + + logger.info(accountRepository.find(Long.toString(command.getConsumerId())).getEntity().getBalance().asString()); + try { + accountRepository.update(Long.toString(command.getConsumerId()), + makeCheckAccountLimitCommandInternal(command), + replyingTo(cm) + .catching(AccountLimitExceededException.class, () -> withFailure(new AccountLimitExceededReply())) + .build()); + } catch (Exception e) { + return withFailure(new AccountLimitExceededReply()); + } + return withSuccess(); } public void reverseAuthorization(CommandMessage<ReverseAuthorizationCommand> cm) { @@ -81,7 +95,7 @@ private AuthorizeCommandInternal makeAuthorizeCommandInternal(AuthorizeCommand c return new AuthorizeCommandInternal(Long.toString(command.getConsumerId()), Long.toString(command.getOrderId()), command.getOrderTotal()); } private CheckAccountLimitCommandInternal makeCheckAccountLimitCommandInternal(CheckAccountLimitCommand command) { - return new CheckAccountLimitCommandInternal(Long.toString(command.getConsumerId()), command.getMoney(), Long.toString(command.getOrderId())); + return new CheckAccountLimitCommandInternal(Long.toString(command.getConsumerId()), Long.toString(command.getOrderId()), command.getMoney()); } private ReverseAuthorizationCommandInternal makeReverseAuthorizeCommandInternal(ReverseAuthorizationCommand command) { return new ReverseAuthorizationCommandInternal(Long.toString(command.getConsumerId()), Long.toString(command.getOrderId()), command.getOrderTotal()); diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java index 92612ace..cda73a52 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/Consumer.java @@ -3,6 +3,8 @@ import io.eventuate.tram.events.publisher.ResultWithEvents; import net.chrisrichardson.ftgo.common.Money; import net.chrisrichardson.ftgo.common.PersonName; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.persistence.Access; import javax.persistence.AccessType; @@ -24,6 +26,8 @@ public class Consumer { @Embedded private PersonName name; + private static final Logger logger = LoggerFactory.getLogger(Consumer.class); + private Consumer() { } @@ -46,6 +50,7 @@ public PersonName getName() { public static ResultWithEvents<Consumer> create(PersonName name) { Consumer newConsumer = new Consumer(name); - return new ResultWithEvents<>(newConsumer, new ConsumerCreated(newConsumer.getId())); +// return new ResultWithEvents<>(newConsumer, new ConsumerCreated(newConsumer.getId())); + return new ResultWithEvents<>(newConsumer, new ConsumerCreated()); } } diff --git a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java index a83bd4b0..9038bbc1 100644 --- a/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java +++ b/ftgo-consumer-service/src/main/java/net/chrisrichardson/ftgo/consumerservice/domain/ConsumerCreated.java @@ -5,7 +5,7 @@ public class ConsumerCreated implements DomainEvent { private Long consumerId; - private ConsumerCreated(){} + public ConsumerCreated(){} public ConsumerCreated(Long id){ this.consumerId = id; diff --git a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java index 3e386b61..ee9b9b0b 100644 --- a/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java +++ b/ftgo-order-service/src/main/java/net/chrisrichardson/ftgo/orderservice/sagas/createorder/CreateOrderSagaState.java @@ -103,7 +103,7 @@ ValidateOrderByConsumer makeValidateOrderByConsumerCommand() { } CheckAccountLimitCommand makeCheckAccountLimitCommand() { - return new CheckAccountLimitCommand(getOrderDetails().getConsumerId(), getOrderDetails().getOrderTotal(), getOrderId()); + return new CheckAccountLimitCommand(getOrderDetails().getConsumerId(), getOrderId(), getOrderDetails().getOrderTotal()); } AuthorizeCommand makeAuthorizeCommand() { From 191f96b728b8dc09fb13275f5c273505ed35423c Mon Sep 17 00:00:00 2001 From: vanillaxx <b.heartbeats@gmail.com> Date: Mon, 7 Jun 2021 19:47:26 +0200 Subject: [PATCH 22/23] change balance on authorize --- .../ftgo/accountingservice/domain/Account.java | 12 ++++++++---- .../domain/AccountAuthorizedEvent.java | 13 +++++++++++++ .../AccountingServiceCommandHandler.java | 15 +++++---------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java index d0bc1966..ef0ee881 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/Account.java @@ -19,6 +19,9 @@ public class Account extends ReflectiveMutableCommandProcessingAggregate<Account public Money getBalance() { return balance; } + public boolean accountLimitSufficient(Money money){ + return balance.isGreaterThanOrEqual(money); + } public void setBalance(Money balance) { this.balance = balance; @@ -43,12 +46,11 @@ public List<Event> process(CheckAccountLimitCommandInternal command) { if(balance.isGreaterThanOrEqual(command.getMoney())){ return events(new AccountLimitSufficientEvent()); } - //return events(new AccountLimitExceededEvent()); - throw new AccountLimitExceededException(); + return events(new AccountLimitExceededEvent()); } public List<Event> process(AuthorizeCommandInternal command) { - return events(new AccountAuthorizedEvent()); + return events(new AccountAuthorizedEvent(command.getOrderTotal())); } public List<Event> process(ReverseAuthorizationCommandInternal command) { @@ -59,7 +61,9 @@ public List<Event> process(ReviseAuthorizationCommandInternal command) { } public void apply(AccountAuthorizedEvent event) { - + if(balance.isGreaterThanOrEqual(event.getMoney())) { + setBalance(getBalance().subtract(event.getMoney())); + } } public void apply(AccountLimitSufficientEvent event) { diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountAuthorizedEvent.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountAuthorizedEvent.java index 565e291c..5834113b 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountAuthorizedEvent.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/domain/AccountAuthorizedEvent.java @@ -1,6 +1,19 @@ package net.chrisrichardson.ftgo.accountingservice.domain; import io.eventuate.Event; +import net.chrisrichardson.ftgo.common.Money; public class AccountAuthorizedEvent implements Event { + private Money money; + + public AccountAuthorizedEvent() { + } + + public AccountAuthorizedEvent(Money money) { + this.money = money; + } + + public Money getMoney() { + return money; + } } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java index 190ed88b..52280e1b 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/messaging/AccountingServiceCommandHandler.java @@ -54,17 +54,12 @@ public Message checkAccountLimit(CommandMessage<CheckAccountLimitCommand> cm){ logger.info(command.getMoney().asString()); logger.info(accountRepository.find(Long.toString(command.getConsumerId())).getEntity().getBalance().asString()); - - try { - accountRepository.update(Long.toString(command.getConsumerId()), - makeCheckAccountLimitCommandInternal(command), - replyingTo(cm) - .catching(AccountLimitExceededException.class, () -> withFailure(new AccountLimitExceededReply())) - .build()); - } catch (Exception e) { - return withFailure(new AccountLimitExceededReply()); + Account account = accountRepository.find(Long.toString(command.getConsumerId())).getEntity(); + if(account.accountLimitSufficient(cm.getCommand().getMoney())){ + return withSuccess(); + } else { + return withFailure(); } - return withSuccess(); } public void reverseAuthorization(CommandMessage<ReverseAuthorizationCommand> cm) { From e61bcc64dead17f866cddf704eb609faa65ae839 Mon Sep 17 00:00:00 2001 From: vanillaxx <b.heartbeats@gmail.com> Date: Thu, 10 Jun 2021 19:47:46 +0200 Subject: [PATCH 23/23] return account info properly --- .../web/AccountingWebConfiguration.java | 15 +++++++++++---- .../accountingservice/web/AccountsController.java | 5 ++++- .../accountingservice/web/GetAccountResponse.java | 14 +++++++++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountingWebConfiguration.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountingWebConfiguration.java index fceb2952..93fd87a9 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountingWebConfiguration.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountingWebConfiguration.java @@ -1,12 +1,19 @@ package net.chrisrichardson.ftgo.accountingservice.web; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.eventuate.common.json.mapper.JSonMapper; import net.chrisrichardson.ftgo.accountingservice.domain.AccountServiceConfiguration; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; +import net.chrisrichardson.ftgo.common.CommonConfiguration; +import org.springframework.context.annotation.*; @Configuration -@Import(AccountServiceConfiguration.class) +@Import({AccountServiceConfiguration.class, CommonConfiguration.class}) @ComponentScan public class AccountingWebConfiguration { + + @Bean + @Primary + public ObjectMapper objectMapper() { + return JSonMapper.objectMapper; + } } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountsController.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountsController.java index a16d7d56..35c0675e 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountsController.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/AccountsController.java @@ -1,6 +1,7 @@ package net.chrisrichardson.ftgo.accountingservice.web; import io.eventuate.EntityNotFoundException; +import io.eventuate.EntityWithMetadata; import io.eventuate.sync.AggregateRepository; import net.chrisrichardson.ftgo.accountingservice.domain.Account; import net.chrisrichardson.ftgo.accountingservice.domain.AccountCommand; @@ -22,7 +23,9 @@ public class AccountsController { @RequestMapping(path="/{accountId}", method= RequestMethod.GET) public ResponseEntity<GetAccountResponse> getAccount(@PathVariable String accountId) { try { - return new ResponseEntity<>(new GetAccountResponse(accountId), HttpStatus.OK); + EntityWithMetadata<Account> accountEntity = accountRepository.find(accountId); + Account account = accountEntity.getEntity(); + return new ResponseEntity<>(new GetAccountResponse(accountId, account.getBalance()), HttpStatus.OK); } catch (EntityNotFoundException e) { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } diff --git a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/GetAccountResponse.java b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/GetAccountResponse.java index 9f0a6629..e79d6f94 100644 --- a/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/GetAccountResponse.java +++ b/ftgo-accounting-service/src/main/java/net/chrisrichardson/ftgo/accountingservice/web/GetAccountResponse.java @@ -1,7 +1,10 @@ package net.chrisrichardson.ftgo.accountingservice.web; +import net.chrisrichardson.ftgo.common.Money; + public class GetAccountResponse { private String accountId; + private Money balance; public String getAccountId() { return accountId; @@ -11,11 +14,20 @@ public void setAccountId(String accountId) { this.accountId = accountId; } + public Money getBalance() { + return balance; + } + + public void setBalance(Money balance) { + this.balance = balance; + } + public GetAccountResponse() { } - public GetAccountResponse(String accountId) { + public GetAccountResponse(String accountId, Money balance) { this.accountId = accountId; + this.balance = balance; } }