diff --git a/src/deploy/Dockerfile b/src/deploy/aitrainer/Dockerfile similarity index 100% rename from src/deploy/Dockerfile rename to src/deploy/aitrainer/Dockerfile diff --git a/src/deploy/build.sh b/src/deploy/aitrainer/build.sh similarity index 100% rename from src/deploy/build.sh rename to src/deploy/aitrainer/build.sh diff --git a/Dockerfile b/src/deploy/diet4you/Dockerfile similarity index 100% rename from Dockerfile rename to src/deploy/diet4you/Dockerfile diff --git a/src/deploy/diet4you/build_api b/src/deploy/diet4you/build_api new file mode 100755 index 0000000..ae4d612 --- /dev/null +++ b/src/deploy/diet4you/build_api @@ -0,0 +1 @@ +docker buildx build --platform linux/amd64 --no-cache -t diet4you_api -f Dockerfile . diff --git a/build_api_test b/src/deploy/diet4you/build_api_test similarity index 100% rename from build_api_test rename to src/deploy/diet4you/build_api_test diff --git a/tag b/src/deploy/diet4you/tag similarity index 100% rename from tag rename to src/deploy/diet4you/tag diff --git a/src/main/kotlin/com/aitrainer/api/controller/diet/DietController.kt b/src/main/kotlin/com/aitrainer/api/controller/diet/DietController.kt index 97f5998..ce8b6f2 100644 --- a/src/main/kotlin/com/aitrainer/api/controller/diet/DietController.kt +++ b/src/main/kotlin/com/aitrainer/api/controller/diet/DietController.kt @@ -75,9 +75,27 @@ class DietController(private val dietRepository: DietRepository) { @OptIn(BetaOpenAI::class, DelicateCoroutinesApi::class) @PostMapping("/diet/generate_premium/{dietUserId}", produces = [MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8"]) fun generatePremiumDiet(@PathVariable dietUserId: Long, @RequestBody input: String, @Value("\${openai.key}") openaiKey: String): ResponseEntity<*> { + + val now = LocalDateTime.now() + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") + val todayString = now.format(formatter) + var diet: Diet? = dietRepository.findTheLastEmptyDiet(dietUserId) + if ( diet == null ) { + diet = Diet( + dietUserId = dietUserId, + dietText = "", + startDate = todayString, + premium = 0 + ) + diet = dietRepository.save(diet) + } val systemMsg = ChatMessage( role = ChatRole.System, - content = "Te egy táplálkozási szakértő vagy" + content = "Te egy táplálkozási szakértő vagy. A feladat mindig egy étrend elkészítése ebben a 3 lépésben:\n" + + "\n" + + "1. Vizsgáld meg az input adatokat, és készítsd el az étrendet\n" + + "2. Ellenőrizd az ételeket, hogy tényleg létezik-e olyan, és megfelel az input adatok feltételeinek\n" + + "3. Ellenőrizd a kimeneti formátumot. Csak a megadott kimeneti formátumban válaszolj" ) val userMsg = ChatMessage( role = ChatRole.User, @@ -91,6 +109,7 @@ class DietController(private val dietRepository: DietRepository) { val openai = OpenAIChat( messages = messages, + //modelName = "gpt-3.5-turbo", modelName = "gpt-4", temperature = 0.9 ) @@ -112,15 +131,10 @@ class DietController(private val dietRepository: DietRepository) { if ( result == null ) { return ResponseEntity.badRequest().build() } - val now = LocalDateTime.now() - val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") - val todayString = now.format(formatter) - val diet: Diet = Diet( - dietUserId = dietUserId, - dietText = result!!, - startDate = todayString, - premium = 1 - ) + + diet.dietText = result!! + diet.startDate = todayString + diet.premium = 1 return ResponseEntity.ok().body(dietRepository.save(diet)) } } \ No newline at end of file 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 7b43dd2..b4a0bd5 100644 --- a/src/main/kotlin/com/aitrainer/api/model/diet/Diet.kt +++ b/src/main/kotlin/com/aitrainer/api/model/diet/Diet.kt @@ -10,9 +10,9 @@ import org.jetbrains.annotations.NotNull data class Diet ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Expose val dietId: Long = 0, @Expose @get: NotNull val dietUserId: Long = 0, - @Expose @get: NotNull val dietText: String = "", + @Expose @get: NotNull var dietText: String = "", @Expose @get: NotNull var startDate: String = "", - @Expose @get: NotNull val premium: Int = 0, + @Expose @get: NotNull var premium: Int = 0, ) { @OneToMany(cascade = [(CascadeType.ALL)], fetch = FetchType.EAGER, mappedBy = "diet") @Fetch(value = FetchMode.SUBSELECT) 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 05ca766..493abef 100644 --- a/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/diet/DietTest.kt @@ -19,6 +19,8 @@ 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.* +import kotlin.test.assertEquals +import kotlin.test.assertNotNull @ExtendWith(SpringExtension::class) @@ -164,6 +166,13 @@ class DietTest { dietRepository.delete(newDiet2) } + @Test + fun `find the last empty diet successfully`() { + val diet: Diet? = dietRepository.findTheLastEmptyDiet(2) + assertNotNull(diet) + assertEquals(diet.premium, 1) + } + //@Test fun `generate premium diet successfully`() { @@ -173,7 +182,7 @@ class DietTest { "- Allergiák: olajos magvak\n" + "- Preferált ételek: magyar konyha\n" + "- Ezek az ételek nem szerepelhetnek az étrendben: főzelékek\n" + - "- napi kalóriacél: 2100 kCal\n" + + //"- napi kalóriacél: 2100 kCal\n" + "- Étel frekvencia: reggeli, ebéd, uzsonna, vacsora\n" + "- Ebéd és vacsora megegyezik. \n" + "- ne legyen ismétlődés az ételeknél\n" + @@ -181,11 +190,11 @@ class DietTest { "A választ ebben a formátumban add meg:\n" + "{ \"DIET\": [\n" + "{\"nameDay\": enum\n" + - "\"mealTime\":enum\n" + + "\"mealTime\":enum\n" + "\"meals\":[],\n" + - "\"quantities\":[],\n" + - "\"calories\":[],\n" + - "}, \"sumCal\":double\n" + + //"\"quantities\":[],\n" + + //"\"calories\":[],\n" + + "}" + "]}" mockMvc.perform(