diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java index c2b527b..20066f3 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/StaffRepository.java @@ -17,4 +17,5 @@ public interface StaffRepository extends AbstractRepository { Optional findByStaffId(@Param("staffId") String staffId); Optional findByUserId(@Param("userId") Long userId); + Optional> findAllByTeamIdAndDeletedFalse(Long id); } \ No newline at end of file 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 89c1791..72cfad7 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 @@ -74,6 +74,10 @@ open class StaffsService( return staffRepository.findByUserId(userId); } + open fun findAllByTeamId(id: Long): Optional> { + return staffRepository.findAllByTeamIdAndDeletedFalse(id); + } + @Transactional(rollbackFor = [Exception::class]) open fun saveStaff(req: NewStaffRequest): Staff { val user = userRepository.saveAndFlush( diff --git a/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt b/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt index e5c8761..b249bd0 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/TeamService.kt @@ -10,11 +10,13 @@ import com.ffii.tsms.modules.data.entity.projections.StaffSearchInfo import com.ffii.tsms.modules.data.web.models.NewTeamRequest import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional +import java.util.Optional @Service open class TeamService( private val teamRepository: TeamRepository, private val staffRepository: StaffRepository, + private val staffsService: StaffsService, private val jdbcDao: JdbcDao, ) : AbstractBaseEntityService(jdbcDao, teamRepository) { @@ -82,6 +84,17 @@ open class TeamService( return team } + @Transactional(rollbackFor = [Exception::class]) + open fun setStaffTeamIdToNull(id: Long) { + val staffList: List? = staffsService.findAllByTeamId(id).orElseThrow() + if (!staffList.isNullOrEmpty()) { + for (staff in staffList) { + staff.apply { + team = null; + } + } + } + } open fun saveOrUpdate(req: NewTeamRequest): Team { val team = if(req.id != null) find(req.id).get() else Team() if (req.id != null) { diff --git a/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt b/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt index 9b017f7..5af73db 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/TeamController.kt @@ -7,6 +7,8 @@ import com.ffii.tsms.modules.data.service.TeamService import com.ffii.tsms.modules.data.web.models.NewTeamRequest import jakarta.servlet.http.HttpServletRequest import jakarta.validation.Valid +import org.springframework.http.HttpStatus +import org.springframework.transaction.annotation.Transactional import org.springframework.web.bind.ServletRequestBindingException import org.springframework.web.bind.annotation.* @@ -32,6 +34,14 @@ class TeamController(private val teamService: TeamService) { return teamService.getTeamDetail(args); } +// @Transactional(rollbackFor = [Exception::class]) + @DeleteMapping("/delete/{id}") + @ResponseStatus(HttpStatus.NO_CONTENT) + fun delete(@PathVariable id: Long) { + teamService.markDelete(id) + teamService.setStaffTeamIdToNull(id) + } + @GetMapping("/combo") @Throws(ServletRequestBindingException::class) fun combo(request: HttpServletRequest?): RecordsRes> {