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 4300b8e..8ba1c72 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,11 +7,13 @@ 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; 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 +234,26 @@ 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 = "게시물 그룹의 진행 단계를 조회합니다.") + @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 0000000..d5143e6 --- /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/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 0000000..5872f7e --- /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 c3a0612..af96c7c 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; @@ -39,6 +40,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 +148,28 @@ 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); + } + + /** + * 게시물 그룹의 단계를 수정하는 메서드 + */ + 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 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 9f94c08..d7cc9a5 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) { 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 dfc7597..879ffa6 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; @@ -67,8 +68,12 @@ 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) - private List postGroupImages = new ArrayList<>(); + private final List postGroupImages = new ArrayList<>(); @OneToOne(mappedBy = "postGroup", cascade = CascadeType.REMOVE, orphanRemoval = true) private PostGroupRssCursor postGroupRssCursor; @@ -76,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; @@ -110,6 +116,7 @@ public static PostGroup createPostGroup( .content(content) .generationCount(generationCount) .thumbnailImage(thumbnailImage) + .step(PostGroupStepType.EDITING) .build(); } @@ -117,6 +124,10 @@ public void increaseGenerationCount() { this.generationCount++; } + public void updateStep(PostGroupStepType newStep) { + this.step = newStep; + } + @Override public String toString() { return feed + "\n" 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 0000000..55d805a --- /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 +}