From 935e482cd6e73bfec37316d3ef14d56848cfe886 Mon Sep 17 00:00:00 2001 From: luckhee Date: Wed, 1 Oct 2025 15:12:50 +0900 Subject: [PATCH 1/7] =?UTF-8?q?Practice=20Post=20=EC=83=9D=EC=84=B1=20api?= =?UTF-8?q?=20path=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/post/controller/PostController.java | 12 ++++++ .../post/dto/PracticePostCreateRequest.java | 13 ++++++ .../back/domain/post/post/entity/Post.java | 4 ++ .../domain/post/post/service/PostService.java | 40 +++++++++++++------ .../post/post/service/PostServiceTest.java | 5 ++- 5 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java diff --git a/back/src/main/java/com/back/domain/post/post/controller/PostController.java b/back/src/main/java/com/back/domain/post/post/controller/PostController.java index 0ccb2e57..86f093fe 100644 --- a/back/src/main/java/com/back/domain/post/post/controller/PostController.java +++ b/back/src/main/java/com/back/domain/post/post/controller/PostController.java @@ -52,6 +52,18 @@ public RsData createPost( return new RsData<>("200", "게시글이 성공적으로 생성되었습니다.", postCreateResponse); } + @Operation(summary = "게시글 생성 - PracticePost") + @PostMapping("/practice") + public RsData createPracticePost( + @Valid @RequestBody PracticePostCreateRequest practicePostCreateRequest + ) { + Member member = rq.getActor(); + Post post = postService.createPracticePost(practicePostCreateRequest, member); + PostCreateResponse postCreateResponse = PostCreateResponse.from(post); + + return new RsData<>("200", "게시글이 성공적으로 생성되었습니다.", postCreateResponse); + } + @Operation(summary = "게시글 다건 조회") @GetMapping("/all") public RsData> getAllPost() { diff --git a/back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java b/back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java new file mode 100644 index 00000000..45759941 --- /dev/null +++ b/back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java @@ -0,0 +1,13 @@ +package com.back.domain.post.post.dto; + +import jakarta.validation.constraints.NotBlank; + +public record PracticePostCreateRequest( + String postType, + @NotBlank(message = "제목은 null 혹은 공백일 수 없습니다.") + String title, + @NotBlank(message = "제목은 null 혹은 공백일 수 없습니다.") + String content, + String job +) { +} diff --git a/back/src/main/java/com/back/domain/post/post/entity/Post.java b/back/src/main/java/com/back/domain/post/post/entity/Post.java index 81d1b3bd..c5948e99 100644 --- a/back/src/main/java/com/back/domain/post/post/entity/Post.java +++ b/back/src/main/java/com/back/domain/post/post/entity/Post.java @@ -107,4 +107,8 @@ public void increaseViewCount() { public void updateResolveStatus(Boolean isResolve) { this.isResolve = isResolve; } + + public void updateCareer(String career) { + this.career = career; + } } diff --git a/back/src/main/java/com/back/domain/post/post/service/PostService.java b/back/src/main/java/com/back/domain/post/post/service/PostService.java index f3baeaaf..961ac55f 100644 --- a/back/src/main/java/com/back/domain/post/post/service/PostService.java +++ b/back/src/main/java/com/back/domain/post/post/service/PostService.java @@ -1,10 +1,7 @@ package com.back.domain.post.post.service; import com.back.domain.member.member.entity.Member; -import com.back.domain.post.post.dto.PostAllResponse; -import com.back.domain.post.post.dto.PostCreateRequest; -import com.back.domain.post.post.dto.PostDto; -import com.back.domain.post.post.dto.PostSingleResponse; +import com.back.domain.post.post.dto.*; import com.back.domain.post.post.entity.Post; import com.back.domain.post.post.repository.PostRepository; import com.back.global.exception.ServiceException; @@ -38,16 +35,7 @@ public Post createPost(PostCreateRequest postCreateRequest, Member member) { Post.validPostType(postTypeStr); Post.PostType postType = Post.PostType.valueOf(postTypeStr); - // PostType이 PracticePost인 경우 멘토인지 확인 - if (postType == Post.PostType.PRACTICEPOST && member.getRole() != Member.Role.MENTOR) { - throw new ServiceException("400", "실무 경험 공유 게시글은 멘토만 작성할 수 있습니다."); - } -// if( postType == Post.PostType.PRACTICEPOST ) { -// if(member.getCareer() == null || member.getCareer().isEmpty()) { -// throw new ServiceException("400", "멘토는 경력을 입력해야 실무 경험 공유 게시글을 작성할 수 있습니다."); -// } -// } Post post = Post.builder() .title(postCreateRequest.title()) @@ -67,6 +55,32 @@ public Post createPost(PostCreateRequest postCreateRequest, Member member) { return post; } + @Transactional + public Post createPracticePost(PracticePostCreateRequest practicePostCreateRequest, Member member) { + String postTypeStr = practicePostCreateRequest.postType(); + Post.validPostType(postTypeStr); + Post.PostType postType = Post.PostType.valueOf(postTypeStr); + + // PostType이 PracticePost인 경우 멘토인지 확인 + if (postType == Post.PostType.PRACTICEPOST && member.getRole() != Member.Role.MENTOR) { + throw new ServiceException("400", "실무 경험 공유 게시글은 멘토만 작성할 수 있습니다."); + } + + Post post = Post.builder() + .title(practicePostCreateRequest.title()) + .content(practicePostCreateRequest.content()) + .member(member) + .postType(postType) + .build(); + + post.updateCareer(practicePostCreateRequest.job()); + + postRepository.save(post); + + return post; + } + + @Transactional public void removePost(Long postId, Member member) { Post post = findById(postId); diff --git a/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java b/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java index fbce14bd..110e0916 100644 --- a/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java +++ b/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java @@ -3,6 +3,7 @@ import com.back.domain.member.member.entity.Member; import com.back.domain.post.post.dto.PostCreateRequest; import com.back.domain.post.post.dto.PostDto; +import com.back.domain.post.post.dto.PracticePostCreateRequest; import com.back.domain.post.post.entity.Post; import com.back.domain.post.post.repository.PostRepository; import com.back.fixture.MemberFixture; @@ -86,10 +87,10 @@ void createPost_practicePost_mentor_success() { void createPost_practicePost_mentee_failure() { // given Member mentee = MemberFixture.create(1L, "mentee@test.com", "Mentee", "password", Member.Role.MENTEE); - PostCreateRequest request = new PostCreateRequest("PRACTICEPOST","실무경험","실무내용"); + PracticePostCreateRequest request = new PracticePostCreateRequest("PRACTICEPOST","실무경험","실무내용",""); // when & then - assertThatThrownBy(() -> postService.createPost(request, mentee)) + assertThatThrownBy(() -> postService.createPracticePost(request, mentee)) .isInstanceOf(ServiceException.class) .hasMessage("400 : 실무 경험 공유 게시글은 멘토만 작성할 수 있습니다."); From 0c1379dce4081e2ac03735f95eb46ff1407b7125 Mon Sep 17 00:00:00 2001 From: luckhee Date: Wed, 1 Oct 2025 16:05:02 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=A2=8B?= =?UTF-8?q?=EC=95=84=EC=9A=94=20=EC=8B=AB=EC=96=B4=EC=9A=94=20api=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=20=EC=8B=9C=20count=20=EB=A6=AC=ED=84=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/post/controller/PostController.java | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/back/src/main/java/com/back/domain/post/post/controller/PostController.java b/back/src/main/java/com/back/domain/post/post/controller/PostController.java index 86f093fe..148789dc 100644 --- a/back/src/main/java/com/back/domain/post/post/controller/PostController.java +++ b/back/src/main/java/com/back/domain/post/post/controller/PostController.java @@ -105,28 +105,13 @@ public RsData updatePost(@PathVariable Long post_id @Operation(summary = "게시글 좋아요") @PostMapping("/{post_id}/liked") - public RsData likePost(@PathVariable Long post_id) { + public RsData likePost(@PathVariable Long post_id) { postLikeService.likePost(post_id); - return new RsData<>("200", "게시글 좋아요 성공", null); - } - - @Operation(summary = "게시글 좋아요 (Show)") - @GetMapping("/{post_id}/liked") - public RsData getLike(@PathVariable Long post_id) { int likeCount = postLikeService.getLikeCount(post_id); PostLikedResponse postLikedResponse = new PostLikedResponse(likeCount); - return new RsData<>("200", "게시글 좋아요 조회 성공", postLikedResponse); - } - - @Operation(summary = "게시글 싫어요 (Show)") - @GetMapping("/{post_id}/disliked") - public RsData getDisLike(@PathVariable Long post_id) { - int likeCount = postLikeService.getDisLikeCount(post_id); - PostLikedResponse postLikedResponse = new PostLikedResponse(likeCount); - - return new RsData<>("200", "게시글 싫어요 조회 성공", postLikedResponse); + return new RsData<>("200", "게시글 좋아요 성공", postLikedResponse); } @Operation(summary = "게시글 싫어요") @@ -134,7 +119,10 @@ public RsData getDisLike(@PathVariable Long post_id) { public RsData disLikePost(@PathVariable Long post_id) { postLikeService.disLikePost(post_id); - return new RsData<>("200", "게시글 싫어요 성공", null); + int likeCount = postLikeService.getDisLikeCount(post_id); + PostLikedResponse postLikedResponse = new PostLikedResponse(likeCount); + + return new RsData<>("200", "게시글 싫어요 성공", postLikedResponse); } From 65c60a589690c432d28cbb451d247ccff995a062 Mon Sep 17 00:00:00 2001 From: luckhee Date: Wed, 1 Oct 2025 16:08:17 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=ED=8E=98=EC=9D=B4=EC=A7=80=20url=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/post/controller/PostController.java | 2 +- .../post/controller/PostControllerTest.java | 68 +++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/back/src/main/java/com/back/domain/post/post/controller/PostController.java b/back/src/main/java/com/back/domain/post/post/controller/PostController.java index 148789dc..1ab4a1a4 100644 --- a/back/src/main/java/com/back/domain/post/post/controller/PostController.java +++ b/back/src/main/java/com/back/domain/post/post/controller/PostController.java @@ -127,7 +127,7 @@ public RsData disLikePost(@PathVariable Long post_id) { @Operation(summary = "게시글 상세페이지") - @GetMapping("/Detail/{post_id}") + @GetMapping("/detail/{post_id}") public RsData getPostDetail(@PathVariable Long post_id) { PostDetailResponse response = postDetailFacade.getDetailWithViewIncrement(post_id); diff --git a/back/src/test/java/com/back/domain/post/post/controller/PostControllerTest.java b/back/src/test/java/com/back/domain/post/post/controller/PostControllerTest.java index f96b3d8c..a4a87c26 100644 --- a/back/src/test/java/com/back/domain/post/post/controller/PostControllerTest.java +++ b/back/src/test/java/com/back/domain/post/post/controller/PostControllerTest.java @@ -438,22 +438,22 @@ void t12() throws Exception { .andExpect(jsonPath("$.msg").value("게시글 좋아요 성공")); } - @Test - @DisplayName("게시글 좋아요 조회") - void t13() throws Exception { - ResultActions resultActions = mvc - .perform( - get("/post/{post_id}/liked", 1L) - ) - .andDo(print()); - - resultActions - .andExpect(handler().handlerType(PostController.class)) - .andExpect(handler().methodName("getLike")) - .andExpect(jsonPath("$.resultCode").value("200")) - .andExpect(jsonPath("$.msg").value("게시글 좋아요 조회 성공")) - .andExpect(jsonPath("$.data.likeCount").exists()); - } +// @Test +// @DisplayName("게시글 좋아요 조회") +// void t13() throws Exception { +// ResultActions resultActions = mvc +// .perform( +// get("/post/{post_id}/liked", 1L) +// ) +// .andDo(print()); +// +// resultActions +// .andExpect(handler().handlerType(PostController.class)) +// .andExpect(handler().methodName("getLike")) +// .andExpect(jsonPath("$.resultCode").value("200")) +// .andExpect(jsonPath("$.msg").value("게시글 좋아요 조회 성공")) +// .andExpect(jsonPath("$.data.likeCount").exists()); +// } @Test @DisplayName("게시글 싫어요 성공") @@ -471,22 +471,22 @@ void t14() throws Exception { .andExpect(jsonPath("$.msg").value("게시글 싫어요 성공")); } - @Test - @DisplayName("게시글 싫어요 조회") - void t15() throws Exception { - ResultActions resultActions = mvc - .perform( - get("/post/{post_id}/disliked", 1L) - ) - .andDo(print()); - - resultActions - .andExpect(handler().handlerType(PostController.class)) - .andExpect(handler().methodName("getDisLike")) - .andExpect(jsonPath("$.resultCode").value("200")) - .andExpect(jsonPath("$.msg").value("게시글 싫어요 조회 성공")) - .andExpect(jsonPath("$.data.likeCount").exists()); - } +// @Test +// @DisplayName("게시글 싫어요 조회") +// void t15() throws Exception { +// ResultActions resultActions = mvc +// .perform( +// get("/post/{post_id}/disliked", 1L) +// ) +// .andDo(print()); +// +// resultActions +// .andExpect(handler().handlerType(PostController.class)) +// .andExpect(handler().methodName("getDisLike")) +// .andExpect(jsonPath("$.resultCode").value("200")) +// .andExpect(jsonPath("$.msg").value("게시글 싫어요 조회 성공")) +// .andExpect(jsonPath("$.data.likeCount").exists()); +// } @Test @DisplayName("좋아요 -> 싫어요 토글 테스트") @@ -539,7 +539,7 @@ void t18() throws Exception { ResultActions resultActions = mvc .perform( - get("/post/Detail/{post_id}", 1L) + get("/post/detail/{post_id}", 1L) ) .andDo(print()); @@ -566,7 +566,7 @@ void t18() throws Exception { void t19() throws Exception { ResultActions resultActions = mvc .perform( - get("/post/Detail/{post_id}", 999L) + get("/post/detail/{post_id}", 999L) ) .andDo(print()); From c5921409447f65f67b644e6ea385fdef2e37376d Mon Sep 17 00:00:00 2001 From: luckhee Date: Wed, 1 Oct 2025 16:12:11 +0900 Subject: [PATCH 4/7] =?UTF-8?q?post=20=ED=95=84=EB=93=9C=20=EB=AA=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20career=20->=20job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/back/domain/post/post/entity/Post.java | 6 +++--- .../java/com/back/domain/post/post/service/PostService.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/back/src/main/java/com/back/domain/post/post/entity/Post.java b/back/src/main/java/com/back/domain/post/post/entity/Post.java index c5948e99..d94f595c 100644 --- a/back/src/main/java/com/back/domain/post/post/entity/Post.java +++ b/back/src/main/java/com/back/domain/post/post/entity/Post.java @@ -42,7 +42,7 @@ public enum PostType { private int viewCount; private Boolean isMento; - private String career; + private String job; private Boolean isResolve; @@ -108,7 +108,7 @@ public void updateResolveStatus(Boolean isResolve) { this.isResolve = isResolve; } - public void updateCareer(String career) { - this.career = career; + public void updateJob(String job) { + this.job = job; } } diff --git a/back/src/main/java/com/back/domain/post/post/service/PostService.java b/back/src/main/java/com/back/domain/post/post/service/PostService.java index 961ac55f..35aed563 100644 --- a/back/src/main/java/com/back/domain/post/post/service/PostService.java +++ b/back/src/main/java/com/back/domain/post/post/service/PostService.java @@ -73,7 +73,7 @@ public Post createPracticePost(PracticePostCreateRequest practicePostCreateReque .postType(postType) .build(); - post.updateCareer(practicePostCreateRequest.job()); + post.updateJob(practicePostCreateRequest.job()); postRepository.save(post); From 142b893eb5c3fddb20ce41d70486069b000c581c Mon Sep 17 00:00:00 2001 From: luckhee Date: Wed, 1 Oct 2025 16:13:37 +0900 Subject: [PATCH 5/7] =?UTF-8?q?validation=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/back/domain/post/post/dto/PostCreateRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java b/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java index add523db..95c105d4 100644 --- a/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java +++ b/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java @@ -8,7 +8,7 @@ public record PostCreateRequest( String postType, @NotBlank(message = "제목은 null 혹은 공백일 수 없습니다.") String title, - @NotBlank(message = "제목은 null 혹은 공백일 수 없습니다.") + @NotBlank(message = "내용은 null 혹은 공백일 수 없습니다.") String content ) { From 67a49b86388333a35656d1e9c7a58e2513afcebb Mon Sep 17 00:00:00 2001 From: luckhee Date: Wed, 1 Oct 2025 16:45:12 +0900 Subject: [PATCH 6/7] =?UTF-8?q?Practice=20Post=20API=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/post/controller/PostController.java | 14 +------- .../post/post/dto/PostCreateRequest.java | 3 +- .../post/dto/PracticePostCreateRequest.java | 13 ------- .../back/domain/post/post/entity/Post.java | 3 ++ .../domain/post/post/service/PostService.java | 34 +++++-------------- .../post/post/service/PostServiceTest.java | 21 ++++++------ 6 files changed, 24 insertions(+), 64 deletions(-) delete mode 100644 back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java diff --git a/back/src/main/java/com/back/domain/post/post/controller/PostController.java b/back/src/main/java/com/back/domain/post/post/controller/PostController.java index 1ab4a1a4..b1d27ddf 100644 --- a/back/src/main/java/com/back/domain/post/post/controller/PostController.java +++ b/back/src/main/java/com/back/domain/post/post/controller/PostController.java @@ -40,7 +40,7 @@ public RsData getPostWithPage( return new RsData<>("200", "게시글이 조회 되었습니다.", resDto); } - @Operation(summary = "게시글 생성") + @Operation(summary = "게시글 생성 ") @PostMapping public RsData createPost( @Valid @RequestBody PostCreateRequest postCreateRequest @@ -52,18 +52,6 @@ public RsData createPost( return new RsData<>("200", "게시글이 성공적으로 생성되었습니다.", postCreateResponse); } - @Operation(summary = "게시글 생성 - PracticePost") - @PostMapping("/practice") - public RsData createPracticePost( - @Valid @RequestBody PracticePostCreateRequest practicePostCreateRequest - ) { - Member member = rq.getActor(); - Post post = postService.createPracticePost(practicePostCreateRequest, member); - PostCreateResponse postCreateResponse = PostCreateResponse.from(post); - - return new RsData<>("200", "게시글이 성공적으로 생성되었습니다.", postCreateResponse); - } - @Operation(summary = "게시글 다건 조회") @GetMapping("/all") public RsData> getAllPost() { diff --git a/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java b/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java index 95c105d4..5224d2a8 100644 --- a/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java +++ b/back/src/main/java/com/back/domain/post/post/dto/PostCreateRequest.java @@ -9,7 +9,8 @@ public record PostCreateRequest( @NotBlank(message = "제목은 null 혹은 공백일 수 없습니다.") String title, @NotBlank(message = "내용은 null 혹은 공백일 수 없습니다.") - String content + String content, + String job ) { diff --git a/back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java b/back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java deleted file mode 100644 index 45759941..00000000 --- a/back/src/main/java/com/back/domain/post/post/dto/PracticePostCreateRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.back.domain.post.post.dto; - -import jakarta.validation.constraints.NotBlank; - -public record PracticePostCreateRequest( - String postType, - @NotBlank(message = "제목은 null 혹은 공백일 수 없습니다.") - String title, - @NotBlank(message = "제목은 null 혹은 공백일 수 없습니다.") - String content, - String job -) { -} diff --git a/back/src/main/java/com/back/domain/post/post/entity/Post.java b/back/src/main/java/com/back/domain/post/post/entity/Post.java index d94f595c..0056ea51 100644 --- a/back/src/main/java/com/back/domain/post/post/entity/Post.java +++ b/back/src/main/java/com/back/domain/post/post/entity/Post.java @@ -109,6 +109,9 @@ public void updateResolveStatus(Boolean isResolve) { } public void updateJob(String job) { + if (job == null || job.isBlank()) { + throw new ServiceException("400", "직업은 null이거나 공백일 수 없습니다."); + } this.job = job; } } diff --git a/back/src/main/java/com/back/domain/post/post/service/PostService.java b/back/src/main/java/com/back/domain/post/post/service/PostService.java index 35aed563..b385cfd2 100644 --- a/back/src/main/java/com/back/domain/post/post/service/PostService.java +++ b/back/src/main/java/com/back/domain/post/post/service/PostService.java @@ -35,7 +35,10 @@ public Post createPost(PostCreateRequest postCreateRequest, Member member) { Post.validPostType(postTypeStr); Post.PostType postType = Post.PostType.valueOf(postTypeStr); - + // PostType이 PracticePost인 경우 멘토인지 확인 + if (postType == Post.PostType.PRACTICEPOST && member.getRole() != Member.Role.MENTOR) { + throw new ServiceException("400", "실무 경험 공유 게시글은 멘토만 작성할 수 있습니다."); + } Post post = Post.builder() .title(postCreateRequest.title()) @@ -45,6 +48,10 @@ public Post createPost(PostCreateRequest postCreateRequest, Member member) { .build(); + if(postType == Post.PostType.PRACTICEPOST) { + post.updateJob(postCreateRequest.job()); + } + // PostType이 QUESTIONPOST인 경우 isResolve를 false로 초기화 if(postType == Post.PostType.QUESTIONPOST) { post.updateResolveStatus(false); @@ -55,31 +62,6 @@ public Post createPost(PostCreateRequest postCreateRequest, Member member) { return post; } - @Transactional - public Post createPracticePost(PracticePostCreateRequest practicePostCreateRequest, Member member) { - String postTypeStr = practicePostCreateRequest.postType(); - Post.validPostType(postTypeStr); - Post.PostType postType = Post.PostType.valueOf(postTypeStr); - - // PostType이 PracticePost인 경우 멘토인지 확인 - if (postType == Post.PostType.PRACTICEPOST && member.getRole() != Member.Role.MENTOR) { - throw new ServiceException("400", "실무 경험 공유 게시글은 멘토만 작성할 수 있습니다."); - } - - Post post = Post.builder() - .title(practicePostCreateRequest.title()) - .content(practicePostCreateRequest.content()) - .member(member) - .postType(postType) - .build(); - - post.updateJob(practicePostCreateRequest.job()); - - postRepository.save(post); - - return post; - } - @Transactional public void removePost(Long postId, Member member) { diff --git a/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java b/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java index 110e0916..1d3e19a2 100644 --- a/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java +++ b/back/src/test/java/com/back/domain/post/post/service/PostServiceTest.java @@ -3,7 +3,6 @@ import com.back.domain.member.member.entity.Member; import com.back.domain.post.post.dto.PostCreateRequest; import com.back.domain.post.post.dto.PostDto; -import com.back.domain.post.post.dto.PracticePostCreateRequest; import com.back.domain.post.post.entity.Post; import com.back.domain.post.post.repository.PostRepository; import com.back.fixture.MemberFixture; @@ -46,7 +45,7 @@ class CreatePostTest { void createPost_informationPost_success() { // given Member member = MemberFixture.create(1L, "test@test.com", "Test User", "password", Member.Role.MENTEE); - PostCreateRequest request = new PostCreateRequest("INFORMATIONPOST","제목","내용"); + PostCreateRequest request = new PostCreateRequest("INFORMATIONPOST","제목","내용",""); Post expectedPost = createPost("제목", "내용", member, Post.PostType.INFORMATIONPOST); @@ -69,7 +68,7 @@ void createPost_informationPost_success() { void createPost_practicePost_mentor_success() { // given Member mentor = MemberFixture.create(1L, "mentor@test.com", "Mentor", "password", Member.Role.MENTOR); - PostCreateRequest request = new PostCreateRequest("PRACTICEPOST","실무경험","실무내용"); + PostCreateRequest request = new PostCreateRequest("PRACTICEPOST","실무경험","실무내용","123"); Post expectedPost = createPost("실무 경험", "실무 내용", mentor, Post.PostType.PRACTICEPOST); when(postRepository.save(any(Post.class))).thenReturn(expectedPost); @@ -87,10 +86,10 @@ void createPost_practicePost_mentor_success() { void createPost_practicePost_mentee_failure() { // given Member mentee = MemberFixture.create(1L, "mentee@test.com", "Mentee", "password", Member.Role.MENTEE); - PracticePostCreateRequest request = new PracticePostCreateRequest("PRACTICEPOST","실무경험","실무내용",""); + PostCreateRequest request = new PostCreateRequest("PRACTICEPOST","실무경험","실무내용",""); // when & then - assertThatThrownBy(() -> postService.createPracticePost(request, mentee)) + assertThatThrownBy(() -> postService.createPost(request, mentee)) .isInstanceOf(ServiceException.class) .hasMessage("400 : 실무 경험 공유 게시글은 멘토만 작성할 수 있습니다."); @@ -102,7 +101,7 @@ void createPost_practicePost_mentee_failure() { void createPost_questionPost_initializeIsResolve() { // given Member member = MemberFixture.create(1L, "test@test.com", "Test User", "password", Member.Role.MENTEE); - PostCreateRequest request = new PostCreateRequest("QUESTIONPOST","질문경험","질문내용"); + PostCreateRequest request = new PostCreateRequest("QUESTIONPOST","질문경험","질문내용",""); Post expectedPost = createPost("질문", "질문 내용", member, Post.PostType.QUESTIONPOST); expectedPost.updateResolveStatus(false); @@ -123,7 +122,7 @@ void createPost_questionPost_initializeIsResolve() { void createPost_invalidPostType_failure() { // given Member member = MemberFixture.createDefault(); - PostCreateRequest request = new PostCreateRequest("INVALIDPOST","질문경험","질문내용"); + PostCreateRequest request = new PostCreateRequest("INVALIDPOST","질문경험","질문내용",""); // when & then assertThatThrownBy(() -> postService.createPost(request, member)) @@ -203,7 +202,7 @@ void updatePost_author_success() { Member author = MemberFixture.create(1L, "author@test.com", "Author", "password", Member.Role.MENTEE); Post post = createPost("기존 제목", "기존 내용", author, Post.PostType.INFORMATIONPOST); Long postId = 1L; - PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","새 제목","새 내용"); + PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","새 제목","새 내용",""); when(postRepository.findById(postId)).thenReturn(Optional.of(post)); when(postRepository.save(any(Post.class))).thenReturn(post); @@ -225,7 +224,7 @@ void updatePost_notAuthor_failure() { Member otherUser = MemberFixture.create(2L, "other@test.com", "Other", "password", Member.Role.MENTEE); Post post = createPost("제목", "내용", author, Post.PostType.INFORMATIONPOST); Long postId = 1L; - PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","새 내용","새 제목"); + PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","새 내용","새 제목",""); when(postRepository.findById(postId)).thenReturn(Optional.of(post)); @@ -245,7 +244,7 @@ void updatePost_nullOrBlankTitle_failure() { Member author = MemberFixture.create(1L, "author@test.com", "Author", "password", Member.Role.MENTEE); Post post = createPost("제목", "내용", author, Post.PostType.INFORMATIONPOST); Long postId = 1L; - PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","","새 내용"); + PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","","새 내용",""); when(postRepository.findById(postId)).thenReturn(Optional.of(post)); @@ -264,7 +263,7 @@ void updatePost_nullOrBlankContent_failure() { Member author = MemberFixture.create(1L, "author@test.com", "Author", "password", Member.Role.MENTEE); Post post = createPost("제목", "내용", author, Post.PostType.INFORMATIONPOST); Long postId = 1L; - PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","새 제목",""); + PostCreateRequest updateRequest = new PostCreateRequest("INFORMATIONPOST","새 제목","",""); when(postRepository.findById(postId)).thenReturn(Optional.of(post)); From c930d04c572dc43a0a635a4559ea4adc636c3ec6 Mon Sep 17 00:00:00 2001 From: luckhee Date: Wed, 1 Oct 2025 17:01:09 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=88=98=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 --- .../main/java/com/back/domain/post/post/dto/PostDto.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/back/src/main/java/com/back/domain/post/post/dto/PostDto.java b/back/src/main/java/com/back/domain/post/post/dto/PostDto.java index 1a7cc565..c9d516fa 100644 --- a/back/src/main/java/com/back/domain/post/post/dto/PostDto.java +++ b/back/src/main/java/com/back/domain/post/post/dto/PostDto.java @@ -8,7 +8,8 @@ public record PostDto( Long postId, String title, - String content + String content, + int viewCount ) { @@ -16,7 +17,8 @@ public static PostDto from(Post post) { return new PostDto( post.getId(), post.getTitle(), - post.getContent() + post.getContent(), + post.getViewCount() ); } }