From 75acd13fe37f949cd6d30fd592be88f16b11b3b0 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 12 May 2024 18:30:23 +0900 Subject: [PATCH 1/7] [chore] fix mysql dependency --- build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 9c9e463..3ca0a6c 100644 --- a/build.gradle +++ b/build.gradle @@ -33,8 +33,7 @@ dependencies { // Database implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - runtimeOnly 'com.mysql:mysql-connector-j' - + runtimeOnly("com.mysql:mysql-connector-j") // Log implementation 'org.springframework.boot:spring-boot-starter-log4j2' From fa97640b86758ba4f1459b67cbe42d0b69f5b7ab Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 12 May 2024 18:31:12 +0900 Subject: [PATCH 2/7] [feat] create codes for update and delete debate participation apis --- .../common/code/failure/DebateParticipationFailureCode.java | 5 +++-- .../common/code/success/DebateParticipationSuccessCode.java | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/common/code/failure/DebateParticipationFailureCode.java b/src/main/java/com/newsnack/www/newsnackserver/common/code/failure/DebateParticipationFailureCode.java index e98d968..0bd2a33 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/common/code/failure/DebateParticipationFailureCode.java +++ b/src/main/java/com/newsnack/www/newsnackserver/common/code/failure/DebateParticipationFailureCode.java @@ -12,11 +12,12 @@ public enum DebateParticipationFailureCode implements FailureCode { */ NOT_PARTICIPATED_DEBATE(HttpStatus.NOT_FOUND,"투표를 먼저 하셔야 합니다"), NOT_FOUND_DEBATE(HttpStatus.NOT_FOUND, "토론이 없습니다"), + NOT_FOUND_DEBATEPARTICIPATION(HttpStatus.NOT_FOUND, "토론에 투표하지 않으셨습니다"), /** * 409 Conflict */ - ALREADY_COMMENTED_DEBATE(HttpStatus.CONFLICT,"이미 작성한 댓글입니다"); - + ALREADY_COMMENTED_DEBATE(HttpStatus.CONFLICT,"이미 작성한 댓글입니다"), + NOT_MY_DEBATE_PARTICIPATION(HttpStatus.CONFLICT, "해당 멤버가 작성한 댓글이 아닙니다"); private final HttpStatus httpStatus; private final String message; diff --git a/src/main/java/com/newsnack/www/newsnackserver/common/code/success/DebateParticipationSuccessCode.java b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/DebateParticipationSuccessCode.java index 25aa445..78e71b7 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/common/code/success/DebateParticipationSuccessCode.java +++ b/src/main/java/com/newsnack/www/newsnackserver/common/code/success/DebateParticipationSuccessCode.java @@ -10,7 +10,9 @@ public enum DebateParticipationSuccessCode implements SuccessCode{ /** * 200 OK **/ - DEBATE_PARTICIPATION_SUCCESS(HttpStatus.OK, "토론 댓글 작성 성공"); + DEBATE_PARTICIPATION_SUCCESS(HttpStatus.OK, "토론 댓글 작성 성공"), + DEBATE_PARTICIPATION_PATCH_SUCCESS(HttpStatus.OK, "토론 댓글 수정 성공"), + DEBATE_PARTICIPATION_DELETE_SUCCESS(HttpStatus.OK, "토론 침여 삭제 성공"); private final HttpStatus httpStatus; private final String message; From 9abb5a63cdc07378a75344961d9760079eded1c9 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 12 May 2024 18:31:54 +0900 Subject: [PATCH 3/7] [feat] create logic for update debateparticipation comment api --- .../service/DebateParticipationService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java b/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java index ffb6031..463f6c7 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java +++ b/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java @@ -56,6 +56,16 @@ public List getDebateComments(Long debateId, Long memberI return debateParticipationJpaRepository.findAllWithMemberAndDebateParticipationHeartByDebateIdOrderByHeartCountDescJPQL(debateId) .stream().map(debateParticipation -> DebateCommentResponse.of(debateParticipation, isLikedByMe(debateParticipation, memberId), isMyDebateParticipation(debateParticipation, memberId))).toList(); } + + @Transactional + public void updateDebateComment(Long debateParticipationId, Long memberId, String content) { + DebateParticipation debateParticipation = debateParticipationJpaRepository.findById(debateParticipationId) + .orElseThrow(() -> new DebateParticipationException(DebateParticipationFailureCode.NOT_FOUND_DEBATEPARTICIPATION)); + if (!isMyDebateParticipation(debateParticipation, memberId)) { + throw new DebateParticipationException(DebateParticipationFailureCode.NOT_MY_DEBATE_PARTICIPATION); + } + debateParticipation.updateComment(content); + } private boolean isLikedByMe(DebateParticipation debateParticipation, Long memberId) { return debateParticipation.getDebateParticipationHearts().stream().anyMatch(commentHeart -> commentHeart.getMember().getId().equals(memberId)); } From b93c53cb0797be6aab567d8f8bc3035f049887e3 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 12 May 2024 18:33:02 +0900 Subject: [PATCH 4/7] [refactor] change request mapping url --- .../controller/DebateController.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java index bb2395a..83aa372 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java @@ -19,41 +19,41 @@ import java.util.List; @RestController -@RequestMapping("/v1/debates") +@RequestMapping("/v1") @RequiredArgsConstructor public class DebateController { private final DebateService debateService; private final DebateParticipationService debateParticipationService; - @GetMapping + @GetMapping("/debates") public NewSnackResponse> getDebates() { return NewSnackResponse.success(DebateSuccessCode.GET_DEBATES_SUCCESS, debateService.getDebates()); } - @GetMapping("/main") + @GetMapping("/debates/main") public NewSnackResponse getMainDebate() { return NewSnackResponse.success(DebateSuccessCode.GET_DEBATES_SUCCESS, debateService.getMainDebate()); } - @GetMapping("/{debateId}") + @GetMapping("/debates/{debateId}") public NewSnackResponse getDebate(@PathVariable Long debateId, @MemberId(isForSecuredApi = false) Long memberId) { return NewSnackResponse.success(DebateSuccessCode.GET_DEBATES_SUCCESS, debateService.getDebate(debateId, memberId)); } - @PostMapping("/{debateId}/votes") + @PostMapping("/debates/{debateId}/votes") public NewSnackResponse voteDebate(@PathVariable Long debateId, @MemberId Long memberId, @RequestBody DebateVoteRequest debateVoteRequest) { debateService.voteDebate(debateId, memberId, debateVoteRequest.vote()); return NewSnackResponse.success(DebateSuccessCode.DEBATE_VOTE_SUCCESS); } - @PostMapping("/{debateId}/comments") + @PostMapping("/debates/{debateId}/comments") public NewSnackResponse createDebateComment(@PathVariable Long debateId, @MemberId Long memberId, @RequestBody @Valid DebateParticipationRequest request) { debateParticipationService.participateDebate(debateId, memberId, request.content()); return NewSnackResponse.success(DebateParticipationSuccessCode.DEBATE_PARTICIPATION_SUCCESS); } - @GetMapping("/{debateId}/comments") + @GetMapping("/debates/{debateId}/comments") public NewSnackResponse> getDebateComments(@PathVariable Long debateId, @MemberId(isForSecuredApi = false) Long memberId, @RequestParam SearchOrder order) { return NewSnackResponse.success(DebateSuccessCode.GET_DEBATES_SUCCESS, debateParticipationService.getDebateComments(debateId, memberId, order)); From 63850640ef71eca967ebe72d11b2c88a73f3db44 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 12 May 2024 18:33:44 +0900 Subject: [PATCH 5/7] [feat] create update debate participation comment api --- .../www/newsnackserver/controller/DebateController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java index 83aa372..538f522 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java @@ -58,4 +58,10 @@ public NewSnackResponse> getDebateComments(@PathVari @RequestParam SearchOrder order) { return NewSnackResponse.success(DebateSuccessCode.GET_DEBATES_SUCCESS, debateParticipationService.getDebateComments(debateId, memberId, order)); } + + @PatchMapping("/debate-participations/{debateParticipationId}") + public NewSnackResponse updateDebateComment(@PathVariable Long debateParticipationId, @MemberId Long memberId, @RequestBody @Valid DebateParticipationRequest request) { + debateParticipationService.updateDebateComment(debateParticipationId, memberId, request.content()); + return NewSnackResponse.success(DebateParticipationSuccessCode.DEBATE_PARTICIPATION_PATCH_SUCCESS); + } } From c7e44214023f48106e8dd65ba627ecf38ac57975 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 12 May 2024 18:35:04 +0900 Subject: [PATCH 6/7] [feat] create logic for delete debate participation --- .../service/DebateParticipationService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java b/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java index 463f6c7..94406ee 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java +++ b/src/main/java/com/newsnack/www/newsnackserver/service/DebateParticipationService.java @@ -66,6 +66,18 @@ public void updateDebateComment(Long debateParticipationId, Long memberId, Strin } debateParticipation.updateComment(content); } + + @Transactional + public void deleteDebateComment(Long debateParticipationId, Long memberId) { + DebateParticipation debateParticipation = debateParticipationJpaRepository.findById(debateParticipationId) + .orElseThrow(() -> new DebateParticipationException(DebateParticipationFailureCode.NOT_FOUND_DEBATEPARTICIPATION)); + if (!isMyDebateParticipation(debateParticipation, memberId)) { + throw new DebateParticipationException(DebateParticipationFailureCode.NOT_MY_DEBATE_PARTICIPATION); + } + debateParticipationJpaRepository.delete(debateParticipation); + } + + private boolean isLikedByMe(DebateParticipation debateParticipation, Long memberId) { return debateParticipation.getDebateParticipationHearts().stream().anyMatch(commentHeart -> commentHeart.getMember().getId().equals(memberId)); } @@ -73,5 +85,4 @@ private boolean isLikedByMe(DebateParticipation debateParticipation, Long member private boolean isMyDebateParticipation(DebateParticipation debateParticipation, Long memberId) { return debateParticipation.getMember().getId().equals(memberId); } - } From 7298f54d32c5dc1b8a362dc6a973929c5fcf817f Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 12 May 2024 18:35:22 +0900 Subject: [PATCH 7/7] [feat] create delete debate participation api --- .../www/newsnackserver/controller/DebateController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java b/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java index 538f522..75c7ed1 100644 --- a/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java +++ b/src/main/java/com/newsnack/www/newsnackserver/controller/DebateController.java @@ -64,4 +64,10 @@ public NewSnackResponse updateDebateComment(@PathVariable Long debateParticip debateParticipationService.updateDebateComment(debateParticipationId, memberId, request.content()); return NewSnackResponse.success(DebateParticipationSuccessCode.DEBATE_PARTICIPATION_PATCH_SUCCESS); } + + @DeleteMapping("/debate-participations/{debateParticipationId}") + public NewSnackResponse deleteDebateComment(@PathVariable Long debateParticipationId, @MemberId Long memberId) { + debateParticipationService.deleteDebateComment(debateParticipationId, memberId); + return NewSnackResponse.success(DebateParticipationSuccessCode.DEBATE_PARTICIPATION_DELETE_SUCCESS); + } }