From f3a34cfbcaa6dc115ecbf0d558331f5b3ba4ab7c Mon Sep 17 00:00:00 2001 From: y-ngm-n Date: Fri, 23 May 2025 00:31:37 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20PostGroup=EC=97=90=20isReserving=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/domainmodule/postgroup/entity/PostGroup.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java index dfc75970..4798ae05 100644 --- a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java +++ b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java @@ -67,8 +67,11 @@ public class PostGroup extends BaseTimeEntity { private String thumbnailImage; + @Column(nullable = false) + private Boolean isReserving; + @OneToMany(mappedBy = "postGroup", cascade = CascadeType.REMOVE, orphanRemoval = true) - private List postGroupImages = new ArrayList<>(); + private final List postGroupImages = new ArrayList<>(); @OneToOne(mappedBy = "postGroup", cascade = CascadeType.REMOVE, orphanRemoval = true) private PostGroupRssCursor postGroupRssCursor; @@ -117,6 +120,10 @@ public void increaseGenerationCount() { this.generationCount++; } + public void updateReservingState(Boolean reservingState) { + this.isReserving = reservingState; + } + @Override public String toString() { return feed + "\n" From be6a044956c43085058a4aaae498e3305e86d0b6 Mon Sep 17 00:00:00 2001 From: y-ngm-n Date: Fri, 23 May 2025 00:40:34 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20PostGroup=EC=9D=98=20isReserving=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EB=A5=BC=20step=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/domainmodule/postgroup/entity/PostGroup.java | 7 ++++--- .../postgroup/entity/type/PostGroupStepType.java | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/type/PostGroupStepType.java diff --git a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java index 4798ae05..8d3139a7 100644 --- a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java +++ b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java @@ -8,6 +8,7 @@ import org.domainmodule.postgroup.entity.type.PostGroupLengthType; import org.domainmodule.postgroup.entity.type.PostGroupPurposeType; import org.domainmodule.postgroup.entity.type.PostGroupReferenceType; +import org.domainmodule.postgroup.entity.type.PostGroupStepType; import org.domainmodule.rssfeed.entity.RssFeed; import jakarta.persistence.CascadeType; @@ -68,7 +69,7 @@ public class PostGroup extends BaseTimeEntity { private String thumbnailImage; @Column(nullable = false) - private Boolean isReserving; + private PostGroupStepType step; @OneToMany(mappedBy = "postGroup", cascade = CascadeType.REMOVE, orphanRemoval = true) private final List postGroupImages = new ArrayList<>(); @@ -120,8 +121,8 @@ public void increaseGenerationCount() { this.generationCount++; } - public void updateReservingState(Boolean reservingState) { - this.isReserving = reservingState; + public void updateStep(PostGroupStepType newStep) { + this.step = newStep; } @Override diff --git a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/type/PostGroupStepType.java b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/type/PostGroupStepType.java new file mode 100644 index 00000000..55d805a6 --- /dev/null +++ b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/type/PostGroupStepType.java @@ -0,0 +1,5 @@ +package org.domainmodule.postgroup.entity.type; + +public enum PostGroupStepType { + EDITING, RESERVING +} From 63de438905529dd26399f551d50ec973d7591578 Mon Sep 17 00:00:00 2001 From: y-ngm-n Date: Fri, 23 May 2025 23:08:53 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=B9=20=EB=8B=A8=EA=B3=84=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/post/controller/PostController.java | 10 ++++++++++ .../response/GetPostGroupStepResponse.java | 17 +++++++++++++++++ .../domain/v1/post/service/PostService.java | 11 +++++++++++ .../postgroup/entity/PostGroup.java | 1 + 4 files changed, 39 insertions(+) create mode 100644 application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/response/GetPostGroupStepResponse.java diff --git a/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java index 4300b8e7..032ca0ee 100644 --- a/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java +++ b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java @@ -12,6 +12,7 @@ import org.mainapp.domain.v1.post.controller.response.CreatePostsResponse; import org.mainapp.domain.v1.post.controller.response.GetAgentReservedPostsResponse; import org.mainapp.domain.v1.post.controller.response.GetPostGroupPostsResponse; +import org.mainapp.domain.v1.post.controller.response.GetPostGroupStepResponse; import org.mainapp.domain.v1.post.controller.response.GetPostGroupTopicResponse; import org.mainapp.domain.v1.post.controller.response.GetPostGroupsResponse; import org.mainapp.domain.v1.post.controller.response.PromptHistoriesResponse; @@ -232,6 +233,15 @@ public ResponseEntity getPostGroupTopic( return ResponseEntity.ok(postService.getPostGroupTopic(agentId, postGroupId)); } + @Operation(summary = "게시물 그룹 단계 조회 API", description = "게시물 그룹의 진행 단계를 조회합니다.") + @GetMapping("/post-groups/{postGroupId}/step") + public ResponseEntity getPostGroupStep( + @PathVariable Long agentId, + @PathVariable Long postGroupId + ) { + return ResponseEntity.ok(postService.getPostGroupStep(agentId, postGroupId)); + } + @Operation(summary = "게시물 그룹별 게시물 목록 조회 API", description = "게시물 그룹에 해당되는 모든 게시물 목록을 조회합니다.") @GetMapping("/post-groups/{postGroupId}/posts") public ResponseEntity getPostsByPostGroup( diff --git a/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/response/GetPostGroupStepResponse.java b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/response/GetPostGroupStepResponse.java new file mode 100644 index 00000000..5872f7e6 --- /dev/null +++ b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/response/GetPostGroupStepResponse.java @@ -0,0 +1,17 @@ +package org.mainapp.domain.v1.post.controller.response; + +import org.domainmodule.postgroup.entity.PostGroup; +import org.domainmodule.postgroup.entity.type.PostGroupStepType; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "게시물 그룹 단계 조회 API 응답 본문") +public record GetPostGroupStepResponse( + @Schema(description = "게시물 그룹 단계", example = "EDITING") + PostGroupStepType step +) { + + public static GetPostGroupStepResponse from(PostGroup postGroup) { + return new GetPostGroupStepResponse(postGroup.getStep()); + } +} diff --git a/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java b/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java index c3a0612f..ec4ce793 100644 --- a/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java +++ b/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java @@ -39,6 +39,7 @@ import org.mainapp.domain.v1.post.controller.response.CreatePostsResponse; import org.mainapp.domain.v1.post.controller.response.GetAgentReservedPostsResponse; import org.mainapp.domain.v1.post.controller.response.GetPostGroupPostsResponse; +import org.mainapp.domain.v1.post.controller.response.GetPostGroupStepResponse; import org.mainapp.domain.v1.post.controller.response.GetPostGroupTopicResponse; import org.mainapp.domain.v1.post.controller.response.GetPostGroupsResponse; import org.mainapp.domain.v1.post.controller.response.type.PostGroupResponse; @@ -146,6 +147,16 @@ public GetPostGroupTopicResponse getPostGroupTopic(Long agentId, Long postGroupI return new GetPostGroupTopicResponse(topic); } + /** + * 게시물 그룹의 단계를 조회하는 메서드 + */ + public GetPostGroupStepResponse getPostGroupStep(Long agentId, Long postGroupId) { + Long userId = SecurityUtil.getCurrentUserId(); + PostGroup postGroup = postGroupRepository.findByUserIdAndAgentIdAndId(userId, agentId, postGroupId) + .orElseThrow(() -> new CustomException(PostErrorCode.POST_GROUP_NOT_FOUND)); + return GetPostGroupStepResponse.from(postGroup); + } + /** * postGroupId를 바탕으로 게시물 그룹 존재 여부를 확인하고, 해당 그룹의 게시물 목록을 반환하는 메서드 * 게시물 그룹 조회 실패 시 POST_GROUP_NOT_FOUND diff --git a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java index 8d3139a7..b28468d3 100644 --- a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java +++ b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java @@ -69,6 +69,7 @@ public class PostGroup extends BaseTimeEntity { private String thumbnailImage; @Column(nullable = false) + @Enumerated(EnumType.STRING) private PostGroupStepType step; @OneToMany(mappedBy = "postGroup", cascade = CascadeType.REMOVE, orphanRemoval = true) From 555ca5fb3c71d6a45d393be2bf984a887a1ae128 Mon Sep 17 00:00:00 2001 From: y-ngm-n Date: Fri, 23 May 2025 23:11:09 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=B9=20=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?API=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/mainapp/domain/v1/post/service/PostUpdateService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostUpdateService.java b/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostUpdateService.java index 9f94c086..d7cc9a5b 100644 --- a/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostUpdateService.java +++ b/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostUpdateService.java @@ -81,8 +81,6 @@ public void updatePostsMetadata(List posts, UpdatePostsMetadataRequest req post.updateStatus(postRequest.getStatus()); } if (postRequest.getUploadTime() != null) { - // 업로드 예약일시가 변경되는 경우는 업로드 예약 상태가 되는 경우만 존재 - post.updateStatus(PostStatusType.UPLOAD_RESERVED); post.updateUploadTime(postRequest.getUploadTime()); } if (postRequest.getDisplayOrder() != null) { From 15d91236524c664f86b4b51c449b55164e540417 Mon Sep 17 00:00:00 2001 From: y-ngm-n Date: Fri, 23 May 2025 23:50:39 +0900 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=B9=20=EB=8B=A8=EA=B3=84=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/post/controller/PostController.java | 12 ++++++++++++ .../request/UpdatePostGroupStepRequest.java | 16 ++++++++++++++++ .../domain/v1/post/service/PostService.java | 13 +++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/request/UpdatePostGroupStepRequest.java diff --git a/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java index 032ca0ee..8ba1c72d 100644 --- a/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java +++ b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/PostController.java @@ -7,6 +7,7 @@ import org.mainapp.domain.v1.post.controller.request.ReserveUploadTimeRequest; import org.mainapp.domain.v1.post.controller.request.SinglePostUpdateRequest; import org.mainapp.domain.v1.post.controller.request.UpdatePostContentRequest; +import org.mainapp.domain.v1.post.controller.request.UpdatePostGroupStepRequest; import org.mainapp.domain.v1.post.controller.request.UpdatePostsMetadataRequest; import org.mainapp.domain.v1.post.controller.request.UpdateReservedPostsRequest; import org.mainapp.domain.v1.post.controller.response.CreatePostsResponse; @@ -242,6 +243,17 @@ public ResponseEntity getPostGroupStep( return ResponseEntity.ok(postService.getPostGroupStep(agentId, postGroupId)); } + @Operation(summary = "게시물 그룹 단계 변경 API", description = "게시물 그룹의 진행 단계를 조회합니다.") + @PutMapping("/post-groups/{postGroupId}/step") + public ResponseEntity updatePostGroupStep( + @PathVariable Long agentId, + @PathVariable Long postGroupId, + @Validated @RequestBody UpdatePostGroupStepRequest updatePostGroupStepRequest + ) { + postService.updatePostGroupStep(agentId, postGroupId, updatePostGroupStepRequest); + return ResponseEntity.ok().build(); + } + @Operation(summary = "게시물 그룹별 게시물 목록 조회 API", description = "게시물 그룹에 해당되는 모든 게시물 목록을 조회합니다.") @GetMapping("/post-groups/{postGroupId}/posts") public ResponseEntity getPostsByPostGroup( diff --git a/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/request/UpdatePostGroupStepRequest.java b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/request/UpdatePostGroupStepRequest.java new file mode 100644 index 00000000..d5143e6c --- /dev/null +++ b/application/main-app/src/main/java/org/mainapp/domain/v1/post/controller/request/UpdatePostGroupStepRequest.java @@ -0,0 +1,16 @@ +package org.mainapp.domain.v1.post.controller.request; + +import org.domainmodule.postgroup.entity.type.PostGroupStepType; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "게시물 그룹 단계 수정 API 요청 본문") +public record UpdatePostGroupStepRequest( + @Schema(description = "게시물 예약일시 수정 정보 리스트") + @NotNull(message = "변경할 게시물 그룹 단계를 입력해주세요.") + @Valid + PostGroupStepType step +) { +} diff --git a/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java b/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java index ec4ce793..af96c7c6 100644 --- a/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java +++ b/application/main-app/src/main/java/org/mainapp/domain/v1/post/service/PostService.java @@ -32,6 +32,7 @@ import org.mainapp.domain.v1.post.controller.request.ReserveUploadTimeRequest; import org.mainapp.domain.v1.post.controller.request.SinglePostUpdateRequest; import org.mainapp.domain.v1.post.controller.request.UpdatePostContentRequest; +import org.mainapp.domain.v1.post.controller.request.UpdatePostGroupStepRequest; import org.mainapp.domain.v1.post.controller.request.UpdatePostsMetadataRequest; import org.mainapp.domain.v1.post.controller.request.UpdateReservedPostsRequest; import org.mainapp.domain.v1.post.controller.request.type.UpdatePostsRequestItem; @@ -157,6 +158,18 @@ public GetPostGroupStepResponse getPostGroupStep(Long agentId, Long postGroupId) return GetPostGroupStepResponse.from(postGroup); } + /** + * 게시물 그룹의 단계를 수정하는 메서드 + */ + public void updatePostGroupStep(Long agentId, Long postGroupId, UpdatePostGroupStepRequest request) { + Long userId = SecurityUtil.getCurrentUserId(); + PostGroup postGroup = postGroupRepository.findByUserIdAndAgentIdAndId(userId, agentId, postGroupId) + .orElseThrow(() -> new CustomException(PostErrorCode.POST_GROUP_NOT_FOUND)); + + postGroup.updateStep(request.step()); + postTransactionService.savePostGroup(postGroup); + } + /** * postGroupId를 바탕으로 게시물 그룹 존재 여부를 확인하고, 해당 그룹의 게시물 목록을 반환하는 메서드 * 게시물 그룹 조회 실패 시 POST_GROUP_NOT_FOUND From 1275385e277cc5b8dba4e0cd3e89dc2e79120991 Mon Sep 17 00:00:00 2001 From: y-ngm-n Date: Fri, 23 May 2025 23:54:36 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=B9=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EB=8B=A8?= =?UTF-8?q?=EA=B3=84=20=EC=A7=80=EC=A0=95=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/domainmodule/postgroup/entity/PostGroup.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java index b28468d3..879ffa69 100644 --- a/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java +++ b/domain/domain-module/src/main/java/org/domainmodule/postgroup/entity/PostGroup.java @@ -81,7 +81,8 @@ public class PostGroup extends BaseTimeEntity { @Builder(access = AccessLevel.PRIVATE) private PostGroup( Agent agent, RssFeed feed, String topic, PostGroupPurposeType purpose, PostGroupReferenceType reference, - PostGroupLengthType length, String content, Integer generationCount, String thumbnailImage + PostGroupLengthType length, String content, Integer generationCount, String thumbnailImage, + PostGroupStepType step ) { this.agent = agent; this.topic = topic; @@ -115,6 +116,7 @@ public static PostGroup createPostGroup( .content(content) .generationCount(generationCount) .thumbnailImage(thumbnailImage) + .step(PostGroupStepType.EDITING) .build(); }