diff --git a/gradlew b/gradlew index a69d9cb..6bafaef 100755 --- a/gradlew +++ b/gradlew @@ -86,7 +86,7 @@ APP_NAME="Gradle" APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +DEFAULT_JVM_OPTS='"-Xmx512m" "-Xms2048m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt index a9e0e35..a3a8218 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/StaffsService.kt @@ -7,6 +7,7 @@ import com.ffii.tsms.modules.common.SecurityUtils import com.ffii.tsms.modules.data.entity.* import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo import com.ffii.tsms.modules.data.web.models.NewStaffRequest +import com.ffii.tsms.modules.data.web.models.NewStaffResponse import com.ffii.tsms.modules.data.web.models.SalaryEffectiveInfo import com.ffii.tsms.modules.user.entity.User import com.ffii.tsms.modules.user.entity.UserRepository @@ -130,11 +131,17 @@ open class StaffsService( } @Transactional(rollbackFor = [Exception::class]) - open fun saveStaff(req: NewStaffRequest): Staff { + open fun saveStaff(req: NewStaffRequest): NewStaffResponse { val checkStaffIdList: List = staffRepository.findStaffSearchInfoByAndDeletedFalseOrderByStaffIdAsc() checkStaffIdList.forEach{ s -> if (s.staffId == req.staffId) { - throw UnprocessableEntityException("Duplicated StaffId Found") + return NewStaffResponse( + id = null, + name = req.name, + staffId = req.staffId, + message = "duplicated staff ID found", + errorPosition = "code", + ) } } // val currentPosition = positionRepository.findById(req.currentPositionId).orElseThrow() @@ -188,7 +195,7 @@ open class StaffsService( this.department = department } - staffRepository.saveAndFlush(staff) + val savedStaff = staffRepository.saveAndFlush(staff) if (!req.skillSetId.isNullOrEmpty()) { for (skillId in req.skillSetId) { val skill = skillRepository.findById(skillId).orElseThrow() @@ -213,10 +220,28 @@ open class StaffsService( positionLogService.savePositionLogs(staff, req.positionHistory) } - return staff + return NewStaffResponse( + id = savedStaff.id, + name = savedStaff.name, + staffId = savedStaff.staffId, + message = null, + errorPosition = null, + ) } @Transactional(rollbackFor = [Exception::class]) - open fun updateStaff(req: NewStaffRequest, staff: Staff): Staff { + open fun updateStaff(req: NewStaffRequest, staff: Staff): NewStaffResponse { + val checkStaffIdList: List = staffRepository.findStaffSearchInfoByAndDeletedFalseOrderByStaffIdAsc() + checkStaffIdList.forEach{ s -> + if (s.id !== req.id && s.staffId == req.staffId) { + return NewStaffResponse( + id = null, + name = req.name, + staffId = req.staffId, + message = "duplicated staff ID found", + errorPosition = "code", + ) + } + } val args = java.util.Map.of("staffId", staff.id) if(!req.skillSetId.isNullOrEmpty()) { // remove all skills of the staff @@ -298,26 +323,24 @@ open class StaffsService( if (req.salaryEffectiveInfo != null && req.delSalaryEffectiveInfo != null) { salaryEffectiveService.updateSalaryEffective(staff.id!!, req.salaryEffectiveInfo.sortedBy { it.date }, req.delSalaryEffectiveInfo) } -// else if (req.teamHistory != null && req.delTeamHistory != null) { -// teamLogService.editTeamLog(req.teamHistory, req.delTeamHistory) -// } else if (req.gradeHistory != null && req.delGradeHistory != null) { -// gradeLogService.editGradeLog(req.gradeHistory, req.delGradeHistory) -// } else if (req.positionHistory != null && req.delPositionHistory != null) { -// positionLogService.editPositionLog(req.positionHistory, req.delPositionHistory) -// } - - return staffRepository.save(staff) + val savedStaff = staffRepository.saveAndFlush(staff) + return NewStaffResponse( + id = savedStaff.id, + name = savedStaff.name, + staffId = savedStaff.staffId, + message = null, + errorPosition = null, + ) } @Transactional(rollbackFor = [Exception::class]) - open fun saveOrUpdate(req: NewStaffRequest): Staff { + open fun saveOrUpdate(req: NewStaffRequest): NewStaffResponse { val staff = if(req.id != null) find(req.id).get() else Staff() if (req.id != null) { - updateStaff(req, staff) + return updateStaff(req, staff) } else { - saveStaff(req) + return saveStaff(req) } - return staff; } open fun combo(args: Map): List> { diff --git a/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt b/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt index 6898e43..b115d5f 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/StaffsController.kt @@ -8,6 +8,7 @@ import com.ffii.tsms.modules.data.entity.Staff import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo import com.ffii.tsms.modules.data.service.StaffsService import com.ffii.tsms.modules.data.web.models.NewStaffRequest +import com.ffii.tsms.modules.data.web.models.NewStaffResponse import jakarta.servlet.http.HttpServletRequest import jakarta.validation.Valid import liquibase.hub.model.Project @@ -74,7 +75,7 @@ class StaffsController(private val staffsService: StaffsService) { ) } @PostMapping("/save") - fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): Staff { + fun saveStaff(@Valid @RequestBody newStaff: NewStaffRequest): NewStaffResponse { return staffsService.saveOrUpdate(newStaff) } } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt index 6e8c02d..681518b 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewStaffResponse.kt @@ -3,7 +3,9 @@ package com.ffii.tsms.modules.data.web.models import com.ffii.tsms.modules.data.entity.Staff data class NewStaffResponse ( - val staff: Staff, - val message: String, - + val id: Long?, + val name: String?, + val staffId: String?, + val message: String?, + val errorPosition: String?, // e.g. duplicated code ) \ No newline at end of file