diff --git a/src/main/java/com/ceos/bankids/controller/ChallengeController.java b/src/main/java/com/ceos/bankids/controller/ChallengeController.java index c96cfbe8..0c3cfeaa 100644 --- a/src/main/java/com/ceos/bankids/controller/ChallengeController.java +++ b/src/main/java/com/ceos/bankids/controller/ChallengeController.java @@ -1,5 +1,184 @@ package com.ceos.bankids.controller; +import com.ceos.bankids.config.CommonResponse; +import com.ceos.bankids.domain.User; +import com.ceos.bankids.dto.AchievedChallengeDTO; +import com.ceos.bankids.dto.AchievedChallengeListDTO; +import com.ceos.bankids.dto.ChallengeDTO; +import com.ceos.bankids.dto.KidAchievedChallengeListDTO; +import com.ceos.bankids.dto.KidChallengeListDTO; +import com.ceos.bankids.dto.KidWeekDTO; +import com.ceos.bankids.dto.ProgressDTO; +import com.ceos.bankids.dto.WeekDTO; +import com.ceos.bankids.mapper.ChallengeMapper; +import com.ceos.bankids.mapper.request.ChallengeRequest; +import com.ceos.bankids.mapper.request.KidChallengeRequest; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/challenge") +@RequiredArgsConstructor public class ChallengeController { + private final ChallengeMapper challengeMapper; + + @ApiOperation(value = "돈길 생성") + @PostMapping(produces = "application/json; charset=utf-8") + public CommonResponse postChallenge(@AuthenticationPrincipal User authUser, + @RequestBody + ChallengeRequest challengeRequest) { + + log.info("api = 돈길 생성, req = {}", challengeRequest); + + ChallengeDTO challengeDTO = challengeMapper.postChallenge(authUser, challengeRequest); + + return CommonResponse.onSuccess(challengeDTO); + } + + @ApiOperation(value = "돈길 포기하기") + @DeleteMapping(value = "/{challengeId}", produces = "application/json; charset=utf-8") + public CommonResponse deleteChallenge(@AuthenticationPrincipal User authUser, + @PathVariable Long challengeId) { + + log.info("api = 돈길 포기하기, user = {} challengeId = {}", authUser.getUsername(), challengeId); + + ChallengeDTO challengeDTO = challengeMapper.deleteChallenge(authUser, challengeId); + + return CommonResponse.onSuccess(challengeDTO); + } + + @ApiOperation(value = "돈길 리스트 가져오기") + @GetMapping(produces = "application/json; charset=utf-8") + public CommonResponse> getListChallenge( + @AuthenticationPrincipal User authUser, @RequestParam String status) { + + log.info("api = 돈길 리스트 가져오기, user = {}, status = {}", authUser.getUsername(), status); + + List challengeDTOList = challengeMapper.getListChallenge(authUser, status); + + return CommonResponse.onSuccess(challengeDTOList); + } + + @ApiOperation(value = "자녀의 돈길 리스트 가져오기") + @GetMapping(value = "/kid/{kidId}", produces = "application/json; charset=utf-8") + public CommonResponse getListKidChallenge( + @AuthenticationPrincipal User authUser, @PathVariable Long kidId, + @RequestParam String status) { + + log.info("api = 자녀의 돈길 리스트 가져오기, user = {}, kidId = {}, status = {}", + authUser.getUsername(), kidId, status); + + KidChallengeListDTO kidChallengeListDTO = challengeMapper.getListKidChallenge(authUser, + kidId, + status); + + return CommonResponse.onSuccess(kidChallengeListDTO); + } + + @ApiOperation(value = "자녀의 돈길 수락 / 거절") + @PatchMapping(value = "/{challengeId}", produces = "application/json; charset=utf-8") + public CommonResponse patchChallengeStatus(@AuthenticationPrincipal User authUser, + @PathVariable Long challengeId, + @Valid @RequestBody KidChallengeRequest kidChallengeRequest) { + + log.info("api = 자녀의 돈길 수락 / 거절, user = {}, challengeId = {}, 수락여부 = {}", + authUser.getUsername(), challengeId, kidChallengeRequest.getAccept()); + + ChallengeDTO challengeDTO = challengeMapper.patchChallengeStatus(authUser, challengeId, + kidChallengeRequest); + + return CommonResponse.onSuccess(challengeDTO); + } + + @ApiOperation(value = "주차 정보 가져오기") + @GetMapping(value = "/progress", produces = "application/json; charset=utf-8") + public CommonResponse getWeekInfo(@AuthenticationPrincipal User authUser) { + + log.info("api = 주차 정보 가져오기, user = {}", authUser.getUsername()); + + WeekDTO weekInfo = challengeMapper.getWeekInfo(authUser); + + return CommonResponse.onSuccess(weekInfo); + } + + @ApiOperation(value = "자녀의 주차 정보 가져오기") + @GetMapping(value = "/kid/progress/{kidId}", produces = "application/json; charset=utf-8") + public CommonResponse getKidWeekInfo(@AuthenticationPrincipal User authUser, + @PathVariable Long kidId) { + + log.info("api = 자녀의 주차 정보 가져오기, user = {}, kid = {}", authUser.getUsername(), kidId); + + KidWeekDTO kidWeekInfo = challengeMapper.getKidWeekInfo(authUser, kidId); + + return CommonResponse.onSuccess(kidWeekInfo); + } + + @ApiOperation(value = "완주한 돈길 리스트 가져오기") + @GetMapping(value = "/achieved", produces = "application/json; charset=utf-8") + public CommonResponse getAchievedListChallenge( + @AuthenticationPrincipal User authUser, @RequestParam String interestPayment) { + + log.info("api = 완주한 돈길 리스트 가져오기, user = {}", authUser.getUsername()); + + AchievedChallengeListDTO achievedListChallenge = challengeMapper.getAchievedListChallenge( + authUser, interestPayment); + + return CommonResponse.onSuccess(achievedListChallenge); + } + + @ApiOperation(value = "자녀의 완주한 돈길 리스트 가져오기") + @GetMapping(value = "kid/achieved/{kidId}", produces = "application/json; charset=utf-8") + public CommonResponse getKidAchievedListChallenge( + @AuthenticationPrincipal User authUser, @PathVariable Long kidId, + @RequestParam String interestPayment) { + + log.info("api = 완주한 돈길 리스트 가져오기, user = {}, kid = {}", authUser.getUsername(), kidId); + + KidAchievedChallengeListDTO kidAchievedListChallenge = challengeMapper.getKidAchievedListChallenge( + authUser, kidId, interestPayment); + + return CommonResponse.onSuccess(kidAchievedListChallenge); + } + + @ApiOperation(value = "완주한 돈길에 이자 지급하기") + @PatchMapping(value = "/interest-payment/{challengeId}", produces = "application/json; charset=utf-8") + public CommonResponse patchInterestPayment( + @AuthenticationPrincipal User authUser, + @PathVariable Long challengeId) { + + log.info("api = 완주한 돈길에 이자 지급, user = {}, challengeId = {}", authUser.getUsername(), + challengeId); + + AchievedChallengeDTO achievedChallengeDTO = challengeMapper.patchInterestPayment(authUser, + challengeId); + + return CommonResponse.onSuccess(achievedChallengeDTO); + } + + @ApiOperation(value = "돈길 걷기") + @PatchMapping(value = "/{challengeId}/progress", produces = "application/json; charset=utf-8") + public CommonResponse patchProgress(@AuthenticationPrincipal User authUser, + @PathVariable Long challengeId) { + + log.info("api = 돈길 걷기, user = {}, challengeId = {}", authUser, challengeId); + + ProgressDTO progressDTO = challengeMapper.patchProgress(authUser, challengeId); + + return CommonResponse.onSuccess(progressDTO); + } } diff --git a/src/main/java/com/ceos/bankids/mapper/ChallengeMapper.java b/src/main/java/com/ceos/bankids/mapper/ChallengeMapper.java index fcf49824..a43e0a0d 100644 --- a/src/main/java/com/ceos/bankids/mapper/ChallengeMapper.java +++ b/src/main/java/com/ceos/bankids/mapper/ChallengeMapper.java @@ -1,6 +1,5 @@ package com.ceos.bankids.mapper; -import com.ceos.bankids.config.CommonResponse; import com.ceos.bankids.constant.ChallengeStatus; import com.ceos.bankids.constant.ErrorCode; import com.ceos.bankids.domain.Challenge; @@ -29,7 +28,6 @@ import com.ceos.bankids.service.KidServiceImpl; import com.ceos.bankids.service.ParentServiceImpl; import com.ceos.bankids.service.UserServiceImpl; -import io.swagger.annotations.ApiOperation; import java.sql.Timestamp; import java.time.DayOfWeek; import java.time.LocalDateTime; @@ -38,23 +36,13 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import javax.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Slf4j -@RestController -@RequestMapping("/challenge") +@Service @RequiredArgsConstructor public class ChallengeMapper { @@ -67,12 +55,9 @@ public class ChallengeMapper { private final ParentServiceImpl parentService; private final KidServiceImpl kidService; - @ApiOperation(value = "돈길 생성") - @PostMapping(produces = "application/json; charset=utf-8") - public CommonResponse postChallenge(@AuthenticationPrincipal User authUser, - @Valid @RequestBody ChallengeRequest challengeRequest) { - - log.info("api = 돈길 생성, req = {}", challengeRequest); + // 돈길 생성 API Mapper + @Transactional + public ChallengeDTO postChallenge(User authUser, ChallengeRequest challengeRequest) { // validation sundayValidation(); @@ -93,17 +78,14 @@ public CommonResponse postChallenge(@AuthenticationPrincipal User // 저장로직 성공시 알림 로직 notificationService.createPendingChallengeNotification(contractUser, challengeUser); - return CommonResponse.onSuccess(challengeDTO); + return challengeDTO; } - @ApiOperation(value = "돈길 포기하기") - @DeleteMapping(value = "/{challengeId}", produces = "application/json; charset=utf-8") - public CommonResponse deleteChallenge( - @AuthenticationPrincipal User authUser, - @PathVariable Long challengeId) { - - log.info("api = 돈길 포기하기, user = {} challengeId = {}", authUser.getUsername(), challengeId); + // 돈길 삭제 API Mapper + @Transactional + public ChallengeDTO deleteChallenge(User authUser, Long challengeId) { + sundayValidation(); userRoleValidation(authUser, true); ChallengeUser challengeUser = challengeUserService.getChallengeUser(challengeId); Challenge deleteChallenge = challengeUser.getChallenge(); @@ -111,41 +93,32 @@ public CommonResponse deleteChallenge( throw new ForbiddenException(ErrorCode.NOT_MATCH_CHALLENGE_USER.getErrorCode()); } if (deleteChallenge.getChallengeStatus() == ChallengeStatus.WALKING) { - kidService.checkKidDeleteChallenge(authUser); - challengeUserService.deleteChallengeUser(authUser, challengeId); - ChallengeDTO deleteWalkingChallengeDTO = challengeService.deleteWalkingChallenge( + kidService.checkKidDeleteChallenge(authUser, deleteChallenge); + return challengeService.deleteWalkingChallenge( authUser, challengeUser); - return CommonResponse.onSuccess(deleteWalkingChallengeDTO); } else if (deleteChallenge.getChallengeStatus() == ChallengeStatus.FAILED) { - challengeUserService.deleteChallengeUser(authUser, challengeId); - ChallengeDTO deleteFailedChallengeDTO = challengeService.deleteWalkingChallenge( + return challengeService.deleteWalkingChallenge( authUser, challengeUser); - return CommonResponse.onSuccess(deleteFailedChallengeDTO); } else if (deleteChallenge.getChallengeStatus() == ChallengeStatus.REJECTED) { - challengeUserService.deleteChallengeUser(authUser, challengeId); - ChallengeDTO deleteRejectedChallengeDTO = challengeService.deleteRejectedChallenge( + return challengeService.deleteRejectedChallenge( authUser, challengeUser); - return CommonResponse.onSuccess(deleteRejectedChallengeDTO); } else if (deleteChallenge.getChallengeStatus() == ChallengeStatus.PENDING) { - challengeUserService.deleteChallengeUser(authUser, challengeId); - ChallengeDTO deletePendingChallengeDTO = challengeService.deletePendingChallenge( + return challengeService.deletePendingChallenge( authUser, challengeUser); - return CommonResponse.onSuccess(deletePendingChallengeDTO); } throw new BadRequestException(ErrorCode.CANT_DELETE_CHALLENGE_STATUS.getErrorCode()); } - @ApiOperation(value = "돈길 리스트 가져오기") - @GetMapping(produces = "application/json; charset=utf-8") - public CommonResponse> getListChallenge( - @AuthenticationPrincipal User authUser, @RequestParam String status) { + // 돈길 리스트 가져오기 API Mapper + @Transactional + public List getListChallenge(User authUser, String status) { - log.info("api = 돈길 리스트 가져오기, user = {}, status = {}", authUser.getUsername(), status); + userRoleValidation(authUser, true); if (!Objects.equals(status, "walking") && !Objects.equals(status, "pending")) { throw new BadRequestException(ErrorCode.INVALID_QUERYPARAM.getErrorCode()); } @@ -185,17 +158,14 @@ public CommonResponse> getListChallenge( }); } - return CommonResponse.onSuccess(challengeDTOList); + return challengeDTOList; } - @ApiOperation(value = "자녀의 돈길 리스트 가져오기") - @GetMapping(value = "/kid/{kidId}", produces = "application/json; charset=utf-8") - public CommonResponse getListKidChallenge( - @AuthenticationPrincipal User authUser, @PathVariable Long kidId, - @RequestParam String status) { + // 자녀의 돈길 리스트 가져오기 API Mapper + @Transactional + public KidChallengeListDTO getListKidChallenge(User authUser, Long kidId, String status) { - log.info("api = 자녀의 돈길 리스트 가져오기, user = {}, kidId = {}, status = {}", - authUser.getUsername(), kidId, status); + userRoleValidation(authUser, false); Kid kid = kidService.getKid(kidId); User kidUser = kid.getUser(); List challengeDTOList = new ArrayList<>(); @@ -235,19 +205,17 @@ public CommonResponse getListKidChallenge( } }); } - KidChallengeListDTO kidChallengeListDTO = new KidChallengeListDTO(kidUser, + return new KidChallengeListDTO(kidUser, challengeDTOList); - return CommonResponse.onSuccess(kidChallengeListDTO); } - @ApiOperation(value = "자녀의 돈길 수락 / 거절") - @PatchMapping(value = "/{challengeId}", produces = "application/json; charset=utf-8") - public CommonResponse patchChallengeStatus(@AuthenticationPrincipal User authUser, - @PathVariable Long challengeId, - @Valid @RequestBody KidChallengeRequest kidChallengeRequest) { + // 돈길 수락 / 거절 API Mapper + @Transactional + public ChallengeDTO patchChallengeStatus(User authUser, Long challengeId, + KidChallengeRequest kidChallengeRequest) { - log.info("api = 자녀의 돈길 수락 / 거절, user = {}, challengeId = {}, 수락여부 = {}", - authUser.getUsername(), challengeId, kidChallengeRequest.getAccept()); + sundayValidation(); + userRoleValidation(authUser, false); ChallengeUser challengeUser = challengeUserService.getChallengeUser(challengeId); User user = challengeUser.getUser(); Challenge challenge = challengeService.readChallenge(challengeId); @@ -260,36 +228,34 @@ public CommonResponse patchChallengeStatus(@AuthenticationPrincipa kidService.updateKidTotalChallenge(user); parentService.updateParentAcceptedChallenge(authUser); notificationService.notification(challenge, user); - return CommonResponse.onSuccess(challengeDTO); + return challengeDTO; } else { ChallengeDTO challengeDTO = challengeService.updateChallengeStatusToRejected(challenge, kidChallengeRequest, authUser); notificationService.notification(challenge, user); - return CommonResponse.onSuccess(challengeDTO); + return challengeDTO; } } - @ApiOperation(value = "주차 정보 가져오기") - @GetMapping(value = "/progress", produces = "application/json; charset=utf-8") - public CommonResponse getWeekInfo(@AuthenticationPrincipal User authUser) { + // 주차 정보 가져오기 API Mapper + @Transactional(readOnly = true) + public WeekDTO getWeekInfo(User authUser) { - log.info("api = 주차 정보 가져오기, user = {}", authUser.getUsername()); + userRoleValidation(authUser, true); List walkingChallengeList = challengeUserService.getChallengeUserList(authUser, "walking") .stream() .filter(challenge -> challenge.getChallengeStatus() == ChallengeStatus.WALKING).collect( Collectors.toList()); - WeekDTO weekDTO = challengeService.readWeekInfo(walkingChallengeList); - return CommonResponse.onSuccess(weekDTO); + return challengeService.readWeekInfo(walkingChallengeList); } - @ApiOperation(value = "자녀의 주차 정보 가져오기") - @GetMapping(value = "/kid/progress/{kidId}", produces = "application/json; charset=utf-8") - public CommonResponse getKidWeekInfo(@AuthenticationPrincipal User authUser, - @PathVariable Long kidId) { + // 자녀의 주차 정보 가져오기 API Mapper + @Transactional(readOnly = true) + public KidWeekDTO getKidWeekInfo(User authUser, Long kidId) { - log.info("api = 자녀의 주차 정보 가져오기, user = {}, kid = {}", authUser.getUsername(), kidId); + userRoleValidation(authUser, false); Kid kid = kidService.getKid(kidId); User kidUser = kid.getUser(); familyUserService.checkSameFamily(authUser, kidUser); @@ -299,65 +265,56 @@ public CommonResponse getKidWeekInfo(@AuthenticationPrincipal User a .filter(challenge -> challenge.getChallengeStatus() == ChallengeStatus.WALKING).collect( Collectors.toList()); WeekDTO weekDTO = challengeService.readWeekInfo(kidWalkingChallengeList); - KidWeekDTO kidWeekDTO = new KidWeekDTO(kid, weekDTO); - return CommonResponse.onSuccess(kidWeekDTO); + return new KidWeekDTO(kid, weekDTO); } - @ApiOperation(value = "완주한 돈길 리스트 가져오기") - @GetMapping(value = "/achieved", produces = "application/json; charset=utf-8") - public CommonResponse getAchievedListChallenge( - @AuthenticationPrincipal User authUser, @RequestParam String interestPayment) { + // 완주한 돈길 리스트 가져오기 API Mapper + @Transactional(readOnly = true) + public AchievedChallengeListDTO getAchievedListChallenge(User authUser, + String interestPayment) { - log.info("api = 완주한 돈길 리스트 가져오기, user = {}", authUser.getUsername()); + userRoleValidation(authUser, true); List achievedChallengeUserList = challengeUserService.getAchievedChallengeUserList( authUser); - AchievedChallengeListDTO achievedChallengeListDTO = challengeService.readAchievedChallenge( + + return challengeService.readAchievedChallenge( achievedChallengeUserList, interestPayment); - - return CommonResponse.onSuccess(achievedChallengeListDTO); } - @ApiOperation(value = "자녀의 완주한 돈길 리스트 가져오기") - @GetMapping(value = "kid/achieved/{kidId}", produces = "application/json; charset=utf-8") - public CommonResponse getKidAchievedListChallenge( - @AuthenticationPrincipal User authUser, @PathVariable Long kidId, - @RequestParam String interestPayment) { + // 자녀의 완주한 돈길 리스트 가져오기 API Mapper + @Transactional(readOnly = true) + public KidAchievedChallengeListDTO getKidAchievedListChallenge(User authUser, Long kidId, + String interestPayment) { - log.info("api = 완주한 돈길 리스트 가져오기, user = {}, kid = {}", authUser.getUsername(), kidId); + userRoleValidation(authUser, false); Kid kid = kidService.getKid(kidId); User kidUser = kid.getUser(); familyUserService.checkSameFamily(authUser, kidUser); List achievedChallengeUserList = challengeUserService.getAchievedChallengeUserList( kidUser); - KidAchievedChallengeListDTO kidAchievedChallengeListDTO = challengeService.readKidAchievedChallenge( - authUser, achievedChallengeUserList, interestPayment, kidId); - return CommonResponse.onSuccess(kidAchievedChallengeListDTO); + return challengeService.readKidAchievedChallenge( + authUser, achievedChallengeUserList, interestPayment, kidId); } - @ApiOperation(value = "완주한 돈길에 이자 지급하기") - @PatchMapping(value = "/interest-payment/{challengeId}", produces = "application/json; charset=utf-8") - public CommonResponse patchInterestPayment( - @AuthenticationPrincipal User authUser, - @PathVariable Long challengeId) { + // 이자 지급 API Mapper + @Transactional + public AchievedChallengeDTO patchInterestPayment(User authUser, Long challengeId) { - log.info("api = 완주한 돈길에 이자 지급, user = {}, challengeId = {}", authUser.getUsername(), - challengeId); - AchievedChallengeDTO achievedChallengeDTO = challengeService.updateChallengeInterestPayment( + sundayValidation(); + userRoleValidation(authUser, false); + return challengeService.updateChallengeInterestPayment( authUser, challengeId); - - return CommonResponse.onSuccess(achievedChallengeDTO); } - @ApiOperation(value = "돈길 걷기") - @PatchMapping(value = "/{challengeId}/progress", produces = "application/json; charset=utf-8") - public CommonResponse patchProgress(@AuthenticationPrincipal User authUser, - @PathVariable Long challengeId) { + // 돈길 걷기 API Mapper + @Transactional + public ProgressDTO patchProgress(User authUser, Long challengeId) { - log.info("api = 돈길 걷기, user = {}, challengeId = {}", authUser, challengeId); + sundayValidation(); userRoleValidation(authUser, true); Challenge challenge = challengeService.readChallenge(challengeId); if (challenge.getChallengeStatus() != ChallengeStatus.WALKING) { @@ -374,7 +331,7 @@ public CommonResponse patchProgress(@AuthenticationPrincipal User a challenge); } - return CommonResponse.onSuccess(progressDTO); + return progressDTO; } // 일요일 처리 validation diff --git a/src/main/java/com/ceos/bankids/service/ChallengeUserService.java b/src/main/java/com/ceos/bankids/service/ChallengeUserService.java index 5cb78d60..56fe1b8a 100644 --- a/src/main/java/com/ceos/bankids/service/ChallengeUserService.java +++ b/src/main/java/com/ceos/bankids/service/ChallengeUserService.java @@ -13,8 +13,6 @@ public interface ChallengeUserService { public ChallengeUser getChallengeUser(Long challengeId); - public void deleteChallengeUser(User authUser, Long challengeId); - public List getChallengeUserList(User authUser, String status); public List getAchievedChallengeUserList(User authUser); diff --git a/src/main/java/com/ceos/bankids/service/ChallengeUserServiceImpl.java b/src/main/java/com/ceos/bankids/service/ChallengeUserServiceImpl.java index 4f7c966b..0183a2f9 100644 --- a/src/main/java/com/ceos/bankids/service/ChallengeUserServiceImpl.java +++ b/src/main/java/com/ceos/bankids/service/ChallengeUserServiceImpl.java @@ -42,17 +42,7 @@ public ChallengeUser getChallengeUser(Long challengeId) { return challengeUser; } - @Override - public void deleteChallengeUser(User authUser, Long challengeId) { - ChallengeUser deleteChallengeUser = cuRepo.findByChallengeId(challengeId).orElseThrow( - () -> new BadRequestException(ErrorCode.NOT_EXIST_CHALLENGE_USER.getErrorCode())); - if (deleteChallengeUser.getUser().getId() != authUser.getId()) { - throw new ForbiddenException(ErrorCode.NOT_MATCH_CHALLENGE_USER.getErrorCode()); - } - - cuRepo.delete(deleteChallengeUser); - } - + @Transactional @Override public List getChallengeUserList(User authUser, String status) { if (Objects.equals(status, "pending")) { @@ -95,6 +85,7 @@ public void deleteAllChallengeUser(User authUser) { cuRepo.deleteAll(challengeUserList); } + @Transactional(readOnly = true) public void checkMaxChallengeCount(User user) { List walkingChallengeList = cuRepo.findByUserId(user.getId()).stream() .map(ChallengeUser::getChallenge) @@ -105,6 +96,7 @@ public void checkMaxChallengeCount(User user) { } } + @Transactional(readOnly = true) public List getChallengeUserListByContractUser(User user) { return cuRepo.findByChallenge_ContractUserId(user.getId()); diff --git a/src/main/java/com/ceos/bankids/service/KidService.java b/src/main/java/com/ceos/bankids/service/KidService.java index e79ef178..f06c1ba6 100644 --- a/src/main/java/com/ceos/bankids/service/KidService.java +++ b/src/main/java/com/ceos/bankids/service/KidService.java @@ -12,7 +12,7 @@ public interface KidService { public void deleteKid(User user); - public void checkKidDeleteChallenge(User user); + public void checkKidDeleteChallenge(User user, Challenge challenge); public void userLevelUp(User contractUser, User user); diff --git a/src/main/java/com/ceos/bankids/service/KidServiceImpl.java b/src/main/java/com/ceos/bankids/service/KidServiceImpl.java index 5eb1f063..b0208642 100644 --- a/src/main/java/com/ceos/bankids/service/KidServiceImpl.java +++ b/src/main/java/com/ceos/bankids/service/KidServiceImpl.java @@ -45,11 +45,12 @@ public void deleteKid(User user) { @Transactional(readOnly = true) @Override - public void checkKidDeleteChallenge(User user) { + public void checkKidDeleteChallenge(User user, Challenge challenge) { if (user.getKid() == null) { throw new BadRequestException(ErrorCode.NOT_EXIST_KID.getErrorCode()); } + // Todo: 돈길 만든지 1주일 안지났으면 그냥 통과 // 현재 시간 가져오기 LocalDateTime now = LocalDateTime.now(); @@ -57,6 +58,15 @@ public void checkKidDeleteChallenge(User user) { Calendar nowCal = Calendar.getInstance(); nowCal.setTime(nowTimestamp); + Timestamp challengeCreatedAt = challenge.getCreatedAt(); + Calendar challengeCal = Calendar.getInstance(); + challengeCal.setTime(challengeCreatedAt); + int currentWeek = nowCal.get(Calendar.WEEK_OF_YEAR); + + if (nowCal.get(Calendar.DAY_OF_YEAR) - challengeCal.get(Calendar.DAY_OF_YEAR) < 7) { + return; + } + Kid kid = user.getKid(); if (kid.getDeleteChallenge() != null) { @@ -66,7 +76,6 @@ public void checkKidDeleteChallenge(User user) { deleteCal.setTime(deleteChallenge); int lastDeleteWeek = deleteCal.get(Calendar.WEEK_OF_YEAR); - int currentWeek = nowCal.get(Calendar.WEEK_OF_YEAR); int diffYears = nowCal.get(Calendar.YEAR) - deleteCal.get(Calendar.YEAR); int l = deleteCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ? lastDeleteWeek - 1 : lastDeleteWeek;