diff --git a/src/main/java/com/example/mody/domain/post/controller/PostController.java b/src/main/java/com/example/mody/domain/post/controller/PostController.java index db65263d..3daf39fd 100644 --- a/src/main/java/com/example/mody/domain/post/controller/PostController.java +++ b/src/main/java/com/example/mody/domain/post/controller/PostController.java @@ -477,4 +477,70 @@ public BaseResponse updatePost( return BaseResponse.onSuccess(null); } + + @PatchMapping("/{postId}/public") + @Operation(summary = "게시글 나만 보기 수정 API", description = "인증된 유저의 게시글 나만 보기 수정 API.") + @ApiResponses({ + @ApiResponse(responseCode = "COMMON200", description = "게시글 수정 성공"), + @ApiResponse( + responseCode = "COMMON401", + description = "로그인을 하지 않았을 경우", + content = @Content( + mediaType = "application/json", + examples = @ExampleObject( + value = """ + { + "timestamp": "2025-01-26T21:23:51.4515304", + "code": "COMMON401", + "message": "인증이 필요합니다." + } + """ + ) + ) + ), + @ApiResponse( + responseCode = "POST403", + description = "작성자가 아닌 유저의 요청으로 권한이 없는 경우", + content = @Content( + mediaType = "application/json", + examples = @ExampleObject( + value = """ + { + "timestamp": "2025-01-27T20:56:55.7942672", + "code": "POST403", + "message": "해당 게시글에 대한 권한이 없습니다." + } + """ + ) + ) + ), + @ApiResponse( + responseCode = "POST404", + description = "해당 게시물을 찾을 수 없습니다.", + content = @Content( + mediaType = "application/json", + examples = @ExampleObject( + value = """ + { + "timestamp": "2024-01-13T10:00:00", + "isSuccess": "false", + "code": "POST404", + "message": "해당 게시물을 찾을 수 없습니다." + } + """ + ) + ) + ) + }) + @Parameters({ + @Parameter(name = "postId", description = "게시글 아이디, path variable 입니다") + }) + public BaseResponse updatePostIsPublic( + @PathVariable(name = "postId") Long postId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + + postCommandService.togglePostPublic(customUserDetails.getMember(), postId); + return BaseResponse.onSuccess(null); + } + } diff --git a/src/main/java/com/example/mody/domain/post/entity/Post.java b/src/main/java/com/example/mody/domain/post/entity/Post.java index c12ab354..c66ee581 100644 --- a/src/main/java/com/example/mody/domain/post/entity/Post.java +++ b/src/main/java/com/example/mody/domain/post/entity/Post.java @@ -96,4 +96,8 @@ public void updatePost(String content, boolean isPublic) { this.content = content; this.isPublic = isPublic; } + + public void toggleIsPublic() { + this.isPublic = !isPublic; + } } diff --git a/src/main/java/com/example/mody/domain/post/repository/PostCustomRepositoryImpl.java b/src/main/java/com/example/mody/domain/post/repository/PostCustomRepositoryImpl.java index c3fbfeec..12db84a3 100644 --- a/src/main/java/com/example/mody/domain/post/repository/PostCustomRepositoryImpl.java +++ b/src/main/java/com/example/mody/domain/post/repository/PostCustomRepositoryImpl.java @@ -85,7 +85,7 @@ public PostListResponse getPostList(Optional cursorPost, Integer size, Mem .from(qPost) .leftJoin(qPost.member, qMember) .leftJoin(qPost.images, qPostImage) - .leftJoin(qMemberPostLike).on(qMemberPostLike.post.eq(qPost)) + .leftJoin(qMemberPostLike).on(qMemberPostLike.post.eq(qPost).and(qMemberPostLike.member.eq(member))) .where(qPost.id.in(postIds)) .orderBy(orderSpecifiers.toArray(new OrderSpecifier[0])) .transform(GroupBy.groupBy(qPost.id).as( @@ -96,7 +96,7 @@ public PostListResponse getPostList(Optional cursorPost, Integer size, Mem qPost.content, qPost.isPublic, qPost.likeCount, - isLiked, + qMemberPostLike.isNotNull(), qPost.bodyType.name, GroupBy.list(qPostImage) ))); @@ -184,7 +184,7 @@ public PostListResponse getMyPosts(Long cursor, Integer size, Member member) { .from(qPost) .leftJoin(qPost.member, qMember) .leftJoin(qPost.images, qPostImage) - .leftJoin(qMemberPostLike).on(qMemberPostLike.post.eq(qPost)) + .leftJoin(qMemberPostLike).on(qMemberPostLike.post.eq(qPost).and(qMemberPostLike.member.eq(member))) .where(qPost.id.in(postIds)) .orderBy( qPost.createdAt.desc()) .transform(GroupBy.groupBy(qPost.id).as( @@ -195,7 +195,7 @@ public PostListResponse getMyPosts(Long cursor, Integer size, Member member) { qPost.content, qPost.isPublic, qPost.likeCount, - isLikedResult(member), + qMemberPostLike.isNotNull(), qPost.bodyType.name, GroupBy.list(qPostImage) ))); diff --git a/src/main/java/com/example/mody/domain/post/service/PostCommandService.java b/src/main/java/com/example/mody/domain/post/service/PostCommandService.java index c5cfb86e..dfb5cab2 100644 --- a/src/main/java/com/example/mody/domain/post/service/PostCommandService.java +++ b/src/main/java/com/example/mody/domain/post/service/PostCommandService.java @@ -15,4 +15,6 @@ public interface PostCommandService { public void reportPost(Member member, Long postId); public void updatePost(PostUpdateRequest request, Long postId, Member member); + + void togglePostPublic(Member member, Long postId); } diff --git a/src/main/java/com/example/mody/domain/post/service/PostCommandServiceImpl.java b/src/main/java/com/example/mody/domain/post/service/PostCommandServiceImpl.java index 286105dc..27e3b2dc 100644 --- a/src/main/java/com/example/mody/domain/post/service/PostCommandServiceImpl.java +++ b/src/main/java/com/example/mody/domain/post/service/PostCommandServiceImpl.java @@ -166,6 +166,16 @@ public void updatePost(PostUpdateRequest request, Long postId, Member member){ post.updatePost(request.getContent(), request.getIsPublic()); } + @Override + public void togglePostPublic(Member member, Long postId) { + + Post post = postRepository.findById(postId) + .orElseThrow(() -> new PostException(POST_NOT_FOUND)); + checkAuthorization(member, post); + post.toggleIsPublic(); + } + + @Transactional protected void delete(Post post) { List postImageUrls = postImageRepository.findPostImageUrlByPostId(post.getId()); diff --git a/src/main/java/com/example/mody/global/config/CorsMvcConfig.java b/src/main/java/com/example/mody/global/config/CorsMvcConfig.java index 9e68017a..ea946744 100644 --- a/src/main/java/com/example/mody/global/config/CorsMvcConfig.java +++ b/src/main/java/com/example/mody/global/config/CorsMvcConfig.java @@ -11,12 +11,13 @@ public class CorsMvcConfig implements WebMvcConfigurer { public void addCorsMappings(CorsRegistry corsRegistry) { corsRegistry.addMapping("/**") .exposedHeaders("Set-Cookie") - .allowedOrigins( - "http://localhost:5173", // 현재 요청 URL - "https://kkoalla.app", - "https://kkoalla.app:5173", - "https://kkoalla.app:8443" - ) + .allowedOriginPatterns("*") +// .allowedOrigins( +// "http://localhost:5173", // 현재 요청 URL +// "https://kkoalla.app", +// "https://kkoalla.app:5173", +// "https://kkoalla.app:8443" +// ) .allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS") .allowedHeaders("*") .allowCredentials(true);