From 34b21872c48d95523bbda0f7f69afd4411659bc1 Mon Sep 17 00:00:00 2001 From: HyeokJoon Date: Thu, 18 Jul 2024 07:04:02 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[FIX]/#80-Share=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=EC=97=90=EC=84=9C=20HashMap=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EA=B0=80=20=EB=84=88=EB=AC=B4=20=EC=BB=A4=EC=A7=80?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/chimaera/wagubook/entity/Share.java | 1 + .../wagubook/exception/ErrorCode.java | 9 ++-- .../wagubook/service/ShareService.java | 45 +++++++++++++++---- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/chimaera/wagubook/entity/Share.java b/src/main/java/com/chimaera/wagubook/entity/Share.java index 767beb0..1db5d92 100644 --- a/src/main/java/com/chimaera/wagubook/entity/Share.java +++ b/src/main/java/com/chimaera/wagubook/entity/Share.java @@ -18,6 +18,7 @@ public class Share { private Long id; private String url; // 공유 url private LocalDateTime localDateTime; // 공유 시간 + @Lob private HashMap voteStoreList; } diff --git a/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java b/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java index dfaf90e..5a0afe2 100644 --- a/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java +++ b/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java @@ -22,6 +22,8 @@ public enum ErrorCode { WRONG_NAME(CONFLICT, "이름은 한글로만 입력 가능합니다."), WRONG_PHONE_NUMBER(CONFLICT, "휴대폰 번호는 숫자로만 입력 가능합니다."), WRONG_PASSWORD(CONFLICT, "비밀번호는 영문, 숫자, 특수문자 포함 8자 이상입니다."), + OVER_MAX(BAD_REQUEST, "최대 10개까지만 투표에 추가할 수 있습니다."), + ALREADY_ADD(BAD_REQUEST, "이미 추가된 가게입니다."), // 401 UNAUTHORIZED: 인증되지 않은 사용자 @@ -36,6 +38,8 @@ public enum ErrorCode { NOT_FOUND_POST(NOT_FOUND, "해당 포스트를 찾을 수 없습니다."), NOT_FOUND_MEMBER(NOT_FOUND, "해당 회원을 찾을 수 없습니다."), NOT_FOUND_FOLLOW(NOT_FOUND, "성립되지 않은 팔로우 관계입니다."), + NOT_FOUND_SHARE(NOT_FOUND, "공유방을 찾을 수 없습니다."), + NOT_FOUND_STORE(NOT_FOUND, "해당 스토어를 찾을 수 없습니다."), // 409 CONFLICT: 중복된 리소스 (요청이 현재 서버 상태와 충돌될 때) @@ -43,10 +47,7 @@ public enum ErrorCode { DUPLICATE_USERNAME(CONFLICT, "중복된 아이디입니다."), ALREADY_FOLLOW(CONFLICT, "해당 사용자가 이미 팔로우한 회원입니다."), DUPLICATE_POST_MENU(CONFLICT, "이미 해당 포스트에 작성된 메뉴 이름입니다."), - DUPLICATE_POST_STORE(CONFLICT, "이미 해당 사용자가 포스트를 작성한 식당입니다."), - - // 500 INTERNAL SERVER ERROR - ; + DUPLICATE_POST_STORE(CONFLICT, "이미 해당 사용자가 포스트를 작성한 식당입니다."); private final HttpStatus httpStatus; diff --git a/src/main/java/com/chimaera/wagubook/service/ShareService.java b/src/main/java/com/chimaera/wagubook/service/ShareService.java index c7b3f96..76de440 100644 --- a/src/main/java/com/chimaera/wagubook/service/ShareService.java +++ b/src/main/java/com/chimaera/wagubook/service/ShareService.java @@ -3,6 +3,8 @@ import com.chimaera.wagubook.dto.response.StoreResponse; import com.chimaera.wagubook.entity.Share; import com.chimaera.wagubook.entity.Store; +import com.chimaera.wagubook.exception.CustomException; +import com.chimaera.wagubook.exception.ErrorCode; import com.chimaera.wagubook.repository.share.ShareRepository; import com.chimaera.wagubook.repository.store.StoreRepository; import lombok.RequiredArgsConstructor; @@ -76,23 +78,37 @@ public String findShareId(String url, Long memberId) { @Transactional public String addVoteStore(String shareId, String storeId) { //가게 찾기 + Optional os =storeRepository.findById(Long.parseLong(storeId)); + if(os.isEmpty()){ + throw new CustomException(ErrorCode.NOT_FOUND_STORE); + } Store findStore = storeRepository.findById(Long.parseLong(storeId)).get(); - //가게 추가 - Share share = shareRepository.findById(Long.parseLong(shareId)).get(); + + + //공유방에서 리스트 찾기 + Optional osh = shareRepository.findById(Long.parseLong(shareId)); + if(osh.isEmpty()){ + throw new CustomException(ErrorCode.NOT_FOUND_SHARE); + } + Share share = osh.get(); HashMap voteStoreList = share.getVoteStoreList(); + //이미 포함하고 있으면 if(voteStoreList.containsKey(findStore.getId())) - return "이미 추가된 가게입니다."; + throw new CustomException(ErrorCode.ALREADY_ADD); //최대 개수를 넘은 경우 - if(voteStoreList.size() == 10){ - return "최대 10개까지만 투표에 추가할 수 있습니다."; - } + if(voteStoreList.size() == 10) + throw new CustomException(ErrorCode.OVER_MAX); voteStoreList.put(findStore.getId(), 0); //변경사항 저장 shareRepository.save(share); + System.out.println("[after add]"); + for (Map.Entry entry : voteStoreList.entrySet()) { + System.out.println("key : " + entry.getKey() + " value : " + entry.getValue()); + } return "투표에 추가되었습니다."; } @@ -106,9 +122,11 @@ public String deleteVoteStore(String shareId, String storeId) { HashMap voteStoreList = share.getVoteStoreList(); //투표 리스트에 있으면 제거 - if(voteStoreList.containsKey(findStore.getId())){ - voteStoreList.remove(findStore.getId()); - + if(voteStoreList.remove(findStore.getId())!=null){ + System.out.println("[after delete]"); + for (Map.Entry entry : voteStoreList.entrySet()) { + System.out.println("key : " + entry.getKey() + " value : " + entry.getValue()); + } shareRepository.save(share); return "투표에서 삭제되었습니다."; } @@ -124,6 +142,10 @@ public String like(String shareId, String storeId) { voteStoreList.replace(key, voteStoreList.get(key)+1); System.out.println("value : " + voteStoreList.get(key)); + System.out.println("[after like]"); + for (Map.Entry entry : voteStoreList.entrySet()) { + System.out.println("key : " + entry.getKey() + " value : " + entry.getValue()); + } shareRepository.save(share); return "투표 성공"; } @@ -136,6 +158,11 @@ public String likeCancel(String shareId, String storeId) { Long key = Long.parseLong(storeId); voteStoreList.replace(key, voteStoreList.get(key)-1); shareRepository.save(share); + + System.out.println("[after cancel]"); + for (Map.Entry entry : voteStoreList.entrySet()) { + System.out.println("key : " + entry.getKey() + " value : " + entry.getValue()); + } return "투표 취소"; } From 3df44915fd7e523cb495f525293b1ce9d8eb7cc3 Mon Sep 17 00:00:00 2001 From: HyeokJoon <87688726+HyeokJoon@users.noreply.github.com> Date: Thu, 18 Jul 2024 07:08:14 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[FIX]/#80-ErrorCode=EC=B6=94=EA=B0=80.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/chimaera/wagubook/exception/ErrorCode.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java b/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java index 5a0afe2..fa5711c 100644 --- a/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java +++ b/src/main/java/com/chimaera/wagubook/exception/ErrorCode.java @@ -47,9 +47,12 @@ public enum ErrorCode { DUPLICATE_USERNAME(CONFLICT, "중복된 아이디입니다."), ALREADY_FOLLOW(CONFLICT, "해당 사용자가 이미 팔로우한 회원입니다."), DUPLICATE_POST_MENU(CONFLICT, "이미 해당 포스트에 작성된 메뉴 이름입니다."), - DUPLICATE_POST_STORE(CONFLICT, "이미 해당 사용자가 포스트를 작성한 식당입니다."); + DUPLICATE_POST_STORE(CONFLICT, "이미 해당 사용자가 포스트를 작성한 식당입니다."), + + // 500 INTERNAL SERVER ERROR + ; private final HttpStatus httpStatus; private final String message; -} \ No newline at end of file +}