From f67f713fd7dae8bfe955f2284d58b5aa89e3829c Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Thu, 3 Jul 2025 17:17:09 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=EC=9E=90,=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80,=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EC=83=81=ED=92=88=20=ED=95=B4=EC=8B=9C=ED=83=9C=EA=B7=B8=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20=EC=9E=91=EC=97=85=20(#141)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HashTag -> HashtagCategory로 이름 변경 (해시태그 대분류 enum) - PostHashtag, ProductHashtag enum 클래스 추가 - Post 엔티티에서 grooming_category 필드 제거 - 게시글, 상품의 해시태그 목록을 조회하는 API 추가 --- src/docs/asciidoc/post-api.adoc | 37 +++++++++ .../LoadPostHashTagsController.java | 30 +++++++ .../LoadPostProductHashTagsController.java | 30 +++++++ .../dto/request/SavePostProductRequest.java | 4 +- .../web/post/dto/request/SavePostRequest.java | 6 +- .../dto/request/UpdatePostProductRequest.java | 8 +- .../post/dto/request/UpdatePostRequest.java | 12 +-- .../dto/response/LoadPostDetailResponse.java | 9 +- .../response/LoadPostHashTagsResponse.java | 19 +++++ .../LoadPostProductHashTagsResponse.java | 19 +++++ .../dto/response/PostProductResponse.java | 10 ++- .../dto/request/GeneralUserSignupRequest.java | 4 +- .../dto/request/SocialUserSignupRequest.java | 4 +- .../dto/request/UpdateUserInfoRequest.java | 4 +- .../response/GetUserSimpleInfoResponse.java | 18 ++-- .../dto/response/UpdateUserInfoResponse.java | 18 ++-- .../response/UserSignupOptionsResponse.java | 6 +- .../out/persistence/mapper/PostMapper.java | 1 - .../out/persistence/model/PostJpaEntity.java | 23 ++--- .../model/PostProductJpaEntity.java | 14 ++-- .../out/persistence/model/UserJpaEntity.java | 13 ++- .../command/post/SavePostCommand.java | 9 +- .../command/post/SavePostProductCommand.java | 12 +-- .../command/post/UpdatePostCommand.java | 10 +-- .../post/UpdatePostProductCommand.java | 7 +- .../user/GeneralUserCreationCommand.java | 8 +- .../user/GeneralUserSignupCommand.java | 4 +- .../user/SocialUserCreationCommand.java | 8 +- .../command/user/SocialUserSignupCommand.java | 4 +- .../command/user/UpdateUserCommand.java | 4 +- .../port/in/post/LoadPostHashTagsUseCase.java | 11 +++ .../post/LoadPostProductHashTagsUseCase.java | 11 +++ .../service/post/LoadPostHashTagsService.java | 36 ++++++++ .../LoadPostProductHashTagsService.java | 40 +++++++++ .../user/GetUserSignupOptionsService.java | 4 +- .../service/user/UpdateUserInfoService.java | 4 +- .../vo/HashtagCategoryDetailVo.java | 20 +++++ .../application/vo/post/PostDetailVo.java | 9 +- .../vo/post/PostHashTagDetailVo.java | 22 +++++ .../application/vo/post/PostHashTagVo.java | 20 +++++ .../application/vo/post/PostInfoVo.java | 7 +- .../vo/post/PostProductCategoryVo.java | 20 +++++ .../vo/post/PostProductDetailVo.java | 6 +- .../vo/post/PostProductHashTagDetailVo.java | 22 +++++ .../vo/post/PostProductHashTagVo.java | 20 +++++ .../com/ftm/server/domain/entity/Post.java | 21 ++--- .../ftm/server/domain/entity/PostProduct.java | 16 ++-- .../com/ftm/server/domain/entity/User.java | 27 +++--- .../com/ftm/server/domain/enums/HashTag.java | 16 ---- .../server/domain/enums/HashtagCategory.java | 20 +++++ .../ftm/server/domain/enums/PostHashtag.java | 46 ++++++++++ .../server/domain/enums/ProductCategory.java | 21 +++++ .../server/domain/enums/ProductHashtag.java | 77 +++++++++++++++++ src/test/java/com/ftm/server/BaseTest.java | 4 +- .../com/ftm/server/post/DeletePostTest.java | 6 +- .../ftm/server/post/LoadPostDetailTest.java | 11 +-- .../ftm/server/post/LoadPostHashTagsTest.java | 81 ++++++++++++++++++ .../post/LoadPostProductHashTagsTest.java | 83 +++++++++++++++++++ .../ftm/server/post/LoadTrendingManTest.java | 13 +-- .../server/post/LoadTrendingPostsTest.java | 13 +-- .../ftm/server/post/PostHardDeleteTest.java | 6 +- .../com/ftm/server/post/SavePostTest.java | 12 +-- .../com/ftm/server/post/UpdatePostTest.java | 26 +----- .../ftm/server/user/CreateBookmarkTest.java | 2 - .../ftm/server/user/DeleteBookmarkTest.java | 4 - .../server/user/GeneralUserSignupTest.java | 18 ++-- .../server/user/LoadMyBookmarkPostTest.java | 6 +- .../com/ftm/server/user/LoadMyPostsTest.java | 6 +- .../ftm/server/user/SocialUserSignupTest.java | 10 +-- 69 files changed, 860 insertions(+), 292 deletions(-) create mode 100644 src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostHashTagsController.java create mode 100644 src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostProductHashTagsController.java create mode 100644 src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostHashTagsResponse.java create mode 100644 src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostProductHashTagsResponse.java create mode 100644 src/main/java/com/ftm/server/application/port/in/post/LoadPostHashTagsUseCase.java create mode 100644 src/main/java/com/ftm/server/application/port/in/post/LoadPostProductHashTagsUseCase.java create mode 100644 src/main/java/com/ftm/server/application/service/post/LoadPostHashTagsService.java create mode 100644 src/main/java/com/ftm/server/application/service/post/product/LoadPostProductHashTagsService.java create mode 100644 src/main/java/com/ftm/server/application/vo/HashtagCategoryDetailVo.java create mode 100644 src/main/java/com/ftm/server/application/vo/post/PostHashTagDetailVo.java create mode 100644 src/main/java/com/ftm/server/application/vo/post/PostHashTagVo.java create mode 100644 src/main/java/com/ftm/server/application/vo/post/PostProductCategoryVo.java create mode 100644 src/main/java/com/ftm/server/application/vo/post/PostProductHashTagDetailVo.java create mode 100644 src/main/java/com/ftm/server/application/vo/post/PostProductHashTagVo.java delete mode 100644 src/main/java/com/ftm/server/domain/enums/HashTag.java create mode 100644 src/main/java/com/ftm/server/domain/enums/HashtagCategory.java create mode 100644 src/main/java/com/ftm/server/domain/enums/PostHashtag.java create mode 100644 src/main/java/com/ftm/server/domain/enums/ProductCategory.java create mode 100644 src/main/java/com/ftm/server/domain/enums/ProductHashtag.java create mode 100644 src/test/java/com/ftm/server/post/LoadPostHashTagsTest.java create mode 100644 src/test/java/com/ftm/server/post/LoadPostProductHashTagsTest.java diff --git a/src/docs/asciidoc/post-api.adoc b/src/docs/asciidoc/post-api.adoc index e76b3e6..4cbc060 100644 --- a/src/docs/asciidoc/post-api.adoc +++ b/src/docs/asciidoc/post-api.adoc @@ -226,3 +226,40 @@ include::{snippetsDir}/loadTrendingMan/1/response-fields.adoc[] --- + + +=== **7. 게시글 해시태그 목록 조회** + +게시글 전용 해시태그 목록을 조회하는 api 입니다. + +카테고리 별 해시태그 목록을 응답합니다. + +게시글 생성/수정 요청의 hashtags 리스트에 해당 api의 data.results[].hashtags[].name 값을 전달해주세요. + +==== Request +include::{snippetsDir}/loadPostHashTags/1/http-request.adoc[] + +==== 성공 Response +include::{snippetsDir}/loadPostHashTags/1/http-response.adoc[] + +==== Response Body Fields +include::{snippetsDir}/loadPostHashTags/1/response-fields.adoc[] + +--- + + + +=== **8. 게시글 상품 해시태그 목록 조회** + +게시글 상품 전용 해시태그 목록을 조회하는 api 입니다. + +카테고리 별 해시태그 목록을 응답합니다. + +상품 생성/수정 요청의 hashtags 리스트에 해당 api의 data.results[].hashtags[].name 값을 전달해주세요. + +==== Request +include::{snippetsDir}/loadPostProductHashTags/1/http-request.adoc[] + +==== 성공 Response +include::{snippetsDir}/loadPostProductHashTags/1/http-response.adoc[] + +==== Response Body Fields +include::{snippetsDir}/loadPostProductHashTags/1/response-fields.adoc[] + +--- diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostHashTagsController.java b/src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostHashTagsController.java new file mode 100644 index 0000000..734fd17 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostHashTagsController.java @@ -0,0 +1,30 @@ +package com.ftm.server.adapter.in.web.post.controller; + +import com.ftm.server.adapter.in.web.post.dto.response.LoadPostHashTagsResponse; +import com.ftm.server.application.port.in.post.LoadPostHashTagsUseCase; +import com.ftm.server.application.vo.post.PostHashTagDetailVo; +import com.ftm.server.common.response.ApiResponse; +import com.ftm.server.common.response.enums.SuccessResponseCode; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class LoadPostHashTagsController { + + private final LoadPostHashTagsUseCase loadPostHashTagsUseCase; + + @GetMapping("/api/posts/hashtags") + public ResponseEntity> loadPostHashTags() { + List vos = loadPostHashTagsUseCase.execute(); + + return ResponseEntity.status(HttpStatus.OK) + .body( + ApiResponse.success( + SuccessResponseCode.OK, LoadPostHashTagsResponse.of(vos))); + } +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostProductHashTagsController.java b/src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostProductHashTagsController.java new file mode 100644 index 0000000..d667640 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/post/controller/LoadPostProductHashTagsController.java @@ -0,0 +1,30 @@ +package com.ftm.server.adapter.in.web.post.controller; + +import com.ftm.server.adapter.in.web.post.dto.response.LoadPostProductHashTagsResponse; +import com.ftm.server.application.port.in.post.LoadPostProductHashTagsUseCase; +import com.ftm.server.application.vo.post.PostProductHashTagDetailVo; +import com.ftm.server.common.response.ApiResponse; +import com.ftm.server.common.response.enums.SuccessResponseCode; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class LoadPostProductHashTagsController { + + private final LoadPostProductHashTagsUseCase loadPostProductHashTagsUseCase; + + @GetMapping("/api/posts/products/hashtags") + public ResponseEntity> loadProductHashTags() { + List vos = loadPostProductHashTagsUseCase.execute(); + + return ResponseEntity.status(HttpStatus.OK) + .body( + ApiResponse.success( + SuccessResponseCode.OK, LoadPostProductHashTagsResponse.of(vos))); + } +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostProductRequest.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostProductRequest.java index cdd7e06..9128ddd 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostProductRequest.java +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostProductRequest.java @@ -1,6 +1,6 @@ package com.ftm.server.adapter.in.web.post.dto.request; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import jakarta.validation.constraints.NotEmpty; import java.util.List; import lombok.AllArgsConstructor; @@ -13,5 +13,5 @@ public class SavePostProductRequest { private int imageIndex; @NotEmpty private String name; private String brand; - private List hashtags; + private List hashtags; } diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostRequest.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostRequest.java index a0b457c..0c592a2 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostRequest.java +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/SavePostRequest.java @@ -1,7 +1,6 @@ package com.ftm.server.adapter.in.web.post.dto.request; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import jakarta.validation.constraints.NotEmpty; import java.util.List; import lombok.AllArgsConstructor; @@ -12,8 +11,7 @@ public class SavePostRequest { @NotEmpty private String title; - private GroomingCategory groomingCategory; - private List hashtags; + private List hashtags; @NotEmpty private String content; private List products; } diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostProductRequest.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostProductRequest.java index dd8235e..ff53eb9 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostProductRequest.java +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostProductRequest.java @@ -1,6 +1,6 @@ package com.ftm.server.adapter.in.web.post.dto.request; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import java.util.List; import lombok.Builder; import lombok.Getter; @@ -12,7 +12,7 @@ public class UpdatePostProductRequest { private final Long id; private final String name; private final String brand; - private final List hashTags; + private final List hashtags; private final Long deleteProductImageId; private final int imageIndex; @@ -20,14 +20,14 @@ public static UpdatePostProductRequest of( Long id, String name, String brand, - List hashTags, + List hashtags, Long deleteProductImageId, int imageIndex) { return UpdatePostProductRequest.builder() .id(id) .name(name) .brand(brand) - .hashTags(hashTags) + .hashtags(hashtags) .deleteProductImageId(deleteProductImageId) .imageIndex(imageIndex) .build(); diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostRequest.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostRequest.java index 0ca0a6a..81633f8 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostRequest.java +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/request/UpdatePostRequest.java @@ -1,7 +1,6 @@ package com.ftm.server.adapter.in.web.post.dto.request; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.util.List; import lombok.Builder; import lombok.Getter; @@ -11,8 +10,7 @@ public class UpdatePostRequest { private final String title; - private final GroomingCategory groomingCategory; - private final List hashTags; + private final List hashtags; private final String content; private final List deletePostImageIds; // 삭제할 게시글 이미지 ID 목록 @@ -22,8 +20,7 @@ public class UpdatePostRequest { public static UpdatePostRequest of( String title, - GroomingCategory groomingCategory, - List hashTags, + List hashtags, String content, List deletePostImageIds, List deleteProductIds, @@ -31,8 +28,7 @@ public static UpdatePostRequest of( List updateProducts) { return UpdatePostRequest.builder() .title(title) - .groomingCategory(groomingCategory) - .hashTags(hashTags) + .hashtags(hashtags) .content(content) .deletePostImageIds(deletePostImageIds) .deleteProductIds(deleteProductIds) diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostDetailResponse.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostDetailResponse.java index 1008297..fc6a798 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostDetailResponse.java +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostDetailResponse.java @@ -2,8 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ftm.server.application.vo.post.PostDetailVo; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; @@ -15,8 +14,7 @@ public class LoadPostDetailResponse { private final Long postId; private final String title; private final String content; - private final GroomingCategory groomingCategory; - private final List hashTags; + private final List hashtags; private final Integer viewCount; private final Integer likeCount; @@ -34,8 +32,7 @@ private LoadPostDetailResponse(PostDetailVo postDetailVo) { this.postId = postDetailVo.getPostId(); this.title = postDetailVo.getTitle(); this.content = postDetailVo.getContent(); - this.groomingCategory = postDetailVo.getGroomingCategory(); - this.hashTags = Arrays.stream(postDetailVo.getHashTags()).map(HashTag::getValue).toList(); + this.hashtags = Arrays.stream(postDetailVo.getHashtags()).map(PostHashtag::getTag).toList(); this.viewCount = postDetailVo.getViewCount(); this.likeCount = postDetailVo.getLikeCount(); this.createdAt = postDetailVo.getCreatedAt(); diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostHashTagsResponse.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostHashTagsResponse.java new file mode 100644 index 0000000..829feb4 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostHashTagsResponse.java @@ -0,0 +1,19 @@ +package com.ftm.server.adapter.in.web.post.dto.response; + +import com.ftm.server.application.vo.post.PostHashTagDetailVo; +import java.util.List; +import lombok.Getter; + +@Getter +public class LoadPostHashTagsResponse { + + private final List results; + + private LoadPostHashTagsResponse(List results) { + this.results = results; + } + + public static LoadPostHashTagsResponse of(List results) { + return new LoadPostHashTagsResponse(results); + } +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostProductHashTagsResponse.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostProductHashTagsResponse.java new file mode 100644 index 0000000..8d8a07d --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/LoadPostProductHashTagsResponse.java @@ -0,0 +1,19 @@ +package com.ftm.server.adapter.in.web.post.dto.response; + +import com.ftm.server.application.vo.post.PostProductHashTagDetailVo; +import java.util.List; +import lombok.Getter; + +@Getter +public class LoadPostProductHashTagsResponse { + + private final List results; + + private LoadPostProductHashTagsResponse(List results) { + this.results = results; + } + + public static LoadPostProductHashTagsResponse of(List results) { + return new LoadPostProductHashTagsResponse(results); + } +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/PostProductResponse.java b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/PostProductResponse.java index 895d6fe..ca544e1 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/PostProductResponse.java +++ b/src/main/java/com/ftm/server/adapter/in/web/post/dto/response/PostProductResponse.java @@ -1,7 +1,7 @@ package com.ftm.server.adapter.in.web.post.dto.response; import com.ftm.server.application.vo.post.PostProductDetailVo; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import java.util.Arrays; import java.util.List; import lombok.Getter; @@ -12,15 +12,17 @@ public class PostProductResponse { private final Long postProductId; private final String name; private final String brand; - private final List hashTags; + private final List hashtags; private final PostProductImageResponse postProductImage; private PostProductResponse(PostProductDetailVo postProductDetailVo) { this.postProductId = postProductDetailVo.getPostProductId(); this.name = postProductDetailVo.getName(); this.brand = postProductDetailVo.getBrand(); - this.hashTags = - Arrays.stream(postProductDetailVo.getHashTags()).map(HashTag::getValue).toList(); + this.hashtags = + Arrays.stream(postProductDetailVo.getHashtags()) + .map(ProductHashtag::getTag) + .toList(); this.postProductImage = PostProductImageResponse.from(postProductDetailVo.getPostProductImage()); } diff --git a/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/GeneralUserSignupRequest.java b/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/GeneralUserSignupRequest.java index 4c3658b..aaabbd4 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/GeneralUserSignupRequest.java +++ b/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/GeneralUserSignupRequest.java @@ -1,7 +1,7 @@ package com.ftm.server.adapter.in.web.user.dto.request; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import java.util.List; @@ -22,5 +22,5 @@ public class GeneralUserSignupRequest { @NotNull private final AgeGroup age; - private final List hashtags; + private final List hashtags; } diff --git a/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/SocialUserSignupRequest.java b/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/SocialUserSignupRequest.java index c924908..346941e 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/SocialUserSignupRequest.java +++ b/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/SocialUserSignupRequest.java @@ -1,7 +1,7 @@ package com.ftm.server.adapter.in.web.user.dto.request; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import jakarta.validation.constraints.NotNull; import java.util.List; import lombok.Data; @@ -10,5 +10,5 @@ public class SocialUserSignupRequest { @NotNull private final AgeGroup age; - private final List hashtags; + private final List hashtags; } diff --git a/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/UpdateUserInfoRequest.java b/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/UpdateUserInfoRequest.java index 1358485..42fc0fd 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/UpdateUserInfoRequest.java +++ b/src/main/java/com/ftm/server/adapter/in/web/user/dto/request/UpdateUserInfoRequest.java @@ -1,13 +1,13 @@ package com.ftm.server.adapter.in.web.user.dto.request; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import lombok.Data; @Data public class UpdateUserInfoRequest { private final String nickname; private final AgeGroup age; - private final HashTag[] hashtags; + private final HashtagCategory[] hashtags; private final String imageAction; } diff --git a/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/GetUserSimpleInfoResponse.java b/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/GetUserSimpleInfoResponse.java index ed49eb9..36298df 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/GetUserSimpleInfoResponse.java +++ b/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/GetUserSimpleInfoResponse.java @@ -5,7 +5,7 @@ import com.ftm.server.domain.entity.User; import com.ftm.server.domain.entity.UserImage; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -25,17 +25,17 @@ public static GetUserSimpleInfoResponse from(UserWithImageVo userWithImageVo) { String imageUrl = PropertiesHolder.CDN_PATH + "/" + userImage.getObjectKey(); - HashTag[] userHashTagWithArray = user.getFavoriteHashtags(); - List userHashTag = + HashtagCategory[] userHashTagWithArray = user.getFavoriteHashtags(); + List userHashTag = userHashTagWithArray == null || userHashTagWithArray.length == 0 ? new ArrayList<>() : Arrays.stream(user.getFavoriteHashtags()).toList(); List hashTagInfos = new ArrayList<>(); - for (HashTag hashTag : HashTag.values()) { - if (userHashTag.contains(hashTag)) { - hashTagInfos.add(HashTagInfo.from(hashTag, true)); + for (HashtagCategory hashtag : HashtagCategory.values()) { + if (userHashTag.contains(hashtag)) { + hashTagInfos.add(HashTagInfo.from(hashtag, true)); } else { - hashTagInfos.add(HashTagInfo.from(hashTag, false)); + hashTagInfos.add(HashTagInfo.from(hashtag, false)); } } return new GetUserSimpleInfoResponse( @@ -53,8 +53,8 @@ private static AgeInfo from(AgeGroup ageGroup) { } private record HashTagInfo(String value, String description, Boolean isSelected) { - private static HashTagInfo from(HashTag hashTag, Boolean isSelected) { - return new HashTagInfo(hashTag.name(), hashTag.getValue(), isSelected); + private static HashTagInfo from(HashtagCategory hashTag, Boolean isSelected) { + return new HashTagInfo(hashTag.name(), hashTag.getLabel(), isSelected); } } } diff --git a/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UpdateUserInfoResponse.java b/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UpdateUserInfoResponse.java index b0ece65..8a82c83 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UpdateUserInfoResponse.java +++ b/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UpdateUserInfoResponse.java @@ -5,7 +5,7 @@ import com.ftm.server.domain.entity.User; import com.ftm.server.domain.entity.UserImage; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -24,17 +24,17 @@ public static UpdateUserInfoResponse from(UserWithImageVo userWithImageVo) { UserImage userImage = userWithImageVo.getUserImage(); String imageUrl = PropertiesHolder.CDN_PATH + "/" + userImage.getObjectKey(); - HashTag[] userHashTagWithArray = user.getFavoriteHashtags(); - List userHashTag = + HashtagCategory[] userHashTagWithArray = user.getFavoriteHashtags(); + List userHashTag = userHashTagWithArray == null || userHashTagWithArray.length == 0 ? new ArrayList<>() : Arrays.stream(user.getFavoriteHashtags()).toList(); List hashTagInfos = new ArrayList<>(); - for (HashTag hashTag : HashTag.values()) { - if (userHashTag.contains(hashTag)) { - hashTagInfos.add(HashTagInfo.from(hashTag, true)); + for (HashtagCategory hashtag : HashtagCategory.values()) { + if (userHashTag.contains(hashtag)) { + hashTagInfos.add(HashTagInfo.from(hashtag, true)); } else { - hashTagInfos.add(HashTagInfo.from(hashTag, false)); + hashTagInfos.add(HashTagInfo.from(hashtag, false)); } } return new UpdateUserInfoResponse( @@ -52,8 +52,8 @@ private static AgeInfo from(AgeGroup ageGroup) { } private record HashTagInfo(String value, String description, Boolean isSelected) { - private static HashTagInfo from(HashTag hashTag, Boolean isSelected) { - return new HashTagInfo(hashTag.name(), hashTag.getValue(), isSelected); + private static HashTagInfo from(HashtagCategory hashTag, Boolean isSelected) { + return new HashTagInfo(hashTag.name(), hashTag.getLabel(), isSelected); } } } diff --git a/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UserSignupOptionsResponse.java b/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UserSignupOptionsResponse.java index 4711906..a2b58d7 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UserSignupOptionsResponse.java +++ b/src/main/java/com/ftm/server/adapter/in/web/user/dto/response/UserSignupOptionsResponse.java @@ -2,7 +2,7 @@ import com.ftm.server.application.vo.user.UserSignupOptionsVo; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import java.util.List; import lombok.Data; @@ -17,8 +17,8 @@ public static UserSignupOptionsResponse from(UserSignupOptionsVo vo) { } public record EnumDescriptors(String value, String description) { - public static EnumDescriptors from(HashTag hashTag) { - return new EnumDescriptors(hashTag.name(), hashTag.getValue()); + public static EnumDescriptors from(HashtagCategory hashtagCategory) { + return new EnumDescriptors(hashtagCategory.name(), hashtagCategory.getLabel()); } public static EnumDescriptors from(AgeGroup ageGroup) { diff --git a/src/main/java/com/ftm/server/adapter/out/persistence/mapper/PostMapper.java b/src/main/java/com/ftm/server/adapter/out/persistence/mapper/PostMapper.java index 930fc58..e62fa60 100644 --- a/src/main/java/com/ftm/server/adapter/out/persistence/mapper/PostMapper.java +++ b/src/main/java/com/ftm/server/adapter/out/persistence/mapper/PostMapper.java @@ -14,7 +14,6 @@ public Post toDomainEntity(PostJpaEntity jpaEntity) { jpaEntity.getUser().getId(), jpaEntity.getTitle(), jpaEntity.getContent(), - jpaEntity.getGroomingCategory(), jpaEntity.getHashtags(), jpaEntity.getViewCount(), jpaEntity.getLikeCount(), diff --git a/src/main/java/com/ftm/server/adapter/out/persistence/model/PostJpaEntity.java b/src/main/java/com/ftm/server/adapter/out/persistence/model/PostJpaEntity.java index 6b6fdcd..073f9bc 100644 --- a/src/main/java/com/ftm/server/adapter/out/persistence/model/PostJpaEntity.java +++ b/src/main/java/com/ftm/server/adapter/out/persistence/model/PostJpaEntity.java @@ -1,8 +1,7 @@ package com.ftm.server.adapter.out.persistence.model; import com.ftm.server.domain.entity.Post; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import io.hypersistence.utils.hibernate.type.array.EnumArrayType; import io.hypersistence.utils.hibernate.type.array.internal.AbstractArrayType; import jakarta.persistence.*; @@ -11,9 +10,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.annotations.Type; -import org.hibernate.type.SqlTypes; @Entity @Table(name = "post") @@ -34,19 +31,14 @@ public class PostJpaEntity extends BaseTimeJpaEntity { @Column(nullable = false) private String content; - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - @Column(nullable = false, name = "grooming_category", columnDefinition = "grooming_category") - private GroomingCategory groomingCategory; - @Type( value = EnumArrayType.class, parameters = @org.hibernate.annotations.Parameter( name = AbstractArrayType.SQL_ARRAY_TYPE, - value = "hashtag")) - @Column(name = "hashtags", columnDefinition = "hashtag[]") - private HashTag[] hashtags; + value = "post_hashtag")) + @Column(name = "hashtags", columnDefinition = "post_hashtag[]") + private PostHashtag[] hashtags; private Integer viewCount = 0; @@ -61,8 +53,7 @@ private PostJpaEntity( UserJpaEntity user, String title, String content, - GroomingCategory groomingCategory, - HashTag[] hashtags, + PostHashtag[] hashtags, Integer viewCount, Integer likeCount, Boolean isDeleted, @@ -70,7 +61,6 @@ private PostJpaEntity( this.user = user; this.title = title; this.content = content; - this.groomingCategory = groomingCategory; this.hashtags = hashtags; this.viewCount = viewCount; this.likeCount = likeCount; @@ -83,7 +73,6 @@ public static PostJpaEntity from(Post post, UserJpaEntity userJpaEntity) { .user(userJpaEntity) .title(post.getTitle()) .content(post.getContent()) - .groomingCategory(post.getGroomingCategory()) .hashtags(post.getHashtags()) .viewCount(post.getViewCount()) .likeCount(post.getLikeCount()) @@ -95,7 +84,6 @@ public static PostJpaEntity from(Post post, UserJpaEntity userJpaEntity) { public void updatePostForDomainEntity(Post post) { this.title = post.getTitle(); this.content = post.getContent(); - this.groomingCategory = post.getGroomingCategory(); this.hashtags = post.getHashtags(); this.viewCount = post.getViewCount(); this.likeCount = post.getLikeCount(); @@ -107,7 +95,6 @@ public void updatePostForDomainEntity(Post post, UserJpaEntity user) { this.title = post.getTitle(); this.user = user; this.content = post.getContent(); - this.groomingCategory = post.getGroomingCategory(); this.hashtags = post.getHashtags(); this.viewCount = post.getViewCount(); this.likeCount = post.getLikeCount(); diff --git a/src/main/java/com/ftm/server/adapter/out/persistence/model/PostProductJpaEntity.java b/src/main/java/com/ftm/server/adapter/out/persistence/model/PostProductJpaEntity.java index dbaed00..3316b81 100644 --- a/src/main/java/com/ftm/server/adapter/out/persistence/model/PostProductJpaEntity.java +++ b/src/main/java/com/ftm/server/adapter/out/persistence/model/PostProductJpaEntity.java @@ -1,7 +1,7 @@ package com.ftm.server.adapter.out.persistence.model; import com.ftm.server.domain.entity.PostProduct; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import io.hypersistence.utils.hibernate.type.array.EnumArrayType; import io.hypersistence.utils.hibernate.type.array.internal.AbstractArrayType; import jakarta.persistence.*; @@ -35,13 +35,13 @@ public class PostProductJpaEntity extends BaseTimeJpaEntity { parameters = @org.hibernate.annotations.Parameter( name = AbstractArrayType.SQL_ARRAY_TYPE, - value = "hashtag")) - @Column(name = "hashtags", columnDefinition = "hashtag[]") - private HashTag[] hashtags; + value = "product_hashtag")) + @Column(name = "hashtags", columnDefinition = "product_hashtag[]") + private ProductHashtag[] hashtags; @Builder(access = AccessLevel.PRIVATE) private PostProductJpaEntity( - PostJpaEntity post, String name, String brand, HashTag[] hashtags) { + PostJpaEntity post, String name, String brand, ProductHashtag[] hashtags) { this.post = post; this.name = name; this.brand = brand; @@ -53,13 +53,13 @@ public static PostProductJpaEntity from(PostProduct postProduct, PostJpaEntity p .post(postJpaEntity) .name(postProduct.getName()) .brand(postProduct.getBrand()) - .hashtags(postProduct.getHashTags()) + .hashtags(postProduct.getHashtags()) .build(); } public void updatePostProductForDomainEntity(PostProduct postProduct) { this.name = postProduct.getName(); this.brand = postProduct.getBrand(); - this.hashtags = postProduct.getHashTags(); + this.hashtags = postProduct.getHashtags(); } } diff --git a/src/main/java/com/ftm/server/adapter/out/persistence/model/UserJpaEntity.java b/src/main/java/com/ftm/server/adapter/out/persistence/model/UserJpaEntity.java index 74e69cb..529fe77 100644 --- a/src/main/java/com/ftm/server/adapter/out/persistence/model/UserJpaEntity.java +++ b/src/main/java/com/ftm/server/adapter/out/persistence/model/UserJpaEntity.java @@ -1,10 +1,7 @@ package com.ftm.server.adapter.out.persistence.model; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; -import com.ftm.server.domain.enums.SocialProvider; -import com.ftm.server.domain.enums.UserRole; +import com.ftm.server.domain.enums.*; import io.hypersistence.utils.hibernate.type.array.EnumArrayType; import io.hypersistence.utils.hibernate.type.array.internal.AbstractArrayType; import jakarta.persistence.*; @@ -64,14 +61,14 @@ public class UserJpaEntity extends BaseTimeJpaEntity { parameters = { @org.hibernate.annotations.Parameter( name = AbstractArrayType.SQL_ARRAY_TYPE, - value = "hashtag" // PostgreSQL에서 정의된 ENUM 타입 이름 + value = "hashtag_category" // PostgreSQL에서 정의된 ENUM 타입 이름 ) }) @Column( name = "favorite_hashtags", - columnDefinition = "hashtag[]" // PostgreSQL의 ENUM 배열 타입으로 지정 + columnDefinition = "hashtag_category[]" // PostgreSQL의 ENUM 배열 타입으로 지정 ) - private HashTag[] favoriteHashtags; + private HashtagCategory[] favoriteHashtags; @Column(nullable = false) private Boolean isDeleted = false; @@ -89,7 +86,7 @@ private UserJpaEntity( Integer groomingScore, GroomingLevelJpaEntity groomingLevel, UserRole role, - HashTag[] favoriteHashtags, + HashtagCategory[] favoriteHashtags, Boolean isDeleted, LocalDateTime deletedAt) { this.email = email; diff --git a/src/main/java/com/ftm/server/application/command/post/SavePostCommand.java b/src/main/java/com/ftm/server/application/command/post/SavePostCommand.java index 295d361..cb84772 100644 --- a/src/main/java/com/ftm/server/application/command/post/SavePostCommand.java +++ b/src/main/java/com/ftm/server/application/command/post/SavePostCommand.java @@ -1,8 +1,7 @@ package com.ftm.server.application.command.post; import com.ftm.server.adapter.in.web.post.dto.request.SavePostRequest; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.util.List; import lombok.Getter; import org.springframework.web.multipart.MultipartFile; @@ -12,8 +11,7 @@ public class SavePostCommand { private final Long userId; private final String title; - private final GroomingCategory groomingCategory; - private final HashTag[] hashTags; + private final PostHashtag[] hashtags; private final String content; private final List postImages; private final List products; @@ -27,8 +25,7 @@ private SavePostCommand( List productImages) { this.userId = userId; this.title = request.getTitle(); - this.groomingCategory = request.getGroomingCategory(); - this.hashTags = request.getHashtags().toArray(new HashTag[0]); + this.hashtags = request.getHashtags().toArray(new PostHashtag[0]); this.content = request.getContent(); this.postImages = postImages; this.products = products; diff --git a/src/main/java/com/ftm/server/application/command/post/SavePostProductCommand.java b/src/main/java/com/ftm/server/application/command/post/SavePostProductCommand.java index a7b5f52..96c83c3 100644 --- a/src/main/java/com/ftm/server/application/command/post/SavePostProductCommand.java +++ b/src/main/java/com/ftm/server/application/command/post/SavePostProductCommand.java @@ -1,7 +1,7 @@ package com.ftm.server.application.command.post; import com.ftm.server.adapter.in.web.post.dto.request.SavePostProductRequest; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import lombok.Getter; @Getter @@ -10,15 +10,15 @@ public class SavePostProductCommand implements HasImageIndex { private final Long postId; // null 가능 (저장 전) private final String name; private final String brand; - private final HashTag[] hashTags; + private final ProductHashtag[] hashtags; private final int imageIndex; private SavePostProductCommand( - Long postId, String name, String brand, HashTag[] hashTags, int imageIndex) { + Long postId, String name, String brand, ProductHashtag[] hashtags, int imageIndex) { this.postId = postId; this.brand = name; this.name = brand; - this.hashTags = hashTags; + this.hashtags = hashtags; this.imageIndex = imageIndex; } @@ -28,13 +28,13 @@ public static SavePostProductCommand from(SavePostProductRequest request) { null, request.getName(), request.getBrand(), - request.getHashtags().toArray(new HashTag[0]), + request.getHashtags().toArray(new ProductHashtag[0]), request.getImageIndex()); } // postId 추가한 새로운 인스턴스 반환 public SavePostProductCommand withPostId(Long postId) { return new SavePostProductCommand( - postId, this.name, this.brand, this.hashTags, this.imageIndex); + postId, this.name, this.brand, this.hashtags, this.imageIndex); } } diff --git a/src/main/java/com/ftm/server/application/command/post/UpdatePostCommand.java b/src/main/java/com/ftm/server/application/command/post/UpdatePostCommand.java index 861df24..45c893c 100644 --- a/src/main/java/com/ftm/server/application/command/post/UpdatePostCommand.java +++ b/src/main/java/com/ftm/server/application/command/post/UpdatePostCommand.java @@ -2,8 +2,7 @@ import com.ftm.server.adapter.in.web.post.dto.request.UpdatePostRequest; import com.ftm.server.common.utils.CollectionUtils; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.util.List; import lombok.Getter; import org.springframework.web.multipart.MultipartFile; @@ -14,8 +13,7 @@ public class UpdatePostCommand { private final Long id; private final Long userId; private final String title; - private final GroomingCategory groomingCategory; - private final HashTag[] hashTags; + private final PostHashtag[] hashtags; private final String content; private final List deletePostImageIds; private final List deleteProductIds; @@ -33,8 +31,8 @@ private UpdatePostCommand( this.id = id; this.userId = userId; this.title = request.getTitle(); - this.groomingCategory = request.getGroomingCategory(); - this.hashTags = CollectionUtils.listToArrayOrNull(request.getHashTags(), HashTag[]::new); + this.hashtags = + CollectionUtils.listToArrayOrNull(request.getHashtags(), PostHashtag[]::new); this.content = request.getContent(); this.deletePostImageIds = CollectionUtils.safeList(request.getDeletePostImageIds()); this.deleteProductIds = CollectionUtils.safeList(request.getDeleteProductIds()); diff --git a/src/main/java/com/ftm/server/application/command/post/UpdatePostProductCommand.java b/src/main/java/com/ftm/server/application/command/post/UpdatePostProductCommand.java index 890fab7..a1b7143 100644 --- a/src/main/java/com/ftm/server/application/command/post/UpdatePostProductCommand.java +++ b/src/main/java/com/ftm/server/application/command/post/UpdatePostProductCommand.java @@ -2,7 +2,7 @@ import com.ftm.server.adapter.in.web.post.dto.request.UpdatePostProductRequest; import com.ftm.server.common.utils.CollectionUtils; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import lombok.Getter; @Getter @@ -11,7 +11,7 @@ public class UpdatePostProductCommand implements HasImageIndex { private final Long id; private final String name; private final String brand; - private final HashTag[] hashTags; + private final ProductHashtag[] hashtags; private final Long deleteProductImageId; private final int imageIndex; @@ -19,7 +19,8 @@ private UpdatePostProductCommand(UpdatePostProductRequest request) { this.id = request.getId(); this.name = request.getName(); this.brand = request.getBrand(); - this.hashTags = CollectionUtils.listToArrayOrNull(request.getHashTags(), HashTag[]::new); + this.hashtags = + CollectionUtils.listToArrayOrNull(request.getHashtags(), ProductHashtag[]::new); this.deleteProductImageId = request.getDeleteProductImageId(); this.imageIndex = request.getImageIndex(); } diff --git a/src/main/java/com/ftm/server/application/command/user/GeneralUserCreationCommand.java b/src/main/java/com/ftm/server/application/command/user/GeneralUserCreationCommand.java index d95b99d..151820d 100644 --- a/src/main/java/com/ftm/server/application/command/user/GeneralUserCreationCommand.java +++ b/src/main/java/com/ftm/server/application/command/user/GeneralUserCreationCommand.java @@ -1,7 +1,7 @@ package com.ftm.server.application.command.user; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import java.util.List; import lombok.Data; @@ -11,14 +11,14 @@ public class GeneralUserCreationCommand { private final String password; private final String nickName; private final AgeGroup ageGroup; - private final List hashtags; + private final List hashtags; public static GeneralUserCreationCommand of( String email, String password, String nickName, AgeGroup ageGroup, - List hashtag) { - return new GeneralUserCreationCommand(email, password, nickName, ageGroup, hashtag); + List hashtags) { + return new GeneralUserCreationCommand(email, password, nickName, ageGroup, hashtags); } } diff --git a/src/main/java/com/ftm/server/application/command/user/GeneralUserSignupCommand.java b/src/main/java/com/ftm/server/application/command/user/GeneralUserSignupCommand.java index dbb1250..d0c7102 100644 --- a/src/main/java/com/ftm/server/application/command/user/GeneralUserSignupCommand.java +++ b/src/main/java/com/ftm/server/application/command/user/GeneralUserSignupCommand.java @@ -2,7 +2,7 @@ import com.ftm.server.adapter.in.web.user.dto.request.GeneralUserSignupRequest; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import java.util.List; import lombok.Data; @@ -12,7 +12,7 @@ public class GeneralUserSignupCommand { private final String email; private final String password; private final AgeGroup age; - private final List hashtags; + private final List hashtags; public static GeneralUserSignupCommand from(GeneralUserSignupRequest request) { return new GeneralUserSignupCommand( diff --git a/src/main/java/com/ftm/server/application/command/user/SocialUserCreationCommand.java b/src/main/java/com/ftm/server/application/command/user/SocialUserCreationCommand.java index b8be279..0271bb8 100644 --- a/src/main/java/com/ftm/server/application/command/user/SocialUserCreationCommand.java +++ b/src/main/java/com/ftm/server/application/command/user/SocialUserCreationCommand.java @@ -1,7 +1,7 @@ package com.ftm.server.application.command.user; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import com.ftm.server.domain.enums.SocialProvider; import java.util.List; import lombok.Data; @@ -12,14 +12,14 @@ public class SocialUserCreationCommand { private final String socialId; private final String nickname; private final AgeGroup age; - private final List hashtags; + private final List hashtags; public static SocialUserCreationCommand of( SocialProvider provider, String socialId, String nickname, AgeGroup age, - List hashTags) { - return new SocialUserCreationCommand(provider, socialId, nickname, age, hashTags); + List hashtags) { + return new SocialUserCreationCommand(provider, socialId, nickname, age, hashtags); } } diff --git a/src/main/java/com/ftm/server/application/command/user/SocialUserSignupCommand.java b/src/main/java/com/ftm/server/application/command/user/SocialUserSignupCommand.java index 4976f18..9107a13 100644 --- a/src/main/java/com/ftm/server/application/command/user/SocialUserSignupCommand.java +++ b/src/main/java/com/ftm/server/application/command/user/SocialUserSignupCommand.java @@ -3,7 +3,7 @@ import com.ftm.server.adapter.in.web.user.dto.request.SocialUserSignupRequest; import com.ftm.server.application.vo.auth.PendingSocialUserVo; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import com.ftm.server.domain.enums.SocialProvider; import java.util.List; import lombok.Data; @@ -13,7 +13,7 @@ public class SocialUserSignupCommand { private final SocialProvider socialProvider; private final String socialId; private final AgeGroup age; - private final List hashtags; + private final List hashtags; public static SocialUserSignupCommand from( SocialUserSignupRequest request, PendingSocialUserVo vo) { diff --git a/src/main/java/com/ftm/server/application/command/user/UpdateUserCommand.java b/src/main/java/com/ftm/server/application/command/user/UpdateUserCommand.java index cced455..eafdf50 100644 --- a/src/main/java/com/ftm/server/application/command/user/UpdateUserCommand.java +++ b/src/main/java/com/ftm/server/application/command/user/UpdateUserCommand.java @@ -2,7 +2,7 @@ import com.ftm.server.adapter.in.web.user.dto.request.UpdateUserInfoRequest; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import lombok.Data; import org.springframework.web.multipart.MultipartFile; @@ -11,7 +11,7 @@ public class UpdateUserCommand { private final Long userId; private final String nickname; private final AgeGroup ageGroup; - private final HashTag[] hashTags; + private final HashtagCategory[] hashtags; private final String imageAction; private final MultipartFile profileImage; diff --git a/src/main/java/com/ftm/server/application/port/in/post/LoadPostHashTagsUseCase.java b/src/main/java/com/ftm/server/application/port/in/post/LoadPostHashTagsUseCase.java new file mode 100644 index 0000000..ebfcedd --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/in/post/LoadPostHashTagsUseCase.java @@ -0,0 +1,11 @@ +package com.ftm.server.application.port.in.post; + +import com.ftm.server.application.vo.post.PostHashTagDetailVo; +import com.ftm.server.common.annotation.UseCase; +import java.util.List; + +@UseCase +public interface LoadPostHashTagsUseCase { + + List execute(); +} diff --git a/src/main/java/com/ftm/server/application/port/in/post/LoadPostProductHashTagsUseCase.java b/src/main/java/com/ftm/server/application/port/in/post/LoadPostProductHashTagsUseCase.java new file mode 100644 index 0000000..87ca120 --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/in/post/LoadPostProductHashTagsUseCase.java @@ -0,0 +1,11 @@ +package com.ftm.server.application.port.in.post; + +import com.ftm.server.application.vo.post.PostProductHashTagDetailVo; +import com.ftm.server.common.annotation.UseCase; +import java.util.List; + +@UseCase +public interface LoadPostProductHashTagsUseCase { + + List execute(); +} diff --git a/src/main/java/com/ftm/server/application/service/post/LoadPostHashTagsService.java b/src/main/java/com/ftm/server/application/service/post/LoadPostHashTagsService.java new file mode 100644 index 0000000..1f3c642 --- /dev/null +++ b/src/main/java/com/ftm/server/application/service/post/LoadPostHashTagsService.java @@ -0,0 +1,36 @@ +package com.ftm.server.application.service.post; + +import com.ftm.server.application.port.in.post.LoadPostHashTagsUseCase; +import com.ftm.server.application.vo.HashtagCategoryDetailVo; +import com.ftm.server.application.vo.post.PostHashTagDetailVo; +import com.ftm.server.application.vo.post.PostHashTagVo; +import com.ftm.server.domain.enums.HashtagCategory; +import com.ftm.server.domain.enums.PostHashtag; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import org.springframework.stereotype.Service; + +@Service +public class LoadPostHashTagsService implements LoadPostHashTagsUseCase { + + @Override + public List execute() { + Map> hashtagGroup = + Arrays.stream(PostHashtag.values()) + .collect(Collectors.groupingBy(PostHashtag::getCategory)); + + return hashtagGroup.entrySet().stream() + .map( + entry -> { + HashtagCategoryDetailVo category = + HashtagCategoryDetailVo.of(entry.getKey()); + List hashtags = + entry.getValue().stream().map(PostHashTagVo::of).toList(); + + return PostHashTagDetailVo.of(category, hashtags); + }) + .toList(); + } +} diff --git a/src/main/java/com/ftm/server/application/service/post/product/LoadPostProductHashTagsService.java b/src/main/java/com/ftm/server/application/service/post/product/LoadPostProductHashTagsService.java new file mode 100644 index 0000000..162bcba --- /dev/null +++ b/src/main/java/com/ftm/server/application/service/post/product/LoadPostProductHashTagsService.java @@ -0,0 +1,40 @@ +package com.ftm.server.application.service.post.product; + +import com.ftm.server.application.port.in.post.LoadPostProductHashTagsUseCase; +import com.ftm.server.application.vo.post.PostProductCategoryVo; +import com.ftm.server.application.vo.post.PostProductHashTagDetailVo; +import com.ftm.server.application.vo.post.PostProductHashTagVo; +import com.ftm.server.domain.enums.ProductCategory; +import com.ftm.server.domain.enums.ProductHashtag; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class LoadPostProductHashTagsService implements LoadPostProductHashTagsUseCase { + + @Override + public List execute() { + Map> hashtagGroup = + Arrays.stream(ProductHashtag.values()) + .collect(Collectors.groupingBy(ProductHashtag::getCategory)); + + return hashtagGroup.entrySet().stream() + .map( + entry -> { + PostProductCategoryVo category = + PostProductCategoryVo.of(entry.getKey()); + List hashtags = + entry.getValue().stream() + .map(PostProductHashTagVo::of) + .toList(); + + return PostProductHashTagDetailVo.of(category, hashtags); + }) + .toList(); + } +} diff --git a/src/main/java/com/ftm/server/application/service/user/GetUserSignupOptionsService.java b/src/main/java/com/ftm/server/application/service/user/GetUserSignupOptionsService.java index cd557bc..b7cd636 100644 --- a/src/main/java/com/ftm/server/application/service/user/GetUserSignupOptionsService.java +++ b/src/main/java/com/ftm/server/application/service/user/GetUserSignupOptionsService.java @@ -4,7 +4,7 @@ import com.ftm.server.application.port.in.user.GetUserSignupOptionsUseCase; import com.ftm.server.application.vo.user.UserSignupOptionsVo; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import java.util.Arrays; import java.util.List; import lombok.RequiredArgsConstructor; @@ -22,7 +22,7 @@ public UserSignupOptionsVo execute() { .toList(); List hashtags = - Arrays.stream(HashTag.values()) + Arrays.stream(HashtagCategory.values()) .map(UserSignupOptionsResponse.EnumDescriptors::from) .toList(); return UserSignupOptionsVo.of(ages, hashtags); diff --git a/src/main/java/com/ftm/server/application/service/user/UpdateUserInfoService.java b/src/main/java/com/ftm/server/application/service/user/UpdateUserInfoService.java index da4a7ea..2695e46 100644 --- a/src/main/java/com/ftm/server/application/service/user/UpdateUserInfoService.java +++ b/src/main/java/com/ftm/server/application/service/user/UpdateUserInfoService.java @@ -51,8 +51,8 @@ public UserWithImageVo execute(UpdateUserCommand updateUserCommand) { if (updateUserCommand.getAgeGroup() != null) { user.updateAge(updateUserCommand.getAgeGroup()); } - if (updateUserCommand.getHashTags() != null) { - user.updateHashtag(updateUserCommand.getHashTags()); + if (updateUserCommand.getHashtags() != null) { + user.updateHashtag(updateUserCommand.getHashtags()); } // 이미지 업로드 및 기존 이미지 삭제 diff --git a/src/main/java/com/ftm/server/application/vo/HashtagCategoryDetailVo.java b/src/main/java/com/ftm/server/application/vo/HashtagCategoryDetailVo.java new file mode 100644 index 0000000..bba5b49 --- /dev/null +++ b/src/main/java/com/ftm/server/application/vo/HashtagCategoryDetailVo.java @@ -0,0 +1,20 @@ +package com.ftm.server.application.vo; + +import com.ftm.server.domain.enums.HashtagCategory; +import lombok.Getter; + +@Getter +public class HashtagCategoryDetailVo { + + private final String name; + private final String label; + + private HashtagCategoryDetailVo(HashtagCategory hashtagCategory) { + this.name = hashtagCategory.name(); + this.label = hashtagCategory.getLabel(); + } + + public static HashtagCategoryDetailVo of(HashtagCategory hashtagCategory) { + return new HashtagCategoryDetailVo(hashtagCategory); + } +} diff --git a/src/main/java/com/ftm/server/application/vo/post/PostDetailVo.java b/src/main/java/com/ftm/server/application/vo/post/PostDetailVo.java index 38cdac9..ffda1b9 100644 --- a/src/main/java/com/ftm/server/application/vo/post/PostDetailVo.java +++ b/src/main/java/com/ftm/server/application/vo/post/PostDetailVo.java @@ -1,8 +1,7 @@ package com.ftm.server.application.vo.post; import com.ftm.server.domain.entity.*; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -14,8 +13,7 @@ public class PostDetailVo { private final Long postId; private final String title; private final String content; - private final GroomingCategory groomingCategory; - private final HashTag[] hashTags; + private final PostHashtag[] hashtags; private final Integer viewCount; private final Integer likeCount; private final LocalDateTime createdAt; @@ -34,8 +32,7 @@ private PostDetailVo( this.postId = post.getId(); this.title = post.getTitle(); this.content = post.getContent(); - this.groomingCategory = post.getGroomingCategory(); - this.hashTags = post.getHashtags(); + this.hashtags = post.getHashtags(); this.viewCount = post.getViewCount(); this.likeCount = post.getLikeCount(); this.createdAt = post.getCreatedAt(); diff --git a/src/main/java/com/ftm/server/application/vo/post/PostHashTagDetailVo.java b/src/main/java/com/ftm/server/application/vo/post/PostHashTagDetailVo.java new file mode 100644 index 0000000..8aec74d --- /dev/null +++ b/src/main/java/com/ftm/server/application/vo/post/PostHashTagDetailVo.java @@ -0,0 +1,22 @@ +package com.ftm.server.application.vo.post; + +import com.ftm.server.application.vo.HashtagCategoryDetailVo; +import java.util.List; +import lombok.Getter; + +@Getter +public class PostHashTagDetailVo { + + private final HashtagCategoryDetailVo category; + private final List hashtags; + + private PostHashTagDetailVo(HashtagCategoryDetailVo category, List hashtags) { + this.category = category; + this.hashtags = hashtags; + } + + public static PostHashTagDetailVo of( + HashtagCategoryDetailVo category, List hashtags) { + return new PostHashTagDetailVo(category, hashtags); + } +} diff --git a/src/main/java/com/ftm/server/application/vo/post/PostHashTagVo.java b/src/main/java/com/ftm/server/application/vo/post/PostHashTagVo.java new file mode 100644 index 0000000..f4d6e51 --- /dev/null +++ b/src/main/java/com/ftm/server/application/vo/post/PostHashTagVo.java @@ -0,0 +1,20 @@ +package com.ftm.server.application.vo.post; + +import com.ftm.server.domain.enums.PostHashtag; +import lombok.Getter; + +@Getter +public class PostHashTagVo { + + private final String name; + private final String tag; + + private PostHashTagVo(PostHashtag postHashTag) { + this.name = postHashTag.name(); + this.tag = postHashTag.getTag(); + } + + public static PostHashTagVo of(PostHashtag postHashTag) { + return new PostHashTagVo(postHashTag); + } +} diff --git a/src/main/java/com/ftm/server/application/vo/post/PostInfoVo.java b/src/main/java/com/ftm/server/application/vo/post/PostInfoVo.java index 5ccea8c..9fc953a 100644 --- a/src/main/java/com/ftm/server/application/vo/post/PostInfoVo.java +++ b/src/main/java/com/ftm/server/application/vo/post/PostInfoVo.java @@ -1,8 +1,7 @@ package com.ftm.server.application.vo.post; import com.ftm.server.domain.entity.Post; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.time.LocalDateTime; import lombok.Getter; @@ -12,8 +11,7 @@ public class PostInfoVo { private final Long id; private final String title; private final String content; - private final GroomingCategory groomingCategory; - private final HashTag[] hashtags; + private final PostHashtag[] hashtags; private final Integer viewCount; private final Integer likeCount; private final Boolean isDeleted; @@ -25,7 +23,6 @@ private PostInfoVo(Post post) { this.id = post.getId(); this.title = post.getTitle(); this.content = post.getContent(); - this.groomingCategory = post.getGroomingCategory(); this.hashtags = post.getHashtags(); this.viewCount = post.getViewCount(); this.likeCount = post.getLikeCount(); diff --git a/src/main/java/com/ftm/server/application/vo/post/PostProductCategoryVo.java b/src/main/java/com/ftm/server/application/vo/post/PostProductCategoryVo.java new file mode 100644 index 0000000..7a415f4 --- /dev/null +++ b/src/main/java/com/ftm/server/application/vo/post/PostProductCategoryVo.java @@ -0,0 +1,20 @@ +package com.ftm.server.application.vo.post; + +import com.ftm.server.domain.enums.ProductCategory; +import lombok.Getter; + +@Getter +public class PostProductCategoryVo { + + private final String name; + private final String label; + + private PostProductCategoryVo(ProductCategory productCategory) { + this.name = productCategory.name(); + this.label = productCategory.getLabel(); + } + + public static PostProductCategoryVo of(ProductCategory productCategory) { + return new PostProductCategoryVo(productCategory); + } +} diff --git a/src/main/java/com/ftm/server/application/vo/post/PostProductDetailVo.java b/src/main/java/com/ftm/server/application/vo/post/PostProductDetailVo.java index fda65ce..dc70b4a 100644 --- a/src/main/java/com/ftm/server/application/vo/post/PostProductDetailVo.java +++ b/src/main/java/com/ftm/server/application/vo/post/PostProductDetailVo.java @@ -2,7 +2,7 @@ import com.ftm.server.domain.entity.PostProduct; import com.ftm.server.domain.entity.PostProductImage; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -14,7 +14,7 @@ public class PostProductDetailVo { private final Long postProductId; private final String name; private final String brand; - private final HashTag[] hashTags; + private final ProductHashtag[] hashtags; private final LocalDateTime createdAt; private final LocalDateTime updatedAt; private final PostProductImage postProductImage; @@ -23,7 +23,7 @@ private PostProductDetailVo(PostProduct postProduct, PostProductImage postProduc this.postProductId = postProduct.getId(); this.name = postProduct.getName(); this.brand = postProduct.getBrand(); - this.hashTags = postProduct.getHashTags(); + this.hashtags = postProduct.getHashtags(); this.createdAt = postProduct.getCreatedAt(); this.updatedAt = postProduct.getUpdatedAt(); this.postProductImage = postProductImage; diff --git a/src/main/java/com/ftm/server/application/vo/post/PostProductHashTagDetailVo.java b/src/main/java/com/ftm/server/application/vo/post/PostProductHashTagDetailVo.java new file mode 100644 index 0000000..716245a --- /dev/null +++ b/src/main/java/com/ftm/server/application/vo/post/PostProductHashTagDetailVo.java @@ -0,0 +1,22 @@ +package com.ftm.server.application.vo.post; + +import java.util.List; +import lombok.Getter; + +@Getter +public class PostProductHashTagDetailVo { + + private final PostProductCategoryVo category; + private final List hashtags; + + private PostProductHashTagDetailVo( + PostProductCategoryVo category, List hashtags) { + this.category = category; + this.hashtags = hashtags; + } + + public static PostProductHashTagDetailVo of( + PostProductCategoryVo category, List hashtags) { + return new PostProductHashTagDetailVo(category, hashtags); + } +} diff --git a/src/main/java/com/ftm/server/application/vo/post/PostProductHashTagVo.java b/src/main/java/com/ftm/server/application/vo/post/PostProductHashTagVo.java new file mode 100644 index 0000000..d594f9d --- /dev/null +++ b/src/main/java/com/ftm/server/application/vo/post/PostProductHashTagVo.java @@ -0,0 +1,20 @@ +package com.ftm.server.application.vo.post; + +import com.ftm.server.domain.enums.ProductHashtag; +import lombok.Getter; + +@Getter +public class PostProductHashTagVo { + + private final String name; + private final String tag; + + private PostProductHashTagVo(ProductHashtag productHashTag) { + this.name = productHashTag.name(); + this.tag = productHashTag.getTag(); + } + + public static PostProductHashTagVo of(ProductHashtag productHashTag) { + return new PostProductHashTagVo(productHashTag); + } +} diff --git a/src/main/java/com/ftm/server/domain/entity/Post.java b/src/main/java/com/ftm/server/domain/entity/Post.java index b44193d..2216656 100644 --- a/src/main/java/com/ftm/server/domain/entity/Post.java +++ b/src/main/java/com/ftm/server/domain/entity/Post.java @@ -4,8 +4,7 @@ import com.ftm.server.application.command.post.UpdatePostCommand; import com.ftm.server.common.exception.CustomException; import com.ftm.server.common.response.enums.ErrorResponseCode; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.time.LocalDateTime; import java.util.Objects; import lombok.AccessLevel; @@ -21,8 +20,7 @@ public class Post extends BaseTime { private Long userId; private String title; private String content; - private GroomingCategory groomingCategory; - private HashTag[] hashtags; + private PostHashtag[] hashtags; private Integer viewCount; private Integer likeCount; private Boolean isDeleted; @@ -34,8 +32,7 @@ private Post( Long userId, String title, String content, - GroomingCategory groomingCategory, - HashTag[] hashtags, + PostHashtag[] hashtags, Integer viewCount, Integer likeCount, Boolean isDeleted, @@ -46,7 +43,6 @@ private Post( this.userId = userId; this.title = title; this.content = content; - this.groomingCategory = groomingCategory; this.hashtags = hashtags; this.viewCount = viewCount; this.likeCount = likeCount; @@ -61,8 +57,7 @@ public static Post of( Long userId, String title, String content, - GroomingCategory groomingCategory, - HashTag[] hashtags, + PostHashtag[] hashtags, Integer viewCount, Integer likeCount, Boolean isDeleted, @@ -74,7 +69,6 @@ public static Post of( .userId(userId) .title(title) .content(content) - .groomingCategory(groomingCategory) .hashtags(hashtags) .viewCount(viewCount) .likeCount(likeCount) @@ -90,8 +84,7 @@ public static Post create(SavePostCommand command) { .userId(command.getUserId()) .title(command.getTitle()) .content(command.getContent()) - .groomingCategory(command.getGroomingCategory()) - .hashtags(command.getHashTags()) + .hashtags(command.getHashtags()) .viewCount(0) .likeCount(0) .isDeleted(false) @@ -101,9 +94,7 @@ public static Post create(SavePostCommand command) { public void update(UpdatePostCommand command) { if (command.getTitle() != null) this.title = command.getTitle(); if (command.getContent() != null) this.content = command.getContent(); - if (command.getGroomingCategory() != null) - this.groomingCategory = command.getGroomingCategory(); - if (command.getHashTags() != null) this.hashtags = command.getHashTags(); + if (command.getHashtags() != null) this.hashtags = command.getHashtags(); } public void updateUserId(Long userId) { diff --git a/src/main/java/com/ftm/server/domain/entity/PostProduct.java b/src/main/java/com/ftm/server/domain/entity/PostProduct.java index 984ef33..a5c1d0f 100644 --- a/src/main/java/com/ftm/server/domain/entity/PostProduct.java +++ b/src/main/java/com/ftm/server/domain/entity/PostProduct.java @@ -4,7 +4,7 @@ import com.ftm.server.application.command.post.UpdatePostProductCommand; import com.ftm.server.common.exception.CustomException; import com.ftm.server.common.response.enums.ErrorResponseCode; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.ProductHashtag; import java.time.LocalDateTime; import java.util.Objects; import lombok.AccessLevel; @@ -20,7 +20,7 @@ public class PostProduct extends BaseTime { private Long postId; private String name; private String brand; - private HashTag[] hashTags; + private ProductHashtag[] hashtags; @Builder(access = AccessLevel.PRIVATE) private PostProduct( @@ -28,14 +28,14 @@ private PostProduct( Long postId, String name, String brand, - HashTag[] hashTags, + ProductHashtag[] hashtags, LocalDateTime createdAt, LocalDateTime updatedAt) { this.id = id; this.postId = postId; this.name = name; this.brand = brand; - this.hashTags = hashTags; + this.hashtags = hashtags; this.createdAt = createdAt; this.updatedAt = updatedAt; } @@ -45,7 +45,7 @@ public static PostProduct of( Long postId, String name, String brand, - HashTag[] hashTags, + ProductHashtag[] hashtags, LocalDateTime createdAt, LocalDateTime updatedAt) { return PostProduct.builder() @@ -53,7 +53,7 @@ public static PostProduct of( .postId(postId) .name(name) .brand(brand) - .hashTags(hashTags) + .hashtags(hashtags) .createdAt(createdAt) .updatedAt(updatedAt) .build(); @@ -64,14 +64,14 @@ public static PostProduct create(SavePostProductCommand command) { .postId(command.getPostId()) .name(command.getName()) .brand(command.getBrand()) - .hashTags(command.getHashTags()) + .hashtags(command.getHashtags()) .build(); } public void update(UpdatePostProductCommand command) { if (command.getName() != null) this.name = command.getName(); if (command.getBrand() != null) this.brand = command.getBrand(); - if (command.getHashTags() != null) this.hashTags = command.getHashTags(); + if (command.getHashtags() != null) this.hashtags = command.getHashtags(); } public void validatePost(Long postId) { diff --git a/src/main/java/com/ftm/server/domain/entity/User.java b/src/main/java/com/ftm/server/domain/entity/User.java index ccb9482..590dc84 100644 --- a/src/main/java/com/ftm/server/domain/entity/User.java +++ b/src/main/java/com/ftm/server/domain/entity/User.java @@ -2,10 +2,7 @@ import com.ftm.server.application.command.user.GeneralUserCreationCommand; import com.ftm.server.application.command.user.SocialUserCreationCommand; -import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; -import com.ftm.server.domain.enums.SocialProvider; -import com.ftm.server.domain.enums.UserRole; +import com.ftm.server.domain.enums.*; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Builder; @@ -26,7 +23,7 @@ public class User extends BaseTime { private Integer groomingScore; private Long groomingLevelId; private UserRole role; - private HashTag[] favoriteHashtags; + private HashtagCategory[] favoriteHashtags; private Boolean isDeleted; private LocalDateTime deletedAt; @@ -42,7 +39,7 @@ private User( Integer groomingScore, Long groomingLevelId, UserRole role, - HashTag[] favoriteHashtags, + HashtagCategory[] favoriteHashtags, Boolean isDeleted, LocalDateTime deletedAt, LocalDateTime createdAt, @@ -75,7 +72,7 @@ public static User of( Integer groomingScore, Long groomingLevelId, UserRole role, - HashTag[] favoriteHashtags, + HashtagCategory[] favoriteHashtags, Boolean isDeleted, LocalDateTime deletedAt, LocalDateTime createdAt, @@ -101,17 +98,17 @@ public static User of( public static User createGeneralUser(GeneralUserCreationCommand command) { - HashTag[] hashTags = null; + HashtagCategory[] hashtags = null; if (command.getHashtags() != null && command.getHashtags().isEmpty()) { - hashTags = command.getHashtags().toArray(new HashTag[0]); + hashtags = command.getHashtags().toArray(new HashtagCategory[0]); } return User.builder() .email(command.getEmail()) .password(command.getPassword()) .nickname(command.getNickName()) .ageGroup(command.getAgeGroup()) - .favoriteHashtags(hashTags) + .favoriteHashtags(hashtags) .groomingScore(0) .isDeleted(false) .role(UserRole.USER) @@ -120,10 +117,10 @@ public static User createGeneralUser(GeneralUserCreationCommand command) { public static User createSocailUser(SocialUserCreationCommand command) { - HashTag[] hashTags = null; + HashtagCategory[] hashtags = null; if (command.getHashtags() != null && command.getHashtags().isEmpty()) { - hashTags = command.getHashtags().toArray(new HashTag[0]); + hashtags = command.getHashtags().toArray(new HashtagCategory[0]); } return User.builder() @@ -131,7 +128,7 @@ public static User createSocailUser(SocialUserCreationCommand command) { .socialId(command.getSocialId()) .nickname(command.getNickname()) .ageGroup(command.getAge()) - .favoriteHashtags(hashTags) + .favoriteHashtags(hashtags) .groomingScore(0) .isDeleted(false) .role(UserRole.USER) @@ -167,8 +164,8 @@ public void updateUserNickname(String nickname) { this.nickname = nickname; } - public void updateHashtag(HashTag[] hashTags) { - this.favoriteHashtags = hashTags; + public void updateHashtag(HashtagCategory[] hashtags) { + this.favoriteHashtags = hashtags; } public void updateAge(AgeGroup ageGroup) { diff --git a/src/main/java/com/ftm/server/domain/enums/HashTag.java b/src/main/java/com/ftm/server/domain/enums/HashTag.java deleted file mode 100644 index b3799f5..0000000 --- a/src/main/java/com/ftm/server/domain/enums/HashTag.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ftm.server.domain.enums; - -import lombok.Getter; - -@Getter -public enum HashTag { - PERFUME("향수", GroomingCategory.HYGIENE); - - private final String value; - private final GroomingCategory groomingCategory; - - HashTag(String value, GroomingCategory groomingCategory) { - this.value = value; - this.groomingCategory = groomingCategory; - } -} diff --git a/src/main/java/com/ftm/server/domain/enums/HashtagCategory.java b/src/main/java/com/ftm/server/domain/enums/HashtagCategory.java new file mode 100644 index 0000000..d8ffbd0 --- /dev/null +++ b/src/main/java/com/ftm/server/domain/enums/HashtagCategory.java @@ -0,0 +1,20 @@ +package com.ftm.server.domain.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum HashtagCategory { + SKINCARE("스킨케어"), + PERFUME("향수"), + HEALTH("건강"), + MAKEUP("메이크업"), + FASHION("패션"), + SHAVING("면도ㆍ쉐이빙"), + HAIR_STYLING("헤어 스타일링"), + BODYCARE("바디케어"), + ; + + private final String label; +} diff --git a/src/main/java/com/ftm/server/domain/enums/PostHashtag.java b/src/main/java/com/ftm/server/domain/enums/PostHashtag.java new file mode 100644 index 0000000..485ece2 --- /dev/null +++ b/src/main/java/com/ftm/server/domain/enums/PostHashtag.java @@ -0,0 +1,46 @@ +package com.ftm.server.domain.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum PostHashtag { + + // SKINCARE + MOISTURIZE_SKIN(HashtagCategory.SKINCARE, "피부보습"), + SUN_CARE(HashtagCategory.SKINCARE, "선케어"), + MASK_PACK(HashtagCategory.SKINCARE, "마스크팩"), + CLEANSING(HashtagCategory.SKINCARE, "클렌징"), + + // PERFUME + + // HEALTH + + // MAKEUP + SUPPLEMENT(HashtagCategory.HEALTH, "영양제"), + PERFORMANCE_SUPPLEMENT(HashtagCategory.HEALTH, "운동 보충제"), + DIET_MANAGEMENT(HashtagCategory.HEALTH, "식단 관리"), + EXERCISE(HashtagCategory.HEALTH, "운동"), + + // FASHION + TOP_CLOTHING(HashtagCategory.FASHION, "상의"), + BOTTOM_CLOTHING(HashtagCategory.FASHION, "하의"), + SHOES(HashtagCategory.FASHION, "신발"), + BAG(HashtagCategory.FASHION, "가방"), + FASHION_ACCESSORIES(HashtagCategory.FASHION, "패션 소품"), + + // SHAVING + + // HAIR_STYLING + HAIR_LOSS_MANAGEMENT(HashtagCategory.HAIR_STYLING, "탈모 관리"), + HAIR_DYE_AND_PERM(HashtagCategory.HAIR_STYLING, "염색/펌"), + + // BODY_CARE + WAXING(HashtagCategory.BODYCARE, "제모/왁싱"), + DEODORANT(HashtagCategory.BODYCARE, "데오드란트"), + ; + + private final HashtagCategory category; + private final String tag; +} diff --git a/src/main/java/com/ftm/server/domain/enums/ProductCategory.java b/src/main/java/com/ftm/server/domain/enums/ProductCategory.java new file mode 100644 index 0000000..58a923f --- /dev/null +++ b/src/main/java/com/ftm/server/domain/enums/ProductCategory.java @@ -0,0 +1,21 @@ +package com.ftm.server.domain.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum ProductCategory { + SKINCARE(HashtagCategory.SKINCARE, "스킨케어"), + FRAGRANCE(HashtagCategory.PERFUME, "프레그런스"), + HEALTH(HashtagCategory.HEALTH, "건강"), + MAKEUP(HashtagCategory.MAKEUP, "메이크업"), + FASHION(HashtagCategory.FASHION, "패션"), + SHAVING(HashtagCategory.SHAVING, "면도"), + HAIR_STYLING(HashtagCategory.HAIR_STYLING, "헤어 스타일링"), + BODYCARE(HashtagCategory.BODYCARE, "바디케어"), + ; + + private final HashtagCategory hashtagCategory; + private final String label; +} diff --git a/src/main/java/com/ftm/server/domain/enums/ProductHashtag.java b/src/main/java/com/ftm/server/domain/enums/ProductHashtag.java new file mode 100644 index 0000000..1ac1737 --- /dev/null +++ b/src/main/java/com/ftm/server/domain/enums/ProductHashtag.java @@ -0,0 +1,77 @@ +package com.ftm.server.domain.enums; + +import java.util.Arrays; +import java.util.List; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum ProductHashtag { + + // SKINCARE + SKIN_TONER(ProductCategory.SKINCARE, "스킨/토너"), + LOTION(ProductCategory.SKINCARE, "로션"), + CREAM(ProductCategory.SKINCARE, "크림"), + MASK_PACK(ProductCategory.SKINCARE, "마스크팩"), + CLEANSER(ProductCategory.SKINCARE, "클렌저"), + PEELING_SCRUB(ProductCategory.SKINCARE, "필링/스크럽"), + SUNSCREEN(ProductCategory.SKINCARE, "선케어"), + + // FRAGRANCE + FABRIC_DEODORIZER(ProductCategory.FRAGRANCE, "섬유탈취제"), + INCENSE(ProductCategory.FRAGRANCE, "인센스"), + PERFUME(ProductCategory.FRAGRANCE, "향수"), + + // HEALTH + SUPPLEMENT(ProductCategory.HEALTH, "영양제"), + PERFORMANCE_SUPPLEMENT(ProductCategory.HEALTH, "운동 보충제"), + PROBIOTIC_SUPPLEMENT(ProductCategory.HEALTH, "유산균"), + + // MAKEUP + TONE_LOTION(ProductCategory.MAKEUP, "톤 로션/BB"), + CUSHION_FOUNDATION(ProductCategory.MAKEUP, "쿠션/파운데이션"), + LIP(ProductCategory.MAKEUP, "립"), + EYEBROW(ProductCategory.MAKEUP, "아이브로우"), + EYESHADOW(ProductCategory.MAKEUP, "아이쉐도우"), + MAKEUP_REMOVER(ProductCategory.MAKEUP, "리무버"), + CONCEALER(ProductCategory.MAKEUP, "컨실러"), + MAKEUP_BRUSH(ProductCategory.MAKEUP, "브러쉬"), + + // FASHION + TOP_CLOTHING(ProductCategory.FASHION, "상의"), + BOTTOM_CLOTHING(ProductCategory.FASHION, "하의"), + OUTERWEAR(ProductCategory.FASHION, "아우터/겉옷"), + SHOES(ProductCategory.FASHION, "신발"), + BAG(ProductCategory.FASHION, "가방"), + FASHION_ACCESSORIES(ProductCategory.FASHION, "패션 소품/악세서리"), + + // SHAVING + SHAVER(ProductCategory.SHAVING, "면도기"), + ELECTRIC_SHAVER(ProductCategory.SHAVING, "전동 면도기"), + SHAVING_FOAM_GEL(ProductCategory.SHAVING, "쉐이빙폼/젤"), + AFTER_SHAVE(ProductCategory.SHAVING, "애프터 쉐이브"), + + // HAIR_STYLING + HAIR_DYE_AND_DOWNPERM(ProductCategory.HAIR_STYLING, "염색/다운펌"), + HAIR_WAX_SPRAY(ProductCategory.HAIR_STYLING, "왁스/스프레이"), + HAIR_OIL_TONIC_CREAM(ProductCategory.HAIR_STYLING, "오일/토닉/컬크림"), + SHAMPOO_CONDITIONER(ProductCategory.HAIR_STYLING, "샴푸/컨디셔너"), + HAIR_EQUIPMENT(ProductCategory.HAIR_STYLING, "헤어 기기"), + + // BODY_CARE + BODY_WASH_LOTION(ProductCategory.BODYCARE, "바디워시/로션"), + HAND_CARE(ProductCategory.BODYCARE, "핸드케어"), + WAXING(ProductCategory.BODYCARE, "제모/왁싱"), + DEODORANT(ProductCategory.BODYCARE, "데오드란트"), + ; + + private final ProductCategory category; + private final String tag; + + public static List findByCategory(ProductCategory category) { + return Arrays.stream(values()) + .filter(hashTag -> hashTag.category.equals(category)) + .toList(); + } +} diff --git a/src/test/java/com/ftm/server/BaseTest.java b/src/test/java/com/ftm/server/BaseTest.java index 6e4bfc4..1f54f37 100644 --- a/src/test/java/com/ftm/server/BaseTest.java +++ b/src/test/java/com/ftm/server/BaseTest.java @@ -12,7 +12,7 @@ import com.ftm.server.domain.entity.User; import com.ftm.server.domain.entity.UserImage; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import com.ftm.server.domain.enums.UserRole; import com.ftm.server.infrastructure.security.UserPrincipal; import groovy.util.logging.Slf4j; @@ -92,7 +92,7 @@ protected User createTestUser(String email, String password) { password, nickname, AgeGroup.FIFTIES, - List.of(HashTag.PERFUME))); + List.of(HashtagCategory.PERFUME))); User testUser = saveUserPort.saveUser(user); saveUserImagePort.saveUserDefaultImage(UserImage.createUserImage(testUser.getId())); return testUser; diff --git a/src/test/java/com/ftm/server/post/DeletePostTest.java b/src/test/java/com/ftm/server/post/DeletePostTest.java index 31a2657..b94ef45 100644 --- a/src/test/java/com/ftm/server/post/DeletePostTest.java +++ b/src/test/java/com/ftm/server/post/DeletePostTest.java @@ -29,8 +29,7 @@ import com.ftm.server.application.vo.post.PostInfoVo; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -94,8 +93,7 @@ void setUp() throws Exception { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천", - GroomingCategory.BEAUTY, - List.of(HashTag.PERFUME), + List.of(PostHashtag.CLEANSING), "
test
", List.of(new SavePostProductRequest(-1, "독도 토너", "라운드랩", List.of()))); diff --git a/src/test/java/com/ftm/server/post/LoadPostDetailTest.java b/src/test/java/com/ftm/server/post/LoadPostDetailTest.java index 9130240..0a3dc3b 100644 --- a/src/test/java/com/ftm/server/post/LoadPostDetailTest.java +++ b/src/test/java/com/ftm/server/post/LoadPostDetailTest.java @@ -27,8 +27,7 @@ import com.ftm.server.application.vo.post.PostInfoVo; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -62,8 +61,7 @@ public class LoadPostDetailTest extends BaseTest { fieldWithPath("data.postId").type(NUMBER).description("게시글 ID"), fieldWithPath("data.title").type(STRING).description("게시글 제목"), fieldWithPath("data.content").type(STRING).description("게시글 내용"), - fieldWithPath("data.groomingCategory").type(STRING).description("게시글 그루밍 카테고리"), - fieldWithPath("data.hashTags[]").type(ARRAY).description("게시글 해시태그 목록"), + fieldWithPath("data.hashtags[]").type(ARRAY).description("게시글 해시태그 목록"), fieldWithPath("data.viewCount").type(NUMBER).description("게시글 조회수"), fieldWithPath("data.likeCount").type(NUMBER).description("게시글 좋아요 수"), fieldWithPath("data.createdAt").type(STRING).description("게시글 생성 날짜"), @@ -89,7 +87,7 @@ public class LoadPostDetailTest extends BaseTest { fieldWithPath("data.postProducts[].brand") .type(STRING) .description("게시글 상품 브랜드"), - fieldWithPath("data.postProducts[].hashTags[]") + fieldWithPath("data.postProducts[].hashtags[]") .type(ARRAY) .description("게시글 상품 해시태그 목록"), fieldWithPath("data.postProducts[].postProductImage") @@ -131,8 +129,7 @@ void setUp() throws Exception { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천", - GroomingCategory.BEAUTY, - List.of(HashTag.PERFUME), + List.of(PostHashtag.CLEANSING), "
test
", List.of(new SavePostProductRequest(-1, "독도 토너", "라운드랩", List.of()))); diff --git a/src/test/java/com/ftm/server/post/LoadPostHashTagsTest.java b/src/test/java/com/ftm/server/post/LoadPostHashTagsTest.java new file mode 100644 index 0000000..19e2fc1 --- /dev/null +++ b/src/test/java/com/ftm/server/post/LoadPostHashTagsTest.java @@ -0,0 +1,81 @@ +package com.ftm.server.post; + +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.*; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; +import static org.springframework.restdocs.payload.JsonFieldType.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.epages.restdocs.apispec.ResourceSnippetParameters; +import com.ftm.server.BaseTest; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; +import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; +import org.springframework.restdocs.payload.FieldDescriptor; +import org.springframework.test.web.servlet.ResultActions; + +public class LoadPostHashTagsTest extends BaseTest { + + private final List responseFieldLoadPostHashTags = + List.of( + fieldWithPath("status").type(NUMBER).description("응답 상태"), + fieldWithPath("code").type(STRING).description("상태 코드"), + fieldWithPath("message").type(STRING).description("메시지"), + fieldWithPath("data").type(OBJECT).optional().description("응답 데이터"), + fieldWithPath("data.results[]").type(ARRAY).description("게시글 해시태그 목록 결과"), + fieldWithPath("data.results[].category") + .type(OBJECT) + .description("게시글 해시태그 카테고리"), + fieldWithPath("data.results[].category.name") + .type(STRING) + .description("게시글 해시태그 카테고리 이름"), + fieldWithPath("data.results[].category.label") + .type(STRING) + .description("게시글 해시태그 카테고리 라벨"), + fieldWithPath("data.results[].hashtags[]") + .type(ARRAY) + .optional() + .description("게시글 해시태그 목록"), + fieldWithPath("data.results[].hashtags[].name") + .type(STRING) + .description("게시글 해시태그 이름. 게시글 생성/수정 시 전달"), + fieldWithPath("data.results[].hashtags[].tag") + .type(STRING) + .description("게시글 해시태그 태그 이름")); + + private ResultActions getResultActions() throws Exception { + return mockMvc.perform(RestDocumentationRequestBuilders.get("/api/posts/hashtags")); + } + + private RestDocumentationResultHandler getDocument(Integer identifier) { + return document( + "loadPostHashTags/" + identifier, + preprocessResponse(prettyPrint(), getModifiedHeader()), + responseFields(responseFieldLoadPostHashTags), + resource( + ResourceSnippetParameters.builder() + .tag("유저픽 게시글") + .summary("유저픽 게시글 해시태그 목록 조회") + .description( + "유저픽 게시글 해시태그 목록을 조회하는 api 입니다. 게시글 생성/수정 시 해시태그의 영문 이름을 전달해주세요.") + .responseFields(responseFieldLoadPostHashTags) + .build())); + } + + @Test + void 게시글_해시태그_목록_조회_성공() throws Exception { + // when + ResultActions resultActions = getResultActions(); + + // then + resultActions.andExpect(status().isOk()).andDo(print()); + + // document + resultActions.andDo(getDocument(1)); + } +} diff --git a/src/test/java/com/ftm/server/post/LoadPostProductHashTagsTest.java b/src/test/java/com/ftm/server/post/LoadPostProductHashTagsTest.java new file mode 100644 index 0000000..44dc710 --- /dev/null +++ b/src/test/java/com/ftm/server/post/LoadPostProductHashTagsTest.java @@ -0,0 +1,83 @@ +package com.ftm.server.post; + +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; +import static org.springframework.restdocs.payload.JsonFieldType.*; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.epages.restdocs.apispec.ResourceSnippetParameters; +import com.ftm.server.BaseTest; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; +import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; +import org.springframework.restdocs.payload.FieldDescriptor; +import org.springframework.test.web.servlet.ResultActions; + +public class LoadPostProductHashTagsTest extends BaseTest { + + private final List responseFieldLoadPostProductHashTags = + List.of( + fieldWithPath("status").type(NUMBER).description("응답 상태"), + fieldWithPath("code").type(STRING).description("상태 코드"), + fieldWithPath("message").type(STRING).description("메시지"), + fieldWithPath("data").type(OBJECT).optional().description("응답 데이터"), + fieldWithPath("data.results[]").type(ARRAY).description("상품 해시태그 목록 결과"), + fieldWithPath("data.results[].category") + .type(OBJECT) + .description("상품 해시태그 카테고리"), + fieldWithPath("data.results[].category.name") + .type(STRING) + .description("상품 해시태그 카테고리 이름"), + fieldWithPath("data.results[].category.label") + .type(STRING) + .description("상품 해시태그 카테고리 라벨"), + fieldWithPath("data.results[].hashtags[]") + .type(ARRAY) + .optional() + .description("상품 해시태그 목록"), + fieldWithPath("data.results[].hashtags[].name") + .type(STRING) + .description("상품 해시태그 이름. 상품 생성/수정 시 전달"), + fieldWithPath("data.results[].hashtags[].tag") + .type(STRING) + .description("상품 해시태그 태그 이름")); + + private ResultActions getResultActions() throws Exception { + return mockMvc.perform( + RestDocumentationRequestBuilders.get("/api/posts/products/hashtags")); + } + + private RestDocumentationResultHandler getDocument(Integer identifier) { + return document( + "loadPostProductHashTags/" + identifier, + preprocessResponse(prettyPrint(), getModifiedHeader()), + responseFields(responseFieldLoadPostProductHashTags), + resource( + ResourceSnippetParameters.builder() + .tag("유저픽 게시글") + .summary("상품 해시태그 목록 조회") + .description( + "상품 해시태그 목록을 조회하는 api 입니다. 상품 생성/수정 시 해시태그의 영문 이름 정보를 전달해주세요.") + .responseFields(responseFieldLoadPostProductHashTags) + .build())); + } + + @Test + void 게시글_상품_해시태그_목록_조회_성공() throws Exception { + // when + ResultActions resultActions = getResultActions(); + + // then + resultActions.andExpect(status().isOk()).andDo(print()); + + // document + resultActions.andDo(getDocument(1)); + } +} diff --git a/src/test/java/com/ftm/server/post/LoadTrendingManTest.java b/src/test/java/com/ftm/server/post/LoadTrendingManTest.java index 25e9634..f02a538 100644 --- a/src/test/java/com/ftm/server/post/LoadTrendingManTest.java +++ b/src/test/java/com/ftm/server/post/LoadTrendingManTest.java @@ -18,7 +18,6 @@ import com.ftm.server.application.port.out.persistence.post.SavePostPort; import com.ftm.server.domain.entity.Post; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.DisplayName; @@ -85,11 +84,7 @@ public void test1() throws Exception { SavePostCommand.from( user1.getId(), new SavePostRequest( - "test1", - GroomingCategory.FASHION, - new ArrayList<>(), - "content1", - new ArrayList<>()), + "test1", new ArrayList<>(), "content1", new ArrayList<>()), new ArrayList<>(), new ArrayList<>()))); @@ -98,11 +93,7 @@ public void test1() throws Exception { SavePostCommand.from( user2.getId(), new SavePostRequest( - "test2", - GroomingCategory.FASHION, - new ArrayList<>(), - "content2", - new ArrayList<>()), + "test2", new ArrayList<>(), "content2", new ArrayList<>()), new ArrayList<>(), new ArrayList<>()))); diff --git a/src/test/java/com/ftm/server/post/LoadTrendingPostsTest.java b/src/test/java/com/ftm/server/post/LoadTrendingPostsTest.java index 279db16..96a9b03 100644 --- a/src/test/java/com/ftm/server/post/LoadTrendingPostsTest.java +++ b/src/test/java/com/ftm/server/post/LoadTrendingPostsTest.java @@ -19,7 +19,6 @@ import com.ftm.server.application.port.out.persistence.post.SavePostPort; import com.ftm.server.domain.entity.Post; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.DisplayName; @@ -88,11 +87,7 @@ public void test1() throws Exception { SavePostCommand.from( user.getId(), new SavePostRequest( - "test1", - GroomingCategory.FASHION, - new ArrayList<>(), - "content1", - new ArrayList<>()), + "test1", new ArrayList<>(), "content1", new ArrayList<>()), new ArrayList<>(), new ArrayList<>()))); @@ -101,11 +96,7 @@ public void test1() throws Exception { SavePostCommand.from( user.getId(), new SavePostRequest( - "test2", - GroomingCategory.FASHION, - new ArrayList<>(), - "content2", - new ArrayList<>()), + "test2", new ArrayList<>(), "content2", new ArrayList<>()), new ArrayList<>(), new ArrayList<>()))); diff --git a/src/test/java/com/ftm/server/post/PostHardDeleteTest.java b/src/test/java/com/ftm/server/post/PostHardDeleteTest.java index adbffeb..da92a03 100644 --- a/src/test/java/com/ftm/server/post/PostHardDeleteTest.java +++ b/src/test/java/com/ftm/server/post/PostHardDeleteTest.java @@ -22,8 +22,7 @@ import com.ftm.server.application.vo.post.PostInfoVo; import com.ftm.server.domain.entity.Post; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import java.time.LocalDateTime; @@ -59,8 +58,7 @@ void setUp() throws Exception { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천", - GroomingCategory.BEAUTY, - List.of(HashTag.PERFUME), + List.of(PostHashtag.CLEANSING), "
test
", List.of(new SavePostProductRequest(-1, "독도 토너", "라운드랩", List.of()))); diff --git a/src/test/java/com/ftm/server/post/SavePostTest.java b/src/test/java/com/ftm/server/post/SavePostTest.java index 204a5dd..074d5bb 100644 --- a/src/test/java/com/ftm/server/post/SavePostTest.java +++ b/src/test/java/com/ftm/server/post/SavePostTest.java @@ -23,7 +23,6 @@ import com.ftm.server.application.port.out.transcation.AfterRollbackExecutorPort; import com.ftm.server.common.exception.CustomException; import com.ftm.server.common.response.enums.ErrorResponseCode; -import com.ftm.server.domain.enums.GroomingCategory; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -66,7 +65,6 @@ public class SavePostTest extends BaseTest { private final List requestPartFieldSavePost = List.of( fieldWithPath("title").type(STRING).description("게시글 제목"), - fieldWithPath("groomingCategory").type(STRING).description("게시글 그루밍 분야"), fieldWithPath("hashtags[]").type(ARRAY).optional().description("게시글 해시태그 목록"), fieldWithPath("content").type(STRING).description("게시글 내용"), fieldWithPath("products[]") @@ -167,7 +165,6 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천", - GroomingCategory.BEAUTY, List.of(), "", List.of( @@ -236,7 +233,6 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { SavePostRequest postRequest = new SavePostRequest( "", - GroomingCategory.BEAUTY, List.of(), "", List.of( @@ -271,7 +267,6 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천", - GroomingCategory.BEAUTY, List.of(), "", List.of( @@ -319,7 +314,6 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { SavePostRequest postRequest = new SavePostRequest( "", - GroomingCategory.BEAUTY, List.of(), "", List.of( @@ -360,8 +354,7 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { MockHttpSession session = createUserAndLogin(); SavePostRequest postRequest = - new SavePostRequest( - "독도 토너 추천", GroomingCategory.BEAUTY, List.of(), "", List.of()); + new SavePostRequest("독도 토너 추천", List.of(), "", List.of()); MockMultipartFile data = new MockMultipartFile( "data", @@ -399,8 +392,7 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { MockHttpSession session = createUserAndLogin(); SavePostRequest postRequest = - new SavePostRequest( - "독도 토너 추천", GroomingCategory.BEAUTY, List.of(), "", List.of()); + new SavePostRequest("독도 토너 추천", List.of(), "", List.of()); MockMultipartFile data = new MockMultipartFile( "data", diff --git a/src/test/java/com/ftm/server/post/UpdatePostTest.java b/src/test/java/com/ftm/server/post/UpdatePostTest.java index 0aad322..cbc895a 100644 --- a/src/test/java/com/ftm/server/post/UpdatePostTest.java +++ b/src/test/java/com/ftm/server/post/UpdatePostTest.java @@ -37,8 +37,7 @@ import com.ftm.server.domain.entity.PostProduct; import com.ftm.server.domain.entity.PostProductImage; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -92,11 +91,7 @@ public class UpdatePostTest extends BaseTest { private final List requestPartFieldUpdatePost = List.of( fieldWithPath("title").type(STRING).optional().description("게시글 제목"), - fieldWithPath("groomingCategory") - .type(STRING) - .optional() - .description("게시글 그루밍 분야"), - fieldWithPath("hashTags[]").type(ARRAY).optional().description("게시글 해시태그 목록"), + fieldWithPath("hashtags[]").type(ARRAY).optional().description("게시글 해시태그 목록"), fieldWithPath("content").type(STRING).optional().description("게시글 내용"), fieldWithPath("deletePostImageIds[]") .type(ARRAY) @@ -133,7 +128,7 @@ public class UpdatePostTest extends BaseTest { .type(STRING) .optional() .description("수정된 상품 브랜드"), - fieldWithPath("updateProducts[].hashTags[]") + fieldWithPath("updateProducts[].hashtags[]") .type(ARRAY) .optional() .description("수정된 상품 해시태그 목록"), @@ -217,8 +212,7 @@ void setUp() throws Exception { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천", - GroomingCategory.BEAUTY, - List.of(HashTag.PERFUME), + List.of(PostHashtag.SUN_CARE), "
test
", List.of( new SavePostProductRequest(-1, "독도 토너", "라운드랩", List.of()), @@ -262,7 +256,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -324,7 +317,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -364,7 +356,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -394,7 +385,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -430,7 +420,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -483,7 +472,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -533,7 +521,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -586,7 +573,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(1000L), @@ -627,7 +613,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -669,7 +654,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -722,7 +706,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), @@ -778,7 +761,6 @@ private MockMultipartFile getExampleData(UpdatePostRequest request) throws Excep UpdatePostRequest postRequest = UpdatePostRequest.of( "게시글 제목 수정", - null, List.of(), "게시글 내용 수정", List.of(), diff --git a/src/test/java/com/ftm/server/user/CreateBookmarkTest.java b/src/test/java/com/ftm/server/user/CreateBookmarkTest.java index 0e55f8b..ba8c573 100644 --- a/src/test/java/com/ftm/server/user/CreateBookmarkTest.java +++ b/src/test/java/com/ftm/server/user/CreateBookmarkTest.java @@ -23,7 +23,6 @@ import com.ftm.server.domain.entity.Bookmark; import com.ftm.server.domain.entity.Post; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; import jakarta.transaction.Transactional; import java.util.ArrayList; import java.util.List; @@ -114,7 +113,6 @@ public void startTransaction() { user.getId(), new SavePostRequest( "test", - GroomingCategory.FASHION, new ArrayList<>(), "content", new ArrayList<>()), diff --git a/src/test/java/com/ftm/server/user/DeleteBookmarkTest.java b/src/test/java/com/ftm/server/user/DeleteBookmarkTest.java index 94db190..b706fad 100644 --- a/src/test/java/com/ftm/server/user/DeleteBookmarkTest.java +++ b/src/test/java/com/ftm/server/user/DeleteBookmarkTest.java @@ -6,7 +6,6 @@ import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.PayloadDocumentation.*; -import static org.springframework.restdocs.request.RequestDocumentation.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -22,7 +21,6 @@ import com.ftm.server.domain.entity.Bookmark; import com.ftm.server.domain.entity.Post; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.*; @@ -128,7 +126,6 @@ public void startTransaction() { user.getId(), new SavePostRequest( "test", - GroomingCategory.FASHION, new ArrayList<>(), "content", new ArrayList<>()), @@ -157,7 +154,6 @@ void test1() throws Exception { user.getId(), new SavePostRequest( "test", - GroomingCategory.FASHION, new ArrayList<>(), "content", new ArrayList<>()), diff --git a/src/test/java/com/ftm/server/user/GeneralUserSignupTest.java b/src/test/java/com/ftm/server/user/GeneralUserSignupTest.java index 6c491d8..c54848b 100644 --- a/src/test/java/com/ftm/server/user/GeneralUserSignupTest.java +++ b/src/test/java/com/ftm/server/user/GeneralUserSignupTest.java @@ -19,7 +19,7 @@ import com.ftm.server.domain.entity.EmailVerificationLogs; import com.ftm.server.domain.entity.User; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import jakarta.transaction.Transactional; import java.util.List; import org.junit.jupiter.api.Test; @@ -104,7 +104,7 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { GeneralUserSignupRequest request = new GeneralUserSignupRequest( - email, "qwer1234!", AgeGroup.FIFTIES, List.of(HashTag.PERFUME)); + email, "qwer1234!", AgeGroup.FIFTIES, List.of(HashtagCategory.BODYCARE)); // when ResultActions resultActions = getResultActions(request); @@ -122,7 +122,10 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { // given GeneralUserSignupRequest request = new GeneralUserSignupRequest( - "test@gmail.com", "qwer1234!", AgeGroup.FIFTIES, List.of(HashTag.PERFUME)); + "test@gmail.com", + "qwer1234!", + AgeGroup.FIFTIES, + List.of(HashtagCategory.BODYCARE)); // when ResultActions resultActions = getResultActions(request); @@ -142,16 +145,19 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { void 일반회원가입_실패2() throws Exception { // given String email = "test@gmail.com"; - List hashTags = List.of(HashTag.PERFUME); + List hashtags = List.of(HashtagCategory.BODYCARE); GeneralUserCreationCommand command = new GeneralUserCreationCommand( - email, "qwer1234!", "닉넴", AgeGroup.FIFTIES, hashTags); + email, "qwer1234!", "닉넴", AgeGroup.FIFTIES, hashtags); saveUserPort.saveUser(User.createGeneralUser(command)); GeneralUserSignupRequest request = new GeneralUserSignupRequest( - "test@gmail.com", "qwer1234!", AgeGroup.FIFTIES, List.of(HashTag.PERFUME)); + "test@gmail.com", + "qwer1234!", + AgeGroup.FIFTIES, + List.of(HashtagCategory.BODYCARE)); // when ResultActions resultActions = getResultActions(request); diff --git a/src/test/java/com/ftm/server/user/LoadMyBookmarkPostTest.java b/src/test/java/com/ftm/server/user/LoadMyBookmarkPostTest.java index cf73484..8befdf6 100644 --- a/src/test/java/com/ftm/server/user/LoadMyBookmarkPostTest.java +++ b/src/test/java/com/ftm/server/user/LoadMyBookmarkPostTest.java @@ -30,8 +30,7 @@ import com.ftm.server.application.vo.post.PostInfoVo; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -131,8 +130,7 @@ void set_up() throws Exception { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천 " + i, - GroomingCategory.BEAUTY, - List.of(HashTag.PERFUME), + List.of(PostHashtag.CLEANSING), "
test
", List.of(new SavePostProductRequest(-1, "독도 토너", "라운드랩", List.of()))); PostInfoVo post = diff --git a/src/test/java/com/ftm/server/user/LoadMyPostsTest.java b/src/test/java/com/ftm/server/user/LoadMyPostsTest.java index 12f7711..271e043 100644 --- a/src/test/java/com/ftm/server/user/LoadMyPostsTest.java +++ b/src/test/java/com/ftm/server/user/LoadMyPostsTest.java @@ -28,8 +28,7 @@ import com.ftm.server.application.port.out.transcation.AfterRollbackExecutorPort; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.User; -import com.ftm.server.domain.enums.GroomingCategory; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.PostHashtag; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -127,8 +126,7 @@ void set_up() throws Exception { SavePostRequest postRequest = new SavePostRequest( "독도 토너 추천 " + i, - GroomingCategory.BEAUTY, - List.of(HashTag.PERFUME), + List.of(PostHashtag.CLEANSING), "
test
", List.of(new SavePostProductRequest(-1, "독도 토너", "라운드랩", List.of()))); savePostUseCase.execute( diff --git a/src/test/java/com/ftm/server/user/SocialUserSignupTest.java b/src/test/java/com/ftm/server/user/SocialUserSignupTest.java index 7a3198d..c3744db 100644 --- a/src/test/java/com/ftm/server/user/SocialUserSignupTest.java +++ b/src/test/java/com/ftm/server/user/SocialUserSignupTest.java @@ -20,7 +20,7 @@ import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.User; import com.ftm.server.domain.enums.AgeGroup; -import com.ftm.server.domain.enums.HashTag; +import com.ftm.server.domain.enums.HashtagCategory; import com.ftm.server.domain.enums.SocialProvider; import jakarta.servlet.http.Cookie; import jakarta.transaction.Transactional; @@ -126,7 +126,7 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { session.setAttribute(PENDING_SOCIAL_USER_SESSION_KEY, pendingSocialUserVo); SocialUserSignupRequest request = - new SocialUserSignupRequest(AgeGroup.FIFTIES, List.of(HashTag.PERFUME)); + new SocialUserSignupRequest(AgeGroup.FIFTIES, List.of(HashtagCategory.PERFUME)); // when ResultActions resultActions = getResultActions(request, session); @@ -145,7 +145,7 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { void 소셜회원가입_실패1() throws Exception { // given SocialUserSignupRequest request = - new SocialUserSignupRequest(AgeGroup.FIFTIES, List.of(HashTag.PERFUME)); + new SocialUserSignupRequest(AgeGroup.FIFTIES, List.of(HashtagCategory.PERFUME)); MockHttpSession fakeSession = new MockHttpSession(); fakeSession.invalidate(); @@ -179,7 +179,7 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { "12345", "닉네임", AgeGroup.FIFTIES, - List.of(HashTag.PERFUME)); + List.of(HashtagCategory.PERFUME)); saveUserPort.saveSocialUser(User.createSocailUser(command)); PendingSocialUserVo pendingSocialUserVo = @@ -188,7 +188,7 @@ private RestDocumentationResultHandler getDocument(Integer identifier) { session.setAttribute(PENDING_SOCIAL_USER_SESSION_KEY, pendingSocialUserVo); SocialUserSignupRequest request = - new SocialUserSignupRequest(AgeGroup.FIFTIES, List.of(HashTag.PERFUME)); + new SocialUserSignupRequest(AgeGroup.FIFTIES, List.of(HashtagCategory.PERFUME)); // when ResultActions resultActions = getResultActions(request, session);