From 2f692ec1d6178408722b0c6907164238cda8f0c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Pit=C3=A1k?= <xpitak@fi.muni.cz>
Date: Sat, 20 Apr 2024 03:43:22 +0200
Subject: [PATCH] Prepare client for remote call of Account-Query service

---
 .../1_create_account_management_db.sql        |  6 ++---
 account-management/pom.xml                    | 23 +++++++++++++++----
 .../banking/AccountManagementApplication.java |  2 ++
 .../application/proxy/SystemServiceProxy.java |  8 +++++++
 .../application/service/AccountService.java   |  6 ++++-
 .../src/main/resources/application.yaml       | 16 ++++++-------
 6 files changed, 44 insertions(+), 17 deletions(-)
 create mode 100644 account-management/src/main/java/cz/muni/pa165/banking/application/proxy/SystemServiceProxy.java

diff --git a/.docker/db/scripts/1_create_account_management_db.sql b/.docker/db/scripts/1_create_account_management_db.sql
index dcab6a2..b90aa18 100644
--- a/.docker/db/scripts/1_create_account_management_db.sql
+++ b/.docker/db/scripts/1_create_account_management_db.sql
@@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS bank_user
     last_name VARCHAR(50),
     user_type VARCHAR(50)
 );
-CREATE SEQUENCE bank_user_seq START 1 INCREMENT 1;
+CREATE SEQUENCE bank_user_seq START 1 INCREMENT 50;
 
 CREATE TABLE IF NOT EXISTS bank_account
 (
@@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS bank_account
     type               VARCHAR(50),
     currency           VARCHAR(50)
 );
-CREATE SEQUENCE bank_account_seq START 1 INCREMENT 1;
+CREATE SEQUENCE bank_account_seq START 1 INCREMENT 50;
 
 CREATE TABLE IF NOT EXISTS scheduled_payment
 (
@@ -34,4 +34,4 @@ CREATE TABLE IF NOT EXISTS scheduled_payment
     recurrence_type        VARCHAR(50),
     recurrence_payment_day INTEGER
 );
-CREATE SEQUENCE scheduled_payment_seq START 1 INCREMENT 1;
\ No newline at end of file
+CREATE SEQUENCE scheduled_payment_seq START 1 INCREMENT 50;
\ No newline at end of file
diff --git a/account-management/pom.xml b/account-management/pom.xml
index f6e7a3d..0800de1 100644
--- a/account-management/pom.xml
+++ b/account-management/pom.xml
@@ -25,11 +25,24 @@
         <account-query-api.version>1.0-SNAPSHOT</account-query-api.version>
         <banking-infrastructure.version>1.0-SNAPSHOT</banking-infrastructure.version>
 
+        <spring-cloud.version>2023.0.1</spring-cloud.version>
         <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
         <swagger-ui.version>2.3.0</swagger-ui.version>
         <jdbc-postgres.version>42.7.3</jdbc-postgres.version>
     </properties>
 
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <dependencies>
         <dependency>
             <groupId>cz.muni.pa165.banking</groupId>
@@ -51,11 +64,13 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-
-
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-quartz</artifactId>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/account-management/src/main/java/cz/muni/pa165/banking/AccountManagementApplication.java b/account-management/src/main/java/cz/muni/pa165/banking/AccountManagementApplication.java
index 2f899b0..c26203a 100644
--- a/account-management/src/main/java/cz/muni/pa165/banking/AccountManagementApplication.java
+++ b/account-management/src/main/java/cz/muni/pa165/banking/AccountManagementApplication.java
@@ -2,8 +2,10 @@ package cz.muni.pa165.banking;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 
 @SpringBootApplication
+@EnableFeignClients
 public class AccountManagementApplication {
 
     public static void main(String[] args) {
diff --git a/account-management/src/main/java/cz/muni/pa165/banking/application/proxy/SystemServiceProxy.java b/account-management/src/main/java/cz/muni/pa165/banking/application/proxy/SystemServiceProxy.java
new file mode 100644
index 0000000..082458f
--- /dev/null
+++ b/account-management/src/main/java/cz/muni/pa165/banking/application/proxy/SystemServiceProxy.java
@@ -0,0 +1,8 @@
+package cz.muni.pa165.banking.application.proxy;
+
+import cz.muni.pa165.banking.account.query.SystemServiceApi;
+import org.springframework.cloud.openfeign.FeignClient;
+
+@FeignClient(url = "${banking.apps.query.url}", name = "SystemBalanceApi")
+public interface SystemServiceProxy extends SystemServiceApi {
+}
diff --git a/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java b/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java
index 504d252..9c5c179 100644
--- a/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java
+++ b/account-management/src/main/java/cz/muni/pa165/banking/application/service/AccountService.java
@@ -1,5 +1,6 @@
 package cz.muni.pa165.banking.application.service;
 
+import cz.muni.pa165.banking.account.query.SystemServiceApi;
 import cz.muni.pa165.banking.domain.account.Account;
 import cz.muni.pa165.banking.domain.account.repository.AccountRepository;
 import cz.muni.pa165.banking.domain.scheduled.ScheduledPayment;
@@ -19,11 +20,14 @@ import java.util.stream.Collectors;
 @Service
 public class AccountService {
     
+    private final SystemServiceApi balanceApi;
+    
     private final AccountRepository accountRepository;
     
     private final ScheduledPaymentRepository scheduledPaymentsRepository;
 
-    public AccountService(AccountRepository accountRepository, ScheduledPaymentRepository scheduledPaymentsRepository){
+    public AccountService(SystemServiceApi balanceApi, AccountRepository accountRepository, ScheduledPaymentRepository scheduledPaymentsRepository){
+        this.balanceApi = balanceApi;
         this.accountRepository = accountRepository;
         this.scheduledPaymentsRepository = scheduledPaymentsRepository;
     }
diff --git a/account-management/src/main/resources/application.yaml b/account-management/src/main/resources/application.yaml
index 4e07b31..ee57d63 100644
--- a/account-management/src/main/resources/application.yaml
+++ b/account-management/src/main/resources/application.yaml
@@ -4,10 +4,13 @@ server:
 db:
   hostname: localhost
 
-scheduled:
-  cron:
-    expression: "0 0 0 * * MON" # Execute every Monday at midnight
-    
+banking:
+  apps:
+    query:
+      host: localhost
+      port: 8081
+      url: ${banking.apps.query.host}:${banking.apps.query.port}
+
 spring:
   application:
     name: account-management
@@ -16,11 +19,6 @@ spring:
     driver-class-name: org.postgresql.Driver
     username: ACC_USER
     password: userAccPasswd
-    logging:
-      level:
-        org:
-          hibernate:
-            SQL: DEBUG
   jpa:
     show-sql: true
               
\ No newline at end of file
-- 
GitLab