diff --git a/data/db/update_1_0_9.sql b/data/db/update_1_0_9.sql new file mode 100644 index 0000000..fdda8c1 --- /dev/null +++ b/data/db/update_1_0_9.sql @@ -0,0 +1,4 @@ +ALTER TABLE `exercises` + ADD COLUMN `exercise_plan_detail_id` INT(11) NOT NULL DEFAULT 0 AFTER `rest_time`; + +UPDATE configuration set config_value = "1.0.9", date_change=CURRENT_DATE WHERE config_key = "db_version"; \ No newline at end of file diff --git a/readme.MD b/readme.MD index 16c6b70..2c55e6e 100644 --- a/readme.MD +++ b/readme.MD @@ -1,4 +1,4 @@ -#aitrainer server API v1.0.4 +#aitrainer server API v1.0.9 connects the MYSQL Database provide a RESTful API for the mobile app @@ -7,7 +7,14 @@ provide a RESTful API for the mobile app * customers * exercise_type +* exercise_image +* exercise_translation +* exercise_tree +* exercise_tree_image +* exercise_tree_translation * exercise * customer_information +* exercise_plan +* exercise_plan_detail with automatic database update diff --git a/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanController.kt b/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanController.kt index 2f34944..dd1ab3f 100644 --- a/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanController.kt +++ b/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanController.kt @@ -54,11 +54,10 @@ class ExercisePlanController( private val exercisePlanRepository: ExercisePlanRe @Secured @PostMapping("/exercise_plan/delete/{exercisePlanId}") - fun deleteExercisePlanById(@PathVariable(value = "exercisePlanId") exercisePlanId: Int, - @Valid @RequestBody exercisePlan: ExercisePlan) + fun deleteExercisePlanById(@PathVariable(value = "exercisePlanId") exercisePlanId: Int) :ResponseEntity { val returnPlan = exercisePlanRepository.findById(exercisePlanId).orElse(null) - ?: return ResponseEntity.ok().body(HttpStatus.NOT_FOUND) + ?: return ResponseEntity.notFound().build() try { exercisePlanRepository.delete(returnPlan) } catch (e: IllegalArgumentException ) { diff --git a/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanDetailController.kt b/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanDetailController.kt index a4cb044..1c35e21 100644 --- a/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanDetailController.kt +++ b/src/main/kotlin/com/aitrainer/api/controller/ExercisePlanDetailController.kt @@ -22,15 +22,6 @@ class ExercisePlanDetailController( private val exercisePlanDetailRepository: Ex return ResponseEntity.ok().body(exercisePlanDetailRepository.save(exercisePlanDetail)) } - /* @GetMapping("/exercise_plan_detail/last/{customerId}") - fun getExercisePlanByCustomerId(@PathVariable(value = "customerId") customerId: Long): ResponseEntity> { - val list: List = exercisePlanDetailRepository.getLastExercisePlanDetail(customerId) - logger.info("-- getExercisePlanByCustomerId id: $customerId -- $list") - return ResponseEntity.ok().body(list) - } - */ - - @GetMapping("/exercise_plan_detail/{exercisePlanId}") fun getExercisePlanByExercisePlanId(@PathVariable(value = "exercisePlanId") exercisePlanId: Int): ResponseEntity> { val list: List = exercisePlanDetailRepository.findByExercisePlanId(exercisePlanId) @@ -61,11 +52,10 @@ class ExercisePlanDetailController( private val exercisePlanDetailRepository: Ex @Secured @PostMapping("/exercise_plan_detail/delete/{exercisePlanDetailId}") - fun deleteExercisePlanDetailById(@PathVariable(value = "exercisePlanDetailId") exercisePlanDetailId: Long, - @Valid @RequestBody exercisePlanDetail: ExercisePlanDetail) + fun deleteExercisePlanDetailById(@PathVariable(value = "exercisePlanDetailId") exercisePlanDetailId: Long) :ResponseEntity { val returnPlanDetail = exercisePlanDetailRepository.findById(exercisePlanDetailId).orElse(null) - ?: return ResponseEntity.ok().body(HttpStatus.NOT_FOUND) + ?: return ResponseEntity.notFound().build() try { exercisePlanDetailRepository.delete(returnPlanDetail) } catch (e: IllegalArgumentException ) { diff --git a/src/main/kotlin/com/aitrainer/api/model/Exercises.kt b/src/main/kotlin/com/aitrainer/api/model/Exercises.kt index af36444..dcc1e15 100644 --- a/src/main/kotlin/com/aitrainer/api/model/Exercises.kt +++ b/src/main/kotlin/com/aitrainer/api/model/Exercises.kt @@ -16,6 +16,7 @@ data class Exercises ( @get: Null var restTime: Int?, // in seconds @get: NonNull var unit: String? = null, @get: NonNull var unitQuantity: Double? = null, + @get: NonNull var exercisePlanDetailId: Int = 0, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val exerciseId: Long = 0 diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index e9c6455..5d9a222 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -16,6 +16,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.8 +application.version=1.0.9 jwt.secret=aitrainer \ No newline at end of file diff --git a/src/main/resources/application-prodtest.properties b/src/main/resources/application-prodtest.properties deleted file mode 100644 index 8e4b57e..0000000 --- a/src/main/resources/application-prodtest.properties +++ /dev/null @@ -1,21 +0,0 @@ -spring.profiles.active=prod -## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) -spring.datasource.url = jdbc:mysql://62.171.188.119:33060/aitrainer_test?serverTimezone=CET&useSSL=false&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&allowMultiQueries=true -spring.datasource.username = aitrainer -spring.datasource.password = andio2009 - - -## Hibernate Properties - - -# The SQL dialect makes Hibernate generate better SQL for the chosen database -spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect - - -logging.config=classpath:logback-spring.xml -logging.file=logs - -# if the database structure has been changed, increment this version number -application.version=1.0.8 - -jwt.secret=aitrainer \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6408a67..ba5114e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -16,6 +16,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.8 +application.version=1.0.9 jwt.secret=aitrainer \ No newline at end of file diff --git a/src/test/kotlin/com/aitrainer/api/test/ExercisePlanDetailTest.kt b/src/test/kotlin/com/aitrainer/api/test/ExercisePlanDetailTest.kt index 6a34363..5777847 100644 --- a/src/test/kotlin/com/aitrainer/api/test/ExercisePlanDetailTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/ExercisePlanDetailTest.kt @@ -100,11 +100,11 @@ class ExercisePlanDetailTest { val planDetailToDelete: ExercisePlanDetail = exercisePlanDetailRepository.findById(newPlanDetailId).orElse(null) assertNotNull(planDetailToDelete) - val response: ResponseEntity<*> = planDetailController.deleteExercisePlanDetailById(newPlanDetailId, planDetailToDelete) - assertEquals(response.body, HttpStatus.OK) + val response: ResponseEntity<*> = planDetailController.deleteExercisePlanDetailById(newPlanDetailId) + assertEquals(response.statusCode, HttpStatus.OK) - val response2: ResponseEntity<*> = planDetailController.deleteExercisePlanDetailById(9999, planDetailToDelete) - assertEquals(response2.body, HttpStatus.NOT_FOUND) + val response2: ResponseEntity<*> = planDetailController.deleteExercisePlanDetailById(9999) + assertEquals(response2.statusCode, HttpStatus.NOT_FOUND) } diff --git a/src/test/kotlin/com/aitrainer/api/test/ExercisePlanTest.kt b/src/test/kotlin/com/aitrainer/api/test/ExercisePlanTest.kt index eadeb14..a6d561f 100644 --- a/src/test/kotlin/com/aitrainer/api/test/ExercisePlanTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/ExercisePlanTest.kt @@ -84,7 +84,7 @@ class ExercisePlanTest { assertEquals(savedPlan.customerId, 92) val planController = ExercisePlanController(exercisePlanRepository) - val response3: ResponseEntity<*> = planController.deleteExercisePlanById(exercisePlan.exercisePlanId, exercisePlan) + val response3: ResponseEntity<*> = planController.deleteExercisePlanById(exercisePlan.exercisePlanId) assertEquals(response3.body, HttpStatus.OK) val searchPlan = exercisePlanRepository.findById(exercisePlan.exercisePlanId) diff --git a/src/test/kotlin/com/aitrainer/api/test/ExerciseTest.kt b/src/test/kotlin/com/aitrainer/api/test/ExerciseTest.kt index 77a8cdf..4bef16a 100644 --- a/src/test/kotlin/com/aitrainer/api/test/ExerciseTest.kt +++ b/src/test/kotlin/com/aitrainer/api/test/ExerciseTest.kt @@ -49,10 +49,12 @@ class ExerciseTest { dateAdd = "2020-07-05 04:32:00", unit = "repeat", unitQuantity = 32.6, - restTime = null + restTime = null, + exercisePlanDetailId = 6 ) exerciseNew = exerciseRepository.save(exercise) assertTrue(exerciseNew.exerciseId > 3) + assertEquals(exerciseNew.exercisePlanDetailId, 6) exerciseRepository.delete(exercise) } } \ No newline at end of file