Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: 키워드 입력을 통해 관련 카테고리 리스트 조회 기능 구현 #66

Merged
merged 1 commit into from
Jul 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Categories> categoriesList) {
List<CategoryResponseDTO.CategoryPreviewDTO> categoryPreviewDTOList = IntStream.range(0, categoriesList.size())
.mapToObj(i->toCategoryPreviewDTO(categoriesList.get(i)))
.collect(Collectors.toList());
return CategoryResponseDTO.CategoryPreviewListDTO.builder()
.categories(categoryPreviewDTOList)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -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.*;
Expand All @@ -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<Post> 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;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Categories, Long> {
public interface CategoryRepository extends JpaRepository<Categories, Long> {
Optional<Categories> findByName(String name);
List<Categories> findAllByNameContainingIgnoreCaseOrderByCategoryIdDesc(String keyword);
List<Categories> findAllByOrderByCategoryIdDesc();
boolean existsByName(String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -12,9 +13,10 @@
@RequiredArgsConstructor
@Transactional
@Slf4j
@Getter
public class CategoryCommandServiceImpl implements CategoryCommandService{

private final CategoriesRepository categoriesRepository;
private final CategoryRepository categoriesRepository;

@Transactional
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Categories> getCategories();
List<Categories> getCategoriesByKeyword(Optional<String> optSearch);
boolean categoryExists(String categoryName);
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
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;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Service
@RequiredArgsConstructor
Expand All @@ -17,11 +18,15 @@
@Getter
public class CategoryQueryServiceImpl implements CategoryQueryService{

private final CategoriesRepository categoriesRepository;
private final CategoryRepository categoriesRepository;

@Override
public List<Categories> getCategories() {
return categoriesRepository.findAll();
public List<Categories> getCategoriesByKeyword(Optional<String> optSearch) {
if (optSearch.isPresent()) {
String search = optSearch.get();
return categoriesRepository.findAllByNameContainingIgnoreCaseOrderByCategoryIdDesc(search);
}
return categoriesRepository.findAllByOrderByCategoryIdDesc();
}

@Override
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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<CategoryResponseDTO.CategoryPreviewListDTO> findCategoriesByKeyword(
@RequestParam Optional<String> search
){
List<Categories> categories = categoryQueryService.getCategoriesByKeyword(search);
return ApiResponse.onSuccess(
SuccessStatus.CATEGORY_OK,
CategoryConverter.toCategoryPreviewListDTO(categories)
);
}

}
Original file line number Diff line number Diff line change
@@ -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<CategoryPreviewDTO> categories;
}
}
Loading