diff --git a/build.gradle.kts b/build.gradle.kts index 2179f68..2515bc4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "com.aitrainer" -version = "1.2.5" +version = "1.2.6" java.sourceCompatibility = JavaVersion.VERSION_17 repositories { @@ -48,8 +48,10 @@ dependencies { implementation("jakarta.mail:jakarta.mail-api:2.1.1") implementation("org.eclipse.angus:angus-mail:2.0.1") - implementation ("com.aallam.openai:openai-client:3.2.2") + implementation("com.aallam.openai:openai-client:3.2.2") implementation("io.ktor:ktor-client-java:2.2.3") + implementation("ognl:ognl:3.3.4") + runtimeOnly("mysql:mysql-connector-java") testImplementation("org.springframework.boot:spring-boot-starter-test") { diff --git a/build_api_test b/build_api_test old mode 100644 new mode 100755 index 6429af5..ba978e6 --- a/build_api_test +++ b/build_api_test @@ -1 +1 @@ -docker build --no-cache -t diet4you_api_test -f Dockerfile . \ No newline at end of file +docker buildx build --platform linux/amd64 --no-cache -t diet4you_api_test -f Dockerfile . diff --git a/data/db/update_1_2_6.sql b/data/db/update_1_2_6.sql new file mode 100644 index 0000000..5475216 --- /dev/null +++ b/data/db/update_1_2_6.sql @@ -0,0 +1,8 @@ +START TRANSACTION; + +ALTER TABLE `diet` + ADD COLUMN `premium` TINYINT(1) NULL DEFAULT 0 AFTER `start_date`; + +UPDATE configuration set config_value = "1.2.6", date_change=CURRENT_DATE WHERE config_key = "db_version"; + +COMMIT; \ No newline at end of file diff --git a/src/main/kotlin/com/aitrainer/api/controller/diet/DietCustomerController.kt b/src/main/kotlin/com/aitrainer/api/controller/diet/DietCustomerController.kt index c98fe89..3e1ef4d 100644 --- a/src/main/kotlin/com/aitrainer/api/controller/diet/DietCustomerController.kt +++ b/src/main/kotlin/com/aitrainer/api/controller/diet/DietCustomerController.kt @@ -7,6 +7,8 @@ import com.aitrainer.api.model.diet.DietCustomer import com.aitrainer.api.model.diet.DietUser import com.aitrainer.api.repository.CustomerRepository import com.aitrainer.api.repository.diet.DietUserRepository +import com.aitrainer.api.service.Email +import com.aitrainer.api.service.EmailTemplateService import com.aitrainer.api.service.Firebase import com.aitrainer.api.service.ServiceBeans import org.springframework.beans.factory.annotation.Autowired @@ -24,6 +26,10 @@ class DietCustomerController(private val dietUserRepository: DietUserRepository, @Autowired var serviceBeans: ServiceBeans? = null + + @Autowired + private var emailTemplateService: EmailTemplateService? = null + @PostMapping("/diet_registration") fun insert(@RequestBody dietCustomerJson: String, @Value("\${firebase.key}") apiKey: java.lang.String): ResponseEntity<*> { val newDietCustomer: DietCustomer = DietCustomer().fromJson(dietCustomerJson) @@ -120,17 +126,16 @@ class DietCustomerController(private val dietUserRepository: DietUserRepository, idToken = existingCustomer.firebaseRegToken!! } - // create email link - /*val activationLink = "https://diet4you.andio.hu/welcome/id=$idToken" if ( emailTemplateService == null ) { emailTemplateService = EmailTemplateService() } - val html = emailTemplateService!!.getEmailBody(newDietCustomer.firstname, activationLink, "diet_registration_email") + + val html = emailTemplateService!!.getDietRegistrationEmailBody(newDietCustomer.firstname, newDietCustomer.email, "diet_registration_email") val subject = emailTemplateService!!.getSubjectDiet() // send email val email = Email() - email.send(newDietCustomer.email, html, subject)*/ + email.send("service@diet4you.eu", html, subject) return ResponseEntity.ok().body(existingCustomer) } diff --git a/src/main/kotlin/com/aitrainer/api/model/diet/Diet.kt b/src/main/kotlin/com/aitrainer/api/model/diet/Diet.kt index 56512e6..7b43dd2 100644 --- a/src/main/kotlin/com/aitrainer/api/model/diet/Diet.kt +++ b/src/main/kotlin/com/aitrainer/api/model/diet/Diet.kt @@ -12,6 +12,7 @@ data class Diet ( @Expose @get: NotNull val dietUserId: Long = 0, @Expose @get: NotNull val dietText: String = "", @Expose @get: NotNull var startDate: String = "", + @Expose @get: NotNull val premium: Int = 0, ) { @OneToMany(cascade = [(CascadeType.ALL)], fetch = FetchType.EAGER, mappedBy = "diet") @Fetch(value = FetchMode.SUBSELECT) diff --git a/src/main/kotlin/com/aitrainer/api/service/EmailTemplateService.kt b/src/main/kotlin/com/aitrainer/api/service/EmailTemplateService.kt index fe7ab78..74ae725 100644 --- a/src/main/kotlin/com/aitrainer/api/service/EmailTemplateService.kt +++ b/src/main/kotlin/com/aitrainer/api/service/EmailTemplateService.kt @@ -21,6 +21,17 @@ class EmailTemplateService { return templateEngine!!.process(template, context) } + fun getDietRegistrationEmailBody(firstname: String, email: String, template: String): String { + val context = Context() + context.setVariable("customerName", firstname) + context.setVariable("customerEmail", email) + if ( templateEngine == null) { + templateEngine = TemplateEngine() + } + + return templateEngine!!.process(template, context) + } + fun getSubject(): String { val context = Context() if ( templateEngine == null) { diff --git a/src/main/resources/application-diet.properties b/src/main/resources/application-diet.properties index 1410b00..a68733d 100644 --- a/src/main/resources/application-diet.properties +++ b/src/main/resources/application-diet.properties @@ -16,7 +16,7 @@ logging.config=classpath:logback-spring.xml logging.file=logs # if the database structure has been changed, increment this version number -application.version=1.2.5 +application.version=1.2.6 jwt.secret=aitrainer diff --git a/src/main/resources/application-dietprod.properties b/src/main/resources/application-dietprod.properties index e58bb77..2b9bbdf 100644 --- a/src/main/resources/application-dietprod.properties +++ b/src/main/resources/application-dietprod.properties @@ -14,7 +14,7 @@ logging.config=classpath:logback-spring.xml logging.file=logs # if the database structue has been changed, increment this version number -application.version=1.2.5 +application.version=1.2.6 jwt.secret=aitrainer diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 763dd38..e3fda7f 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -14,7 +14,7 @@ logging.config=classpath:logback-spring.xml logging.file=logs # if the database structue has been changed, increment this version number -application.version=1.2.5 +application.version=1.2.6 jwt.secret=aitrainer diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8944be4..b313a1d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -17,7 +17,7 @@ logging.config=classpath:logback-spring.xml logging.file=logs # if the database structure has been changed, increment this version number -application.version=1.2.5 +application.version=1.2.6 jwt.secret=aitrainer diff --git a/src/main/resources/templates/diet_registration_email.html b/src/main/resources/templates/diet_registration_email.html index 31ebff0..16f8d68 100644 --- a/src/main/resources/templates/diet_registration_email.html +++ b/src/main/resources/templates/diet_registration_email.html @@ -4,22 +4,19 @@ -

Szia [firstname]!

- Üdvözlünk a Diet 4 You (Diéta Neked) tagjai között! Örülünk, hogy velünk vagy. Az étrended a Diet4You zárt felületén tudod elérni. A belépéshez használd ezt a linket:

- ${activationLink} + New Diet4You user:

+

- Kérlek, kattints a linkre a fiókod aktiválásához. Ha bármilyen problémád van, ne habozz velünk kapcsolatba lépni. -

-

- Köszönjük, hogy velünk dolgozol. + Email:Email
+ Name:Name

+

Üdvözlettel,
- Diéta Neked Csapata
- Diet 4 You Team
- mailto: diet4you@andio.hu
+ Diet4You Team
+ mailto: service@diet4you.eu

\ No newline at end of file diff --git a/src/main/resources/templates/diet_registration_subject.html b/src/main/resources/templates/diet_registration_subject.html index 11868d3..ff9de56 100644 --- a/src/main/resources/templates/diet_registration_subject.html +++ b/src/main/resources/templates/diet_registration_subject.html @@ -1 +1 @@ -[Diet4You] Üdv a céltudatosok között! \ No newline at end of file +[Diet4You] New Diet User! \ No newline at end of file diff --git a/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt b/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt index d5a473e..e9d5a9e 100644 --- a/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/AppPackageTest.kt @@ -394,7 +394,7 @@ class AppPackageTest { val appTextJson: String = record[1] val type = object : TypeToken?>() {}.type val texts: List = gson.fromJson(appTextJson, type) - assertEquals(texts.size, 15) + assertEquals(texts.size, 33) assertEquals(texts[13].translations[0].translation, "Done!") assertEquals(texts[13].translations[1].translation, "Kész!") } else if (record[0] == TrainingProgram::class.simpleName) { diff --git a/src/test/kotlin/com/aitrainer/api/test/EmailTest.kt b/src/test/kotlin/com/aitrainer/api/test/EmailTest.kt index 8696d79..4346b73 100644 --- a/src/test/kotlin/com/aitrainer/api/test/EmailTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/EmailTest.kt @@ -31,8 +31,8 @@ class EmailTest { assertTrue (html.isNotEmpty()) assertTrue(html.contains("Tibor")) } - @Test - fun testSend() { + + fun rtestSend() { try { email.send("tibor.bossanyi@aitrainer.app", "

Üdv

id=932989

", "Workout Test API test") @@ -41,8 +41,14 @@ class EmailTest { println("Error sending email: $e") assertTrue(false) } + } + @Test + fun testDietReg() { + val html = emailTemplateService.getDietRegistrationEmailBody("Tibor", "sw@aitrainer.app", "diet_registration_email") + val subject = emailTemplateService.getSubjectDiet() - + // send email + email.send("service@diet4you.eu", html, subject) } } \ No newline at end of file diff --git a/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt b/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt index a0eb57f..d192bca 100644 --- a/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt @@ -2,6 +2,8 @@ package com.aitrainer.api.test.diet import com.aitrainer.api.model.diet.Diet import com.aitrainer.api.model.diet.DietMeal +import com.aitrainer.api.repository.diet.DietRepository +import com.aitrainer.api.repository.diet.MealRepository import com.aitrainer.api.test.Tokenizer import com.google.gson.Gson import org.junit.jupiter.api.BeforeAll @@ -29,11 +31,15 @@ class DietTest { @Autowired private lateinit var mockMvc: MockMvc + @Autowired + private lateinit var dietRepository: DietRepository + private val diet = Diet( dietUserId = 1, dietText = "Test diet text", - startDate = "2023-02-02" + startDate = "2023-02-02", + premium = 0, ) private var authToken: String? = "" @@ -120,7 +126,6 @@ class DietTest { .andExpect(jsonPath("$.meals[2].servingUnit").value("adag")) // update no_text - newDiet.startDate = "2023-03-20" newDiet.meals[0].quantity = 102.0 mockMvc.perform( @@ -134,7 +139,31 @@ class DietTest { .andExpect(jsonPath("$.meals[0].quantity").value(102.0)) .andExpect(jsonPath("$.dietText").value("Test diet text")) + val diet2 = Diet( + dietUserId = 2, + dietText = "Premium Test", + startDate = "2023-05-02", + premium = 1, + ) + val mvcResult2: MvcResult = mockMvc.perform( + MockMvcRequestBuilders.post("/api/diet") + .contentType(MediaType.APPLICATION_JSON) + .header("Authorization", "Bearer $authToken") + .content(toJson(diet2)) + ) + .andExpect(status().isOk) + .andExpect(jsonPath("$.dietUserId").value(2)) + .andExpect(jsonPath("$.dietText").value("Premium Test")) + .andExpect(jsonPath("$.premium").value(1)) + .andReturn() + + val gson2= Gson() + val newDietJson2 = mvcResult2.response.contentAsString + val newDiet2 = gson.fromJson(newDietJson, Diet::class.java) + + dietRepository.delete(newDiet) + dietRepository.delete(newDiet2) } private fun toJson(obj: Any): String { diff --git a/tag b/tag new file mode 100644 index 0000000..9af019b --- /dev/null +++ b/tag @@ -0,0 +1,2 @@ +docker tag diet4you_api_test:latest registry.workouttest.org/diet4you_api_test:v1.2.5.1 +docker push registry.workouttest.org/diet4you_api_test:v1.2.5.1 \ No newline at end of file