From 3070f7bf79b5f93e38fac3b2868cc41ed2ac5d02 Mon Sep 17 00:00:00 2001 From: ParkJh38 Date: Wed, 31 Jul 2024 23:29:01 +0900 Subject: [PATCH] =?UTF-8?q?#65=20Feat:=20=ED=82=A4=EC=9B=8C=EB=93=9C=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=9D=84=20=ED=86=B5=ED=95=B4=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiPayload/code/status/SuccessStatus.java | 4 +- .../global/converter/CategoryConverter.java | 27 ++++++++++++ .../domain/entity/mapping/Categories.java | 16 +------ ...epository.java => CategoryRepository.java} | 5 ++- .../CategoryCommandServiceImpl.java | 6 ++- .../CategoryService/CategoryQueryService.java | 3 +- .../CategoryQueryServiceImpl.java | 13 ++++-- .../web/controller/CategoriesController.java | 11 ----- .../web/controller/CategoryController.java | 44 +++++++++++++++++++ .../web/dto/Category/CategoryResponseDTO.java | 24 ++++++++++ 10 files changed, 119 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/codiary/backend/global/converter/CategoryConverter.java rename src/main/java/com/codiary/backend/global/repository/{CategoriesRepository.java => CategoryRepository.java} (54%) delete mode 100644 src/main/java/com/codiary/backend/global/web/controller/CategoriesController.java create mode 100644 src/main/java/com/codiary/backend/global/web/controller/CategoryController.java diff --git a/src/main/java/com/codiary/backend/global/apiPayload/code/status/SuccessStatus.java b/src/main/java/com/codiary/backend/global/apiPayload/code/status/SuccessStatus.java index cde9da9c..625c09ae 100644 --- a/src/main/java/com/codiary/backend/global/apiPayload/code/status/SuccessStatus.java +++ b/src/main/java/com/codiary/backend/global/apiPayload/code/status/SuccessStatus.java @@ -21,7 +21,9 @@ public enum SuccessStatus implements BaseCode { // 포스트사진 관련 응답 POSTPHOTO_OK(HttpStatus.OK, "POSTPHOTO_5000", "성공입니다."), // 북마크 관련 응답 - BOOKMARK_OK(HttpStatus.OK, "BOOKMARK_7000", "성공입니다."); + BOOKMARK_OK(HttpStatus.OK, "BOOKMARK_6000", "성공입니다."), + // 카테고리 관련 응답 + CATEGORY_OK(HttpStatus.OK, "CATEGORY_7000", "성공입니다."); private final HttpStatus httpStatus; private final String code; diff --git a/src/main/java/com/codiary/backend/global/converter/CategoryConverter.java b/src/main/java/com/codiary/backend/global/converter/CategoryConverter.java new file mode 100644 index 00000000..6930db82 --- /dev/null +++ b/src/main/java/com/codiary/backend/global/converter/CategoryConverter.java @@ -0,0 +1,27 @@ +package com.codiary.backend.global.converter; + +import com.codiary.backend.global.domain.entity.mapping.Categories; +import com.codiary.backend.global.web.dto.Category.CategoryResponseDTO; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class CategoryConverter { + + public static CategoryResponseDTO.CategoryPreviewDTO toCategoryPreviewDTO(Categories categories) { + return CategoryResponseDTO.CategoryPreviewDTO.builder() + .categoryId(categories.getCategoryId()) + .categoryName(categories.getName()) + .build(); + } + + public static CategoryResponseDTO.CategoryPreviewListDTO toCategoryPreviewListDTO(List categoriesList) { + List categoryPreviewDTOList = IntStream.range(0, categoriesList.size()) + .mapToObj(i->toCategoryPreviewDTO(categoriesList.get(i))) + .collect(Collectors.toList()); + return CategoryResponseDTO.CategoryPreviewListDTO.builder() + .categories(categoryPreviewDTOList) + .build(); + } +} diff --git a/src/main/java/com/codiary/backend/global/domain/entity/mapping/Categories.java b/src/main/java/com/codiary/backend/global/domain/entity/mapping/Categories.java index 2b933e0f..bbb1982f 100644 --- a/src/main/java/com/codiary/backend/global/domain/entity/mapping/Categories.java +++ b/src/main/java/com/codiary/backend/global/domain/entity/mapping/Categories.java @@ -1,5 +1,6 @@ package com.codiary.backend.global.domain.entity.mapping; +import com.codiary.backend.global.domain.common.BaseEntity; import com.codiary.backend.global.domain.entity.Post; import com.codiary.backend.global.domain.entity.Member; import jakarta.persistence.*; @@ -17,27 +18,14 @@ public class Categories { @Column(name = "category_id", nullable = false, columnDefinition = "bigint") private Long categoryId; - //@Enumerated(EnumType.STRING) @Column(name = "name", nullable = false, columnDefinition = "varchar(100)") private String name; -// @ManyToOne(fetch = FetchType.LAZY) -// @JoinColumn(name = "member_id") -// private Member member; - -// @ManyToOne(fetch = FetchType.LAZY) -// @JoinColumn(name = "post_id") -// private Post post; @ManyToMany(mappedBy = "categoriesList") private List posts = new ArrayList<>(); @Builder public Categories(String name) { this.name = name;} - public static Categories createCategory(Post post, String name, Member member) { - Categories category = new Categories(name); - category.getPosts().add(post); - post.getCategoriesList().add(category); - return category; - } + } diff --git a/src/main/java/com/codiary/backend/global/repository/CategoriesRepository.java b/src/main/java/com/codiary/backend/global/repository/CategoryRepository.java similarity index 54% rename from src/main/java/com/codiary/backend/global/repository/CategoriesRepository.java rename to src/main/java/com/codiary/backend/global/repository/CategoryRepository.java index db5fe82c..516192c5 100644 --- a/src/main/java/com/codiary/backend/global/repository/CategoriesRepository.java +++ b/src/main/java/com/codiary/backend/global/repository/CategoryRepository.java @@ -4,9 +4,12 @@ import com.codiary.backend.global.domain.entity.mapping.Categories; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; -public interface CategoriesRepository extends JpaRepository { +public interface CategoryRepository extends JpaRepository { Optional findByName(String name); + List findAllByNameContainingIgnoreCaseOrderByCategoryIdDesc(String keyword); + List findAllByOrderByCategoryIdDesc(); boolean existsByName(String name); } diff --git a/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryCommandServiceImpl.java b/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryCommandServiceImpl.java index e0f1572c..a1933923 100644 --- a/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryCommandServiceImpl.java +++ b/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryCommandServiceImpl.java @@ -2,7 +2,8 @@ import com.codiary.backend.global.domain.entity.Post; import com.codiary.backend.global.domain.entity.mapping.Categories; -import com.codiary.backend.global.repository.CategoriesRepository; +import com.codiary.backend.global.repository.CategoryRepository; +import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -12,9 +13,10 @@ @RequiredArgsConstructor @Transactional @Slf4j +@Getter public class CategoryCommandServiceImpl implements CategoryCommandService{ - private final CategoriesRepository categoriesRepository; + private final CategoryRepository categoriesRepository; @Transactional @Override diff --git a/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryService.java b/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryService.java index d1730edd..f58a4658 100644 --- a/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryService.java +++ b/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryService.java @@ -3,8 +3,9 @@ import com.codiary.backend.global.domain.entity.mapping.Categories; import java.util.List; +import java.util.Optional; public interface CategoryQueryService { - List getCategories(); + List getCategoriesByKeyword(Optional optSearch); boolean categoryExists(String categoryName); } diff --git a/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryServiceImpl.java b/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryServiceImpl.java index 72afed21..17fe813b 100644 --- a/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryServiceImpl.java +++ b/src/main/java/com/codiary/backend/global/service/CategoryService/CategoryQueryServiceImpl.java @@ -1,7 +1,7 @@ package com.codiary.backend.global.service.CategoryService; import com.codiary.backend.global.domain.entity.mapping.Categories; -import com.codiary.backend.global.repository.CategoriesRepository; +import com.codiary.backend.global.repository.CategoryRepository; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -9,6 +9,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Optional; @Service @RequiredArgsConstructor @@ -17,11 +18,15 @@ @Getter public class CategoryQueryServiceImpl implements CategoryQueryService{ - private final CategoriesRepository categoriesRepository; + private final CategoryRepository categoriesRepository; @Override - public List getCategories() { - return categoriesRepository.findAll(); + public List getCategoriesByKeyword(Optional optSearch) { + if (optSearch.isPresent()) { + String search = optSearch.get(); + return categoriesRepository.findAllByNameContainingIgnoreCaseOrderByCategoryIdDesc(search); + } + return categoriesRepository.findAllByOrderByCategoryIdDesc(); } @Override diff --git a/src/main/java/com/codiary/backend/global/web/controller/CategoriesController.java b/src/main/java/com/codiary/backend/global/web/controller/CategoriesController.java deleted file mode 100644 index 2824e623..00000000 --- a/src/main/java/com/codiary/backend/global/web/controller/CategoriesController.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.codiary.backend.global.web.controller; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/categories") -public class CategoriesController { - //private final CategoryService categoryService; - -} diff --git a/src/main/java/com/codiary/backend/global/web/controller/CategoryController.java b/src/main/java/com/codiary/backend/global/web/controller/CategoryController.java new file mode 100644 index 00000000..5470b805 --- /dev/null +++ b/src/main/java/com/codiary/backend/global/web/controller/CategoryController.java @@ -0,0 +1,44 @@ +package com.codiary.backend.global.web.controller; + + +import com.codiary.backend.global.apiPayload.ApiResponse; +import com.codiary.backend.global.apiPayload.code.status.SuccessStatus; +import com.codiary.backend.global.converter.CategoryConverter; +import com.codiary.backend.global.domain.entity.mapping.Categories; +import com.codiary.backend.global.service.CategoryService.CategoryQueryService; +import com.codiary.backend.global.web.dto.Category.CategoryResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Optional; + +@RestController +@RequiredArgsConstructor +@Validated +@CrossOrigin +@RequestMapping("/categories") +@Slf4j +public class CategoryController { + private final CategoryQueryService categoryQueryService; + + // 키워드 입력을 통해 관련 카테고리 리스트 조회 + @GetMapping("/list") + @Operation( + summary = "키워드 입력을 통해 관련 카테고리 리스트 조회 API", description = "키워드 입력을 통해 관련 카테고리 리스트 조회합니다. 입력한 키워드가 포함된 모든 카테고리를 리스트로 조회할 수 있습니다. Param으로 키워드를 입력하세요." + //, security = @SecurityRequirement(name = "accessToken") + ) + public ApiResponse findCategoriesByKeyword( + @RequestParam Optional search + ){ + List categories = categoryQueryService.getCategoriesByKeyword(search); + return ApiResponse.onSuccess( + SuccessStatus.CATEGORY_OK, + CategoryConverter.toCategoryPreviewListDTO(categories) + ); + } + +} diff --git a/src/main/java/com/codiary/backend/global/web/dto/Category/CategoryResponseDTO.java b/src/main/java/com/codiary/backend/global/web/dto/Category/CategoryResponseDTO.java index c029e0c2..4eda6c6a 100644 --- a/src/main/java/com/codiary/backend/global/web/dto/Category/CategoryResponseDTO.java +++ b/src/main/java/com/codiary/backend/global/web/dto/Category/CategoryResponseDTO.java @@ -1,4 +1,28 @@ package com.codiary.backend.global.web.dto.Category; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + public class CategoryResponseDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CategoryPreviewDTO { + Long categoryId; + String categoryName; + } + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CategoryPreviewListDTO { + List categories; + } }