diff --git a/build.gradle.kts b/build.gradle.kts index e1db83c..12021d3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "com.aitrainer" -version = "1.2.2" +version = "1.2.3" java.sourceCompatibility = JavaVersion.VERSION_17 repositories { diff --git a/data/db/update_1_2_3.sql b/data/db/update_1_2_3.sql new file mode 100644 index 0000000..0c1ed17 --- /dev/null +++ b/data/db/update_1_2_3.sql @@ -0,0 +1,19 @@ +START TRANSACTION; + +ALTER TABLE `meal` + ADD COLUMN `normalized_name` CHAR(100) NOT NULL DEFAULT '0' AFTER `name`, + ADD COLUMN `serving` DOUBLE(10,2) NULL DEFAULT '0.00' AFTER `quantity_unit`, + ADD COLUMN `serving_unit` CHAR(50) NULL DEFAULT '' AFTER `portion`; + +ALTER TABLE `diet_meal` + ADD COLUMN `normalized_name` CHAR(100) NOT NULL DEFAULT '0' AFTER `meal_name`, + ADD COLUMN `serving` DOUBLE(10,2) NULL DEFAULT '0.00' AFTER `quantity_unit`, + ADD COLUMN `serving_unit` CHAR(50) NULL DEFAULT '' AFTER `portion`; + +ALTER TABLE `recipe_meal` + CHANGE COLUMN `quantity` `quantity` DOUBLE NULL DEFAULT NULL AFTER `recipe_id`, + ADD COLUMN `quantity_unit` CHAR(50) NULL DEFAULT NULL AFTER `quantity`; + +UPDATE configuration set config_value = "1.2.3", 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/DietUserConsumptionController.kt b/src/main/kotlin/com/aitrainer/api/controller/diet/DietUserConsumptionController.kt index f856556..e147c21 100644 --- a/src/main/kotlin/com/aitrainer/api/controller/diet/DietUserConsumptionController.kt +++ b/src/main/kotlin/com/aitrainer/api/controller/diet/DietUserConsumptionController.kt @@ -40,4 +40,12 @@ class DietUserConsumptionController(private val dietUserConsumptionRepository: D return if (list.isEmpty()) ResponseEntity.notFound().build() else ResponseEntity.ok().body(list) } + + @PostMapping("/diet_user_consumption/delete/{id}") + fun delete(@PathVariable id: Long): ResponseEntity<*> { + return dietUserConsumptionRepository.findById(id).map { existingConsumption -> + dietUserConsumptionRepository.delete(existingConsumption) + ResponseEntity.ok().body("OK") + }.orElse(ResponseEntity.notFound().build()) + } } \ No newline at end of file diff --git a/src/main/kotlin/com/aitrainer/api/model/diet/DietMeal.kt b/src/main/kotlin/com/aitrainer/api/model/diet/DietMeal.kt index d091650..ed58924 100644 --- a/src/main/kotlin/com/aitrainer/api/model/diet/DietMeal.kt +++ b/src/main/kotlin/com/aitrainer/api/model/diet/DietMeal.kt @@ -11,6 +11,9 @@ data class DietMeal ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Expose val id: Long = 0, @Expose @get: NotNull val mealId: Long = 0, @Expose @get: NotNull val mealName: String = "", + @Expose @get: NotNull val normalizedName: String = "", + @Expose @get: NotNull val serving: Double = 0.0, + @Expose @get: NotNull val servingUnit: String = "", @Expose @get: NotNull val meal: String = "", @Expose @get: NotNull var quantity: Double = 0.0, @Expose @get: NotNull val quantityUnit: String = "", diff --git a/src/main/kotlin/com/aitrainer/api/model/diet/Meal.kt b/src/main/kotlin/com/aitrainer/api/model/diet/Meal.kt index e9ac4a6..a23c819 100644 --- a/src/main/kotlin/com/aitrainer/api/model/diet/Meal.kt +++ b/src/main/kotlin/com/aitrainer/api/model/diet/Meal.kt @@ -8,8 +8,11 @@ data class Meal ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Expose val id: Long = 0, @Expose @get: NotNull val name: String = "", + @Expose @get: NotNull val normalizedName: String = "", @Expose @get: NotNull val quantity: Double = 0.0, @Expose @get: NotNull val quantityUnit: String = "", + @Expose @get: NotNull val serving: Double = 0.0, + @Expose @get: NotNull val servingUnit: String = "", @Expose @get: NotNull val description: String = "", @Expose @get: NotNull val calMin: Double = 0.0, @Expose @get: NotNull val calMax: Double = 0.0, diff --git a/src/main/resources/application-diet.properties b/src/main/resources/application-diet.properties index e2dda90..a2b750a 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.2 +application.version=1.2.3 jwt.secret=aitrainer diff --git a/src/main/resources/application-dietprod.properties b/src/main/resources/application-dietprod.properties index b3fcc55..a8ca6d4 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.2 +application.version=1.2.3 jwt.secret=aitrainer diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index d7540d4..17f5373 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.2 +application.version=1.2.3 jwt.secret=aitrainer diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9d96bca..c8186dc 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.2 +application.version=1.2.3 jwt.secret=aitrainer diff --git a/src/test/kotlin/com/aitrainer/api/test/diet/DietConsumptionTest.kt b/src/test/kotlin/com/aitrainer/api/test/diet/DietConsumptionTest.kt index bd68072..a6cd3d6 100644 --- a/src/test/kotlin/com/aitrainer/api/test/diet/DietConsumptionTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/diet/DietConsumptionTest.kt @@ -1,5 +1,6 @@ package com.aitrainer.api.test.diet +import com.aitrainer.api.model.diet.Diet import com.aitrainer.api.model.diet.DietUserConsumption import com.aitrainer.api.test.Tokenizer import com.google.gson.Gson @@ -13,6 +14,7 @@ import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.MediaType import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.MvcResult import org.springframework.test.web.servlet.request.MockMvcRequestBuilders import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get import org.springframework.test.web.servlet.result.MockMvcResultMatchers.* @@ -115,7 +117,6 @@ class DietConsumptionTest { .andExpect(jsonPath("$.cal").value(65.0)) .andExpect(jsonPath("$.ch").value(44.0)) - // Act & Assert mockMvc.perform(get("/api/diet_user_consumption/5") .header("Authorization", "Bearer $authToken") .contentType(MediaType.APPLICATION_JSON)) @@ -124,6 +125,38 @@ class DietConsumptionTest { .andExpect(jsonPath("$.[1].name").value("Rozs zsömle")) .andExpect(jsonPath("$.[1].ch").value(44)) + + val dietUserConsumption6 = DietUserConsumption( + dietUserId = 5, + mealId = 11, + name = "Hamburger", + dateConsumption = "2023-04-12 16:30", + quantity = 180.0, + quantityUnit = "g", + cal = 265.0, //** + protein = 31.0, + fat = 24.0, + ch = 34.0, //** + sugar = 8.0, + ) + val mvcResult: MvcResult = mockMvc.perform( + MockMvcRequestBuilders.post("/api/diet_user_consumption") + .contentType(MediaType.APPLICATION_JSON) + .header("Authorization", "Bearer $authToken") + .content(toJson(dietUserConsumption6)) + ).andExpect(status().isOk) + .andReturn() + + + val gson= Gson() + val consumptionJson = mvcResult.response.contentAsString + val consumption = gson.fromJson(consumptionJson, DietUserConsumption::class.java) + mockMvc.perform( + MockMvcRequestBuilders.post("/api/diet_user_consumption/delete/"+consumption.id) + .contentType(MediaType.APPLICATION_JSON) + .header("Authorization", "Bearer $authToken") + ).andExpect(status().isOk) + } private fun toJson(obj: Any): String { 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 ad45e09..a0eb57f 100644 --- a/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt @@ -85,10 +85,14 @@ class DietTest { val meal3 = DietMeal( mealName = "monday|lunch", meal = "Savanyúkáposzta", - quantity = 2.0, - quantityUnit = "tányér", + normalizedName = "Savanyukaposzta", + quantity = 222.0, + quantityUnit = "gramm", mealId = 3, - mealDate = "2023-03-07 12:00:00" + mealDate = "2023-03-07 12:00:00", + serving = 1.0, + servingUnit = "adag" + ) newDiet.meals.add(meal) @@ -109,9 +113,11 @@ class DietTest { .andExpect(jsonPath("$.meals[0].mealDate").value("2023-03-07 08:00:00")) .andExpect(jsonPath("$.meals[1].mealName").value("monday|lunch")) .andExpect(jsonPath("$.meals[2].meal").value("Savanyúkáposzta")) - .andExpect(jsonPath("$.meals[2].quantity").value(2.0)) + .andExpect(jsonPath("$.meals[2].normalizedName").value("Savanyukaposzta")) + .andExpect(jsonPath("$.meals[2].quantity").value(222.0)) .andExpect(jsonPath("$.meals[2].mealId").value(3)) - .andExpect(jsonPath("$.meals[2].quantityUnit").value("tányér")) + .andExpect(jsonPath("$.meals[2].quantityUnit").value("gramm")) + .andExpect(jsonPath("$.meals[2].servingUnit").value("adag")) // update no_text diff --git a/src/test/kotlin/com/aitrainer/api/test/diet/MealTest.kt b/src/test/kotlin/com/aitrainer/api/test/diet/MealTest.kt index 4ac5557..db954dc 100644 --- a/src/test/kotlin/com/aitrainer/api/test/diet/MealTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/diet/MealTest.kt @@ -45,13 +45,16 @@ class MealTest { chMin = 1.0, chMax = 3.0, sugar = 0.0, + serving = 1.0, + servingUnit = "adag", + normalizedName = "Tukortojas" ) private val meal2 = Meal( name = "Tigris buci", - quantity = 3.0, - quantityUnit = "db", + quantity = 233.0, + quantityUnit = "gram", calMin = 123.0, calMax = 140.0, proteinMin = 19.0, @@ -61,6 +64,9 @@ class MealTest { chMin = 50.0, chMax = 60.0, sugar = 5.0, + serving = 3.0, + servingUnit = "db", + normalizedName = "Tigris buci" ) private val meal3 = Meal( @@ -75,6 +81,9 @@ class MealTest { chMin = 1.0, chMax = 3.0, sugar = 0.0, + serving= 3.0, + servingUnit = "adag" , + normalizedName = "Toltotttojas" ) @@ -99,6 +108,8 @@ class MealTest { .andExpect(jsonPath("$.sugar").value(0.0)) .andExpect(jsonPath("$.quantity").value(90.0)) .andExpect(jsonPath("$.proteinMax").value(25.0)) + .andExpect(jsonPath("$.servingUnit").value("adag")) + .andExpect(jsonPath("$.normalizedName").value("Tukortojas")) var mvcResult = mockMvc.perform( MockMvcRequestBuilders.post("/api/meal") @@ -127,6 +138,7 @@ class MealTest { .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk) .andExpect(jsonPath("$.[3].name").value("Tükörtojás")) + .andExpect(jsonPath("$.[3].normalizedName").value("Tukortojas")) .andExpect(jsonPath("$.[4].name").value("Tigris buci")) .andExpect(jsonPath("$.[5].quantity").value(330.0)) .andExpect(jsonPath("$.[5].name").value("Töltötttojás")) @@ -172,6 +184,8 @@ class MealTest { } private fun toJson(obj: Any): String { - return Gson().toJson(obj) + val json = Gson().toJson(obj) + println(json) + return json } }