From 1df3e9e2d61f6713e57e5201adc839a64c28ae19 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 9 Jan 2024 23:09:48 +0900 Subject: [PATCH 1/2] =?UTF-8?q?#41=20[feat]=20API=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mile/controller/post/PostController.java | 12 ++++++++++++ .../controller/post/PostControllerSwagger.java | 17 +++++++++++++++++ .../mile/exception/message/SuccessMessage.java | 1 + 3 files changed, 30 insertions(+) diff --git a/module-api/src/main/java/com/mile/controller/post/PostController.java b/module-api/src/main/java/com/mile/controller/post/PostController.java index e0614eb5..87c16c3b 100644 --- a/module-api/src/main/java/com/mile/controller/post/PostController.java +++ b/module-api/src/main/java/com/mile/controller/post/PostController.java @@ -9,6 +9,7 @@ import com.mile.post.service.dto.PostPutRequest; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -23,6 +24,7 @@ @RestController @RequestMapping("/api/post") @RequiredArgsConstructor +@Slf4j public class PostController implements PostControllerSwagger { private final PostService postService; @@ -101,4 +103,14 @@ public SuccessResponse putPost( postService.updatePost(postId, Long.valueOf(principal.getName()), putRequest); return SuccessResponse.of(SuccessMessage.POST_PUT_SUCCESS); } + + @DeleteMapping("/{postId}") + @Override + public SuccessResponse deletePost( + @PathVariable final Long postId, + final Principal principal + ) { + postService.deletePost(postId, Long.valueOf(principal.getName())); + return SuccessResponse.of(SuccessMessage.POST_DELETE_SUCCESS); + } } diff --git a/module-api/src/main/java/com/mile/controller/post/PostControllerSwagger.java b/module-api/src/main/java/com/mile/controller/post/PostControllerSwagger.java index e3b31f36..39725353 100644 --- a/module-api/src/main/java/com/mile/controller/post/PostControllerSwagger.java +++ b/module-api/src/main/java/com/mile/controller/post/PostControllerSwagger.java @@ -144,4 +144,21 @@ SuccessResponse putPost( @RequestBody final PostPutRequest putRequest, final Principal principal ); + + @Operation(summary = "글 삭제") + @ApiResponses( + value = { + @ApiResponse(responseCode = "200", description = "글 삭제가 완료되었습니다."), + @ApiResponse(responseCode = "404", description = "해당 글은 존재하지 않습니다.", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse(responseCode = "403", description = "해당 사용자는 글 수정/삭제 권한이 없습니다.", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", + content = @Content(schema = @Schema(implementation = ErrorResponse.class))) + } + ) + SuccessResponse deletePost( + @PathVariable final Long postId, + final Principal principal + ); } diff --git a/module-common/src/main/java/com/mile/exception/message/SuccessMessage.java b/module-common/src/main/java/com/mile/exception/message/SuccessMessage.java index 5ce6de93..0c3257b1 100644 --- a/module-common/src/main/java/com/mile/exception/message/SuccessMessage.java +++ b/module-common/src/main/java/com/mile/exception/message/SuccessMessage.java @@ -19,6 +19,7 @@ public enum SuccessMessage { CURIOUS_DELETE_SUCCESS(HttpStatus.OK.value(), "궁금해요 삭제가 완료되었습니다."), WRITER_AUTHENTIACTE_SUCCESS(HttpStatus.OK.value(), "게시글 권한이 확인되었습니다."), POST_PUT_SUCCESS(HttpStatus.OK.value(), "글 수정이 완료되었습니다."), + POST_DELETE_SUCCESS(HttpStatus.OK.value(), "글 삭제가 완료되었습니다."), /* 201 CREATED */ From 3b3478474d6f26692c10dfcf7617f46f86b68db1 Mon Sep 17 00:00:00 2001 From: sohyundoh Date: Tue, 9 Jan 2024 23:24:16 +0900 Subject: [PATCH 2/2] =?UTF-8?q?#41=20[feat]=20=EA=B8=80=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20API=20=EC=88=98=EC=A0=95=20(s3=20=EC=97=B0=EB=8F=99?= =?UTF-8?q?)=20=EB=B0=8F=20Post=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module-domain/build.gradle | 1 + .../comment/repository/CommentRepository.java | 3 ++ .../mile/comment/service/CommentService.java | 6 ++++ .../curious/repository/CuriousRepository.java | 2 ++ .../mile/curious/serivce/CuriousService.java | 11 ++++-- .../main/java/com/mile/post/domain/Post.java | 2 +- .../com/mile/post/service/PostService.java | 34 +++++++++++++++++++ .../java/com/mile/aws/utils/S3Service.java | 2 +- 8 files changed, 57 insertions(+), 4 deletions(-) diff --git a/module-domain/build.gradle b/module-domain/build.gradle index dc293c35..d0b367bd 100644 --- a/module-domain/build.gradle +++ b/module-domain/build.gradle @@ -4,6 +4,7 @@ jar { enabled = true } dependencies { implementation project(':module-auth') implementation project(':module-common') + implementation project(':module-external') //Swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' diff --git a/module-domain/src/main/java/com/mile/comment/repository/CommentRepository.java b/module-domain/src/main/java/com/mile/comment/repository/CommentRepository.java index ad0166df..09919acd 100644 --- a/module-domain/src/main/java/com/mile/comment/repository/CommentRepository.java +++ b/module-domain/src/main/java/com/mile/comment/repository/CommentRepository.java @@ -1,6 +1,7 @@ package com.mile.comment.repository; import com.mile.comment.domain.Comment; +import com.mile.post.domain.Post; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -13,4 +14,6 @@ public interface CommentRepository extends JpaRepository { Long findUserIdByComment(@Param(value = "comment") final Comment comment); List findByPostId(final Long postId); + + void deleteAllByPost(final Post post); } \ No newline at end of file diff --git a/module-domain/src/main/java/com/mile/comment/service/CommentService.java b/module-domain/src/main/java/com/mile/comment/service/CommentService.java index 7c8be211..e8d9709e 100644 --- a/module-domain/src/main/java/com/mile/comment/service/CommentService.java +++ b/module-domain/src/main/java/com/mile/comment/service/CommentService.java @@ -95,4 +95,10 @@ private boolean isCommentListNull( ) { return commentList.isEmpty(); } + + public void deleteAllByPost( + final Post post + ) { + commentRepository.deleteAllByPost(post); + } } diff --git a/module-domain/src/main/java/com/mile/curious/repository/CuriousRepository.java b/module-domain/src/main/java/com/mile/curious/repository/CuriousRepository.java index b9a98801..45395973 100644 --- a/module-domain/src/main/java/com/mile/curious/repository/CuriousRepository.java +++ b/module-domain/src/main/java/com/mile/curious/repository/CuriousRepository.java @@ -7,4 +7,6 @@ public interface CuriousRepository extends JpaRepository { boolean existsByPostAndUser(Post post, User user); Curious findByPostAndUser(Post post, User user); + + void deleteAllByPost(final Post post); } diff --git a/module-domain/src/main/java/com/mile/curious/serivce/CuriousService.java b/module-domain/src/main/java/com/mile/curious/serivce/CuriousService.java index 63ee5002..40aae9ff 100644 --- a/module-domain/src/main/java/com/mile/curious/serivce/CuriousService.java +++ b/module-domain/src/main/java/com/mile/curious/serivce/CuriousService.java @@ -1,10 +1,11 @@ package com.mile.curious.serivce; + +import com.mile.curious.domain.Curious; import com.mile.curious.repository.CuriousRepository; import com.mile.curious.serivce.dto.CuriousInfoResponse; import com.mile.exception.message.ErrorMessage; -import com.mile.exception.model.NotFoundException; -import com.mile.curious.domain.Curious; import com.mile.exception.model.ConflictException; +import com.mile.exception.model.NotFoundException; import com.mile.post.domain.Post; import com.mile.user.domain.User; import lombok.RequiredArgsConstructor; @@ -44,4 +45,10 @@ public void checkCuriousExists(final Post post, final User user) { public CuriousInfoResponse getCuriousInfoResponse(final Post post, final User user) { return CuriousInfoResponse.of(curiousRepository.existsByPostAndUser(post, user), post.getCuriousCount()); } + + public void deleteAllByPost( + final Post post + ) { + curiousRepository.deleteAllByPost(post); + } } \ No newline at end of file diff --git a/module-domain/src/main/java/com/mile/post/domain/Post.java b/module-domain/src/main/java/com/mile/post/domain/Post.java index 078ba54d..49616d08 100644 --- a/module-domain/src/main/java/com/mile/post/domain/Post.java +++ b/module-domain/src/main/java/com/mile/post/domain/Post.java @@ -24,8 +24,8 @@ public class Post extends BaseTimeEntity { private String imageUrl; @ManyToOne private WriterName writerName; - private int curiousCount; + private boolean containPhoto; private boolean anonymous; private boolean isTemporary; diff --git a/module-domain/src/main/java/com/mile/post/service/PostService.java b/module-domain/src/main/java/com/mile/post/service/PostService.java index 8ccaa980..84eb692f 100644 --- a/module-domain/src/main/java/com/mile/post/service/PostService.java +++ b/module-domain/src/main/java/com/mile/post/service/PostService.java @@ -1,5 +1,6 @@ package com.mile.post.service; +import com.mile.aws.utils.S3Service; import com.mile.comment.service.CommentService; import com.mile.curious.serivce.CuriousService; import com.mile.curious.serivce.dto.CuriousInfoResponse; @@ -30,6 +31,7 @@ public class PostService { private final CuriousService curiousService; private final UserService userService; private final TopicService topicService; + private final S3Service s3Service; @Transactional public void createCommentOnPost( @@ -119,4 +121,36 @@ public WriterAuthenticateResponse getAuthenticateWriter( ) { return WriterAuthenticateResponse.of(postAuthenticateService.authenticateWriterWithPost(postId, userId)); } + + @Transactional + public void deletePost( + final Long postId, + final Long userId + ) { + postAuthenticateService.authenticateWriterWithPost(postId, userId); + delete(postId); + } + + private void delete( + final Long postId + ) { + Post post = findById(postId); + deleteRelatedData(post); + postRepository.delete(post); + } + + private void deleteRelatedData( + final Post post + ) { + if(post.isContainPhoto()) { + deleteS3File(post.getImageUrl()); + } + curiousService.deleteAllByPost(post); + commentService.deleteAllByPost(post); + } + private void deleteS3File( + final String key + ) { + s3Service.deleteImage(key); + } } diff --git a/module-external/src/main/java/com/mile/aws/utils/S3Service.java b/module-external/src/main/java/com/mile/aws/utils/S3Service.java index 5555435b..90f46b0b 100644 --- a/module-external/src/main/java/com/mile/aws/utils/S3Service.java +++ b/module-external/src/main/java/com/mile/aws/utils/S3Service.java @@ -89,7 +89,7 @@ public PreSignedUrlResponse getUploadPreSignedUrl(final S3BucketDirectory prefix } // S3 버킷에 업로드된 이미지 삭제 - public void deleteImage(final String key) throws IOException { + public void deleteImage(final String key) { try { final S3Client s3Client = awsConfig.getS3Client();