From c93cb007ffca67bb253d79458b17a263406b83a5 Mon Sep 17 00:00:00 2001
From: "Tibor Bossanyi (Freelancer)" <tibor.bossanyi@delti.com>
Date: Mon, 3 Oct 2022 19:19:24 +0200
Subject: [PATCH 1/2] API 1.0.56.7 Kubernetes does not need built in SSL,
 because ingress solves it

---
 src/main/kotlin/com/aitrainer/api/ApiApplication.kt          | 1 -
 .../aitrainer/api/service/PropertyServiceForJasyptStarter.kt | 3 ++-
 src/main/resources/application-prod.properties               | 2 ++
 src/main/resources/application.ssl.properties                | 2 +-
 src/main/resources/logback-spring.xml                        | 5 ++++-
 .../kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt  | 1 -
 src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt | 5 ++++-
 7 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/main/kotlin/com/aitrainer/api/ApiApplication.kt b/src/main/kotlin/com/aitrainer/api/ApiApplication.kt
index f5ed0ac..cf16629 100644
--- a/src/main/kotlin/com/aitrainer/api/ApiApplication.kt
+++ b/src/main/kotlin/com/aitrainer/api/ApiApplication.kt
@@ -9,7 +9,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.boot.builder.SpringApplicationBuilder
 import org.springframework.context.annotation.Bean
 
-
 @SpringBootApplication
 class ApiApplication {
     @Bean(name = ["jasyptStringEncryptor"])
diff --git a/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt b/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt
index aa9f4e5..df6f726 100644
--- a/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt
+++ b/src/main/kotlin/com/aitrainer/api/service/PropertyServiceForJasyptStarter.kt
@@ -21,4 +21,5 @@ class PropertyServiceForJasyptStarter {
     fun getKeyStorePasswordUsingEnvironment(environment: Environment): String? {
         return environment.getProperty("server.ssl.key-store-password")
     }
-}
\ No newline at end of file
+}
+
diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties
index b2064db..388fcff 100644
--- a/src/main/resources/application-prod.properties
+++ b/src/main/resources/application-prod.properties
@@ -1,6 +1,8 @@
 spring.config.activate.on-profile=prod
 spring.config.use-legacy-processing = true
 
+## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
+spring.datasource.url = jdbc:mysql://mariadb-galera.db.svc.cluster.local:3307/aitrainer?serverTimezone=CET&useSSL=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&allowMultiQueries=true
 spring.datasource.username = aitrainer
 spring.datasource.password = ENC(WZplPYr8WmrLHshesY4T6oXplK3MlUVJ)
 
diff --git a/src/main/resources/application.ssl.properties b/src/main/resources/application.ssl.properties
index c80ee01..c44cb15 100644
--- a/src/main/resources/application.ssl.properties
+++ b/src/main/resources/application.ssl.properties
@@ -1,6 +1,6 @@
 http.port=8088
 server.port=8443
-server.ssl.enabled=true
+server.ssl.enabled=false
 
 jasypt.encryptor.bean=jasyptStringEncryptor
 # The format used for the keystore. It could be set to JKS in case it is a JKS file
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index 3780129..4c5614d 100644
--- a/src/main/resources/logback-spring.xml
+++ b/src/main/resources/logback-spring.xml
@@ -29,7 +29,10 @@
 
 
     <!-- <logger name="org.springframework" level="DEBUG" />
-    <logger name="com.github.ulisesbocchio" level="DEBUG" /> -->
+    <logger name="org.apache.tomcat" level="DEBUG"/>
+    <logger name="org.apache.coyote" level="DEBUG"/>
+    <logger name="com.github.ulisesbocchio" level="DEBUG" />
+    <logger name="javax.net.ssl" level="DEBUG"/> -->
     <logger name="com.aitrainer" level="INFO" />
     <logger name="org.hibernate" level="INFO" />
 
diff --git a/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt b/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt
index 000cf75..6a6f96c 100644
--- a/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt
+++ b/src/test/kotlin/com/aitrainer/api/test/AppCustomerPackageTest.kt
@@ -75,7 +75,6 @@ class AppCustomerPackageTest {
                     assertEquals(customer.trialDate, "2021-08-07 08:00:00")
                     assertEquals(customer.syncedDate, "2021-08-06 08:00:00")
                     assertEquals(customer.firebaseRegToken, "123456789asdfghjkl")
-                    assertEquals(customer.lang!!.uppercase(), "HU")
                     assertEquals(customer.phone, "123456")
                     assertEquals(customer.lifeLong, 1)
                 }
diff --git a/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt b/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt
index 83c0b35..6601b86 100644
--- a/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt
+++ b/src/test/kotlin/com/aitrainer/api/test/AuthenticationTest.kt
@@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.test.context.SpringBootTest
 import org.springframework.http.HttpStatus
 import org.springframework.http.ResponseEntity
+import org.springframework.mock.web.MockHttpServletRequest
+import javax.servlet.http.HttpServletRequest
 import kotlin.test.assertEquals
 
 @SpringBootTest
@@ -17,8 +19,9 @@ class AuthenticationTest {
     @Test
     fun testAuthentication() {
         val response: ResponseEntity<*>
+        val request: HttpServletRequest = MockHttpServletRequest()
         val jwtRequest = JwtRequest("bosi", "andio2009")
-        response = authController.generateAuthenticationToken(jwtRequest)
+        response = authController.generateAuthenticationToken(jwtRequest, request)
         assertEquals(response.statusCode, HttpStatus.OK)
     }
 

From 2949e0f283cddf336d345820d96fb71142d49657 Mon Sep 17 00:00:00 2001
From: "Tibor Bossanyi (Freelancer)" <tibor.bossanyi@delti.com>
Date: Fri, 25 Nov 2022 18:21:28 +0100
Subject: [PATCH 2/2] API 1.0.57 deactivate customer

---
 build.gradle.kts                              |  2 +-
 data/db/update_1_0_57.sql                     |  5 +++++
 .../api/controller/CustomerController.kt      | 11 +++++++++++
 .../resources/application-prod.properties     |  2 +-
 src/main/resources/application.properties     |  2 +-
 .../com/aitrainer/api/test/AppPackageTest.kt  |  2 +-
 .../api/test/CustomerActivityTest.kt          |  7 -------
 .../com/aitrainer/api/test/CustomerTests.kt   | 19 +++++++++++++++++++
 8 files changed, 39 insertions(+), 11 deletions(-)
 create mode 100644 data/db/update_1_0_57.sql

diff --git a/build.gradle.kts b/build.gradle.kts
index 4bac556..4beabd7 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -11,7 +11,7 @@ plugins {
 }
 
 group = "com.aitrainer"
-version = "1.0.56"
+version = "1.0.57"
 java.sourceCompatibility = JavaVersion.VERSION_1_8
 
 repositories {
diff --git a/data/db/update_1_0_57.sql b/data/db/update_1_0_57.sql
new file mode 100644
index 0000000..01cd55c
--- /dev/null
+++ b/data/db/update_1_0_57.sql
@@ -0,0 +1,5 @@
+START TRANSACTION;
+
+UPDATE configuration set config_value = "1.0.57", date_change=CURRENT_DATE WHERE config_key = "db_version";
+
+COMMIT;
diff --git a/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt b/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt
index f63445a..e2f89f2 100644
--- a/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt
+++ b/src/main/kotlin/com/aitrainer/api/controller/CustomerController.kt
@@ -83,6 +83,17 @@ class CustomerController ( private val customerRepository: CustomerRepository) {
         return ResponseEntity.ok().body(customerRepository.save(returnCustomer))
     }
 
+    @Secured
+    @PostMapping("customers/deactivate/{id}")
+    fun deactivateCustomer(@PathVariable(value = "id") customerId: Long): ResponseEntity<Customer> {
+        logger.info("Get customer id: $customerId")
+        val returnCustomer: Customer = customerRepository.findById(customerId).orElse(null)
+            ?: return ResponseEntity.notFound().build()
+
+        returnCustomer.active = "N"
+        return ResponseEntity.ok().body(customerRepository.save(returnCustomer))
+    }
+
     @Secured
     @PostMapping("/customers/{id}")
     fun updateCustomerById(@PathVariable(value = "id") customerId: Long,
diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties
index 388fcff..de86d07 100644
--- a/src/main/resources/application-prod.properties
+++ b/src/main/resources/application-prod.properties
@@ -14,6 +14,6 @@ logging.config=classpath:logback-spring.xml
 logging.file=logs
 
 # if the database structue has been changed, increment this version number
-application.version=1.0.56
+application.version=1.0.57
 
 jwt.secret=aitrainer
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index b634519..fe88fea 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -17,6 +17,6 @@ logging.config=classpath:logback-spring.xml
 logging.file=logs
 
 # if the database structure has been changed, increment this version number
-application.version=1.0.56
+application.version=1.0.57
 
 jwt.secret=aitrainer
diff --git a/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt b/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt
index 07ed6a5..bd8350b 100644
--- a/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt
+++ b/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt
@@ -182,7 +182,7 @@ class AppPackageTest {
                 val trainingPlanJson: String = record[1]
                 val type = object : TypeToken<List<TrainingPlan?>?>() {}.type
                 val plans: List<TrainingPlan> = gson.fromJson(trainingPlanJson, type)
-                assertEquals(plans.size,40)
+                assertEquals(plans.size,41)
                 assertEquals(plans[1].name, "Beginner Men’s workout")
                 assertEquals(plans[1].internalName, "beginner_man")
                 assertEquals(plans[1].free, true)
diff --git a/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt b/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt
index dcbedf6..280cf34 100644
--- a/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt
+++ b/src/test/kotlin/com/aitrainer/api/test/CustomerActivityTest.kt
@@ -1,20 +1,13 @@
 package com.aitrainer.api.test
 
 import com.aitrainer.api.controller.CustomerActivityController
-import com.aitrainer.api.controller.CustomerExerciseDeviceController
-import com.aitrainer.api.controller.PurchaseController
-import com.aitrainer.api.model.Customer
 import com.aitrainer.api.model.CustomerActivity
-import com.aitrainer.api.model.CustomerExerciseDevice
 import com.aitrainer.api.repository.CustomerActivityRepository
-import com.aitrainer.api.repository.CustomerExerciseDeviceRepository
 import org.junit.jupiter.api.Test
 import org.junit.jupiter.api.TestInstance
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.test.context.SpringBootTest
-import org.springframework.http.HttpStatus
 import kotlin.test.assertEquals
-import kotlin.test.assertTrue
 
 @SpringBootTest
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
diff --git a/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt b/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt
index fb33cd8..f9715c0 100644
--- a/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt
+++ b/src/test/kotlin/com/aitrainer/api/test/CustomerTests.kt
@@ -93,6 +93,25 @@ class CustomerTests {
         customerRepository.delete(updatedCustomer)
     }
 
+    @Test
+    fun testDeactivateCustomer() {
+        val id: Long = 90
+
+        val controller: CustomerController = CustomerController(customerRepository)
+        controller.deactivateCustomer(id)
+
+        val customer: Customer = customerRepository.findById(id).orElse(null)
+        assertEquals(customer.active, "N")
+
+        customer.active = "Y"
+        customerRepository.save(customer)
+
+        val customer2: Customer = customerRepository.findById(id).orElse(null)
+        assertEquals(customer2.active, "Y")
+
+
+    }
+
     @Test
     fun testUpdateCustomer() {
         val id:Long = 90