v1.2.6 diet.premium, diet registration email

This commit is contained in:
bossanyit 2023-05-02 18:10:49 +02:00
parent 9d4fff4e53
commit 63c0dc5595
16 changed files with 89 additions and 28 deletions

View File

@ -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") {

2
build_api_test Normal file → Executable file
View File

@ -1 +1 @@
docker build --no-cache -t diet4you_api_test -f Dockerfile .
docker buildx build --platform linux/amd64 --no-cache -t diet4you_api_test -f Dockerfile .

8
data/db/update_1_2_6.sql Normal file
View File

@ -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;

View File

@ -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)
}

View File

@ -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)

View File

@ -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) {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -4,22 +4,19 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'Szia ' + ${firstname} + '!'">Szia [firstname]!</p>
<p>
Ü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:<br/><br/>
<a th:href="${activationLink}" th:text="${activationLink}">${activationLink}</a>
New Diet4You user:
</p>
<p>
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.
</p>
<p>
Köszönjük, hogy velünk dolgozol.
Email:<span th:text="${customerEmail}">Email</span><br/>
Name:<span th:text="${customerName}">Name</span>
</p>
<p>
Üdvözlettel,<br>
Diéta Neked Csapata<br/>
Diet 4 You Team<br/>
mailto: diet4you@andio.hu<br/>
Diet4You Team<br/>
mailto: service@diet4you.eu<br/>
</p>
</body>
</html>

View File

@ -1 +1 @@
[Diet4You] Üdv a céltudatosok között!
[Diet4You] New Diet User!

View File

@ -394,7 +394,7 @@ class AppPackageTest {
val appTextJson: String = record[1]
val type = object : TypeToken<List<AppText?>?>() {}.type
val texts: List<AppText> = 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) {

View File

@ -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", "<h1>Üdv</h1><p>id=932989</p>", "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)
}
}

View File

@ -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 {

2
tag Normal file
View File

@ -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