From d8ee69661ffe9ae828e01d6871b40553977f2e59 Mon Sep 17 00:00:00 2001 From: kelvinsuen Date: Tue, 28 Oct 2025 18:48:50 +0800 Subject: [PATCH] update qc master data (WIP) --- .../master/entity/QcCategoryRepository.kt | 1 + .../master/service/QcCategoryService.kt | 62 +++++++++++++++++++ .../modules/master/service/QcItemService.kt | 8 +-- .../master/web/QcCategoryController.kt | 19 ++++++ .../web/models/SaveQcCategoryRequest.kt | 12 ++++ .../web/models/SaveQcCategoryResponse.kt | 9 +++ 6 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryRequest.kt create mode 100644 src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryResponse.kt diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/QcCategoryRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/QcCategoryRepository.kt index 6283526..6843922 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/QcCategoryRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/QcCategoryRepository.kt @@ -9,6 +9,7 @@ import org.springframework.stereotype.Repository @Repository interface QcCategoryRepository : AbstractRepository { fun findAllByDeletedIsFalse(): List; + fun findByIdAndDeletedIsFalse(id: Long): QcCategory?; fun findQcCategoryComboByDeletedIsFalse(): List; diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/QcCategoryService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/QcCategoryService.kt index 0d1fb09..55a14c5 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/QcCategoryService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/QcCategoryService.kt @@ -3,9 +3,14 @@ package com.ffii.fpsms.modules.master.service import com.ffii.core.support.AbstractBaseEntityService import com.ffii.fpsms.modules.master.entity.QcCategory import com.ffii.fpsms.modules.master.entity.QcCategoryRepository +import com.ffii.fpsms.modules.master.entity.QcItem import com.ffii.fpsms.modules.master.entity.projections.QcCategoryCombo +import com.ffii.fpsms.modules.master.web.models.SaveQcCategoryRequest +import com.ffii.fpsms.modules.master.web.models.SaveQcCategoryResponse import com.ffii.fpsms.modules.qc.entity.projection.QcCategoryInfo +import jakarta.validation.Valid import org.springframework.stereotype.Service +import org.springframework.web.bind.annotation.RequestBody @Service open class QcCategoryService( @@ -16,6 +21,10 @@ open class QcCategoryService( return qcCategoryRepository.findAllByDeletedIsFalse() } + open fun findQcCategoryById(id: Long): QcCategory? { + return qcCategoryRepository.findByIdAndDeletedIsFalse(id) + } + open fun getQcCategoryCombo(): List { return qcCategoryRepository.findQcCategoryComboByDeletedIsFalse(); } @@ -40,4 +49,57 @@ open class QcCategoryService( } return result; } + + open fun markDeleted(id: Long): List { + val qcItem = qcCategoryRepository.findById(id).orElseThrow().apply { + deleted = true + } + + qcCategoryRepository.save(qcItem) + + return allQcCategories() + } + + open fun saveQcCategory(@Valid @RequestBody request: SaveQcCategoryRequest): SaveQcCategoryResponse { + val errors = mutableMapOf() + val id = request.id + val qcCategory = if (id != null) qcCategoryRepository.findById(id).orElseThrow() else QcCategory() + + // check duplicated code +// val duplicateQcCategory = findQcCategoryByCode(request.code) +// if (duplicateQcCategory != null && duplicateQcCategory.id != qcCategory.id) { +// errors["code"] = "Code is duplicated" +// } + + if (errors.isNotEmpty()) { + request.let { + SaveQcCategoryResponse( + id = it.id, + code = it.code, + name = it.name, + description = it.description, + errors = errors + ) + } + } + + // Save Qc Item + qcCategory.apply { + code = request.code + name = request.name + description = request.description + } + + val savedQcCategory = qcCategoryRepository.save(qcCategory) + + return savedQcCategory.let { + SaveQcCategoryResponse( + id = it.id, + code = it.code, + name = it.name, + description = it.description, + errors = null + ) + } + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt index d5641a0..66475d9 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt @@ -54,10 +54,10 @@ open class QcItemService( val qcItem = if (id != null) qcItemRepository.findById(id).orElseThrow() else QcItem() // check duplicated code - val duplicateQcItem = findQcItemByCode(request.code) - if (duplicateQcItem != null && duplicateQcItem.id != qcItem.id) { - errors["code"] = "Code is duplicated" - } +// val duplicateQcItem = findQcItemByCode(request.code) +// if (duplicateQcItem != null && duplicateQcItem.id != qcItem.id) { +// errors["code"] = "Code is duplicated" +// } if (errors.isNotEmpty()) { request.let { diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/QcCategoryController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/QcCategoryController.kt index e493c1d..9cc43f1 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/QcCategoryController.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/QcCategoryController.kt @@ -2,9 +2,13 @@ package com.ffii.fpsms.modules.master.web import com.ffii.core.exception.NotFoundException import com.ffii.fpsms.modules.master.entity.QcCategory +import com.ffii.fpsms.modules.master.entity.QcItem import com.ffii.fpsms.modules.master.entity.projections.QcCategoryCombo import com.ffii.fpsms.modules.master.service.QcCategoryService +import com.ffii.fpsms.modules.master.web.models.SaveQcCategoryRequest +import com.ffii.fpsms.modules.master.web.models.SaveQcCategoryResponse import com.ffii.fpsms.modules.qc.entity.projection.QcCategoryInfo +import jakarta.validation.Valid import org.springframework.web.bind.annotation.* @RestController @@ -17,6 +21,21 @@ class QcCategoryController( return qcCategoryService.allQcCategories() } + @DeleteMapping("/{id}") + fun deleteQcItem(@PathVariable id: Long): List { + return qcCategoryService.markDeleted(id) + } + + @GetMapping("/details/{id}") + fun qcCategoryDetails(@PathVariable id: Long): QcCategory { + return qcCategoryService.findQcCategoryById(id) ?: throw NotFoundException() + } + + @PostMapping("/save") + fun saveQcCategory(@Valid @RequestBody request: SaveQcCategoryRequest): SaveQcCategoryResponse { + return qcCategoryService.saveQcCategory(request) + } + @GetMapping("/combo") fun getQcCategoryCombo(): List { return qcCategoryService.getQcCategoryCombo(); diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryRequest.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryRequest.kt new file mode 100644 index 0000000..f2cea8e --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryRequest.kt @@ -0,0 +1,12 @@ +package com.ffii.fpsms.modules.master.web.models + +import jakarta.validation.constraints.NotBlank + +data class SaveQcCategoryRequest( + val id: Long?, + @field:NotBlank(message = "Code cannot be empty") + val code: String, + @field:NotBlank(message = "Name cannot be empty") + val name: String, + val description: String?, +) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryResponse.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryResponse.kt new file mode 100644 index 0000000..576f4e6 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveQcCategoryResponse.kt @@ -0,0 +1,9 @@ +package com.ffii.fpsms.modules.master.web.models + +data class SaveQcCategoryResponse( + val id: Long?, + val code: String?, + val name: String?, + val description: String?, + val errors: MutableMap? +) \ No newline at end of file