From f399095a4e87333d52a66d77455baf3be2151ec6 Mon Sep 17 00:00:00 2001 From: jiyeon Date: Sat, 9 Sep 2023 15:03:03 +0900 Subject: [PATCH 1/3] feat: Errorhandling if couple is already connected --- .../com/universe/uni/exception/dto/ErrorType.java | 2 ++ .../com/universe/uni/repository/UserRepository.java | 2 ++ .../java/com/universe/uni/service/CoupleService.java | 11 +++++++++++ 3 files changed, 15 insertions(+) diff --git a/src/main/java/com/universe/uni/exception/dto/ErrorType.java b/src/main/java/com/universe/uni/exception/dto/ErrorType.java index 35b71c7..eeedb4f 100644 --- a/src/main/java/com/universe/uni/exception/dto/ErrorType.java +++ b/src/main/java/com/universe/uni/exception/dto/ErrorType.java @@ -65,6 +65,8 @@ public enum ErrorType { */ USER_ALREADY_EXISTS_EXCEPTION(HttpStatus.CONFLICT, "UE10001", "이미 존재하는 유저에 대한 생성에 대한 경우입니다."), + COUPLE_ALREADY_CONNECTED(HttpStatus.CONFLICT, "UE10002", + "이미 커플이 연결된 초대코드입니다."), /** * 415 Unsupported Media Type diff --git a/src/main/java/com/universe/uni/repository/UserRepository.java b/src/main/java/com/universe/uni/repository/UserRepository.java index 01a16f9..8d71730 100644 --- a/src/main/java/com/universe/uni/repository/UserRepository.java +++ b/src/main/java/com/universe/uni/repository/UserRepository.java @@ -16,4 +16,6 @@ public interface UserRepository extends JpaRepository { User findByCoupleIdAndIdNot(Long coupleId, Long userId); User findByCoupleId(Long coupleId); + + int countByCoupleId(Long coupleId); } diff --git a/src/main/java/com/universe/uni/service/CoupleService.java b/src/main/java/com/universe/uni/service/CoupleService.java index ecd8b26..2854ff9 100644 --- a/src/main/java/com/universe/uni/service/CoupleService.java +++ b/src/main/java/com/universe/uni/service/CoupleService.java @@ -1,5 +1,7 @@ package com.universe.uni.service; +import static com.universe.uni.exception.dto.ErrorType.*; + import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.List; @@ -15,11 +17,13 @@ import com.universe.uni.dto.response.CoupleConnectionResponseDto; import com.universe.uni.dto.response.CoupleDto; import com.universe.uni.exception.BadRequestException; +import com.universe.uni.exception.ConflictException; import com.universe.uni.exception.dto.ErrorType; import com.universe.uni.mapper.CoupleMapper; import com.universe.uni.repository.CoupleRepository; import com.universe.uni.repository.UserRepository; +import feign.FeignException; import lombok.RequiredArgsConstructor; @Service @@ -61,12 +65,19 @@ public CoupleDto findCouple(Long coupleId) { public void joinCouple(Long userId, String inviteCode) { final Couple couple = coupleRepository.findByInviteCode(inviteCode) .orElseThrow(() -> new BadRequestException(ErrorType.INVALID_INVITE_CODE)); + validateIfCoupleConnected(couple); final User user = userRepository.findById(userId) .orElseThrow(() -> new BadRequestException(ErrorType.USER_NOT_EXISTENT)); user.connectCouple(couple); } + private void validateIfCoupleConnected(Couple couple) { + if(userRepository.countByCoupleId(couple.getId()) >= 2) { + throw new ConflictException(COUPLE_ALREADY_CONNECTED); + } + } + @Override @Transactional public CoupleDto updateCoupleStartDate(Long coupleId, String startDate) { From 923298ff5cc20633a2b8823ef61d874ccf82c5bc Mon Sep 17 00:00:00 2001 From: jiyeon Date: Sat, 9 Sep 2023 15:46:29 +0900 Subject: [PATCH 2/3] feat: Disconnect couple --- .../com/universe/uni/controller/CoupleController.java | 9 +++++++++ .../java/com/universe/uni/service/CoupleService.java | 9 +++++++++ .../com/universe/uni/service/CoupleServiceContract.java | 3 +++ 3 files changed, 21 insertions(+) diff --git a/src/main/java/com/universe/uni/controller/CoupleController.java b/src/main/java/com/universe/uni/controller/CoupleController.java index f26b67b..3514fca 100644 --- a/src/main/java/com/universe/uni/controller/CoupleController.java +++ b/src/main/java/com/universe/uni/controller/CoupleController.java @@ -2,8 +2,10 @@ import org.springframework.http.HttpStatus; 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.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; @@ -57,4 +59,11 @@ public CoupleConnectionResponseDto checkConnection( ) { return coupleService.checkConnection(userId); } + + @DeleteMapping("") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void disconnectCouple(@AuthenticationPrincipal Long userId) { + coupleService.disconnectCouple(userId); + } + } diff --git a/src/main/java/com/universe/uni/service/CoupleService.java b/src/main/java/com/universe/uni/service/CoupleService.java index 2854ff9..498e9f7 100644 --- a/src/main/java/com/universe/uni/service/CoupleService.java +++ b/src/main/java/com/universe/uni/service/CoupleService.java @@ -106,4 +106,13 @@ public CoupleConnectionResponseDto checkConnection(Long userId) { public void deleteCouple(Long coupleId) { coupleRepository.deleteById(coupleId); } + + @Override + @Transactional + public void disconnectCouple(Long userId) { + final User user = userRepository.findById(userId) + .orElseThrow(() -> new BadRequestException(ErrorType.USER_NOT_EXISTENT)); + final Couple couple = user.getCouple(); + deleteCouple(couple.getId()); + } } diff --git a/src/main/java/com/universe/uni/service/CoupleServiceContract.java b/src/main/java/com/universe/uni/service/CoupleServiceContract.java index b2d6427..59bde3c 100644 --- a/src/main/java/com/universe/uni/service/CoupleServiceContract.java +++ b/src/main/java/com/universe/uni/service/CoupleServiceContract.java @@ -25,4 +25,7 @@ CoupleDto createCoupleByStartDate( @Transactional void deleteCouple(Long coupleId); + + @Transactional + void disconnectCouple(Long userId); } From 75d3cc2ca91a85226a652e767a95cee4fcb570fd Mon Sep 17 00:00:00 2001 From: jiyeon Date: Sat, 9 Sep 2023 16:20:24 +0900 Subject: [PATCH 3/3] feat: Edit function name --- src/main/java/com/universe/uni/service/CoupleService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/universe/uni/service/CoupleService.java b/src/main/java/com/universe/uni/service/CoupleService.java index 498e9f7..dbf58fa 100644 --- a/src/main/java/com/universe/uni/service/CoupleService.java +++ b/src/main/java/com/universe/uni/service/CoupleService.java @@ -65,14 +65,14 @@ public CoupleDto findCouple(Long coupleId) { public void joinCouple(Long userId, String inviteCode) { final Couple couple = coupleRepository.findByInviteCode(inviteCode) .orElseThrow(() -> new BadRequestException(ErrorType.INVALID_INVITE_CODE)); - validateIfCoupleConnected(couple); + validateCoupleConnected(couple); final User user = userRepository.findById(userId) .orElseThrow(() -> new BadRequestException(ErrorType.USER_NOT_EXISTENT)); user.connectCouple(couple); } - private void validateIfCoupleConnected(Couple couple) { + private void validateCoupleConnected(Couple couple) { if(userRepository.countByCoupleId(couple.getId()) >= 2) { throw new ConflictException(COUPLE_ALREADY_CONNECTED); }