Skip to content

Commit

Permalink
Feat: user가 원하는 subCategory를 생성하는 기능 구현
Browse files Browse the repository at this point in the history
- user가 원하는 subCategory를 생성하는 기능 구현
- 서브 카테고리 이름 중복 생성할 경우 에러 출력되게 구현
- 서브 카테고리 목록 반환 에러 해결
  • Loading branch information
yunhacandy authored Jul 15, 2024
2 parents 651f00e + f4181f1 commit 0a55c7a
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.hongik.graduationproject.controller;

import com.hongik.graduationproject.domain.dto.Response;
import com.hongik.graduationproject.domain.dto.category.SubCategoryCreateRequest;
import com.hongik.graduationproject.domain.dto.category.SubCategoryListResponse;
import com.hongik.graduationproject.enums.MainCategory;
import com.hongik.graduationproject.service.CategoryService;
Expand All @@ -9,10 +10,12 @@
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
Expand All @@ -23,12 +26,24 @@ public class CategoryController {
@ApiResponse(content = @Content(schema = @Schema(implementation = SubCategoryListResponse.class)))
@ResponseStatus(HttpStatus.OK)
@GetMapping("/categories")
public Response<SubCategoryListResponse> getSubCategoryList(@RequestParam String mainCategory,
public Response<SubCategoryListResponse> getSubCategoryList(@RequestParam MainCategory mainCategory,
@AuthenticationPrincipal Long userId) {
if ("ALL".equalsIgnoreCase(mainCategory)) {
if (mainCategory == MainCategory.ALL) {
return Response.createSuccess(categoryService.getAllSubCategoryList(userId));
} else {
return Response.createSuccess(categoryService.getSubCategoryList(MainCategory.find(mainCategory), userId));
return Response.createSuccess(categoryService.getSubCategoryList(mainCategory, userId));
}
}

@Operation(summary = "새로운 서브 카테고리 생성", description = "사용자가 원하는 서브 카테고리를 생성하는 메소드")
@ApiResponse(content = @Content(schema = @Schema(implementation = Response.class)))
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/categories")
public Response<?> createSubCategory(@RequestParam MainCategory mainCategory,
@RequestBody SubCategoryCreateRequest request,
@AuthenticationPrincipal Long userId) {
categoryService.createSubCategory(mainCategory, request.subCategoryName(), userId);
log.info("새롭게 생성된 서브 카테고리 = {}", request.subCategoryName());
return Response.createSuccess("서브 카테고리 생성 완료");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.hongik.graduationproject.domain.dto.category;

public record SubCategoryCreateRequest(
String subCategoryName
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ public enum MainCategory {
ART("예술", 6),
NEWS("뉴스", 7),
ENTERTAINMENT("엔터테인먼트", 8),
OTHER("기타", 9);
OTHER("기타", 9),
ALL("전체",10);

private final String name;
private final int index;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public enum ErrorCode {
SUMMARIZING_STATUS_NOT_EXIST(HttpStatus.NOT_FOUND, "요약 정보를 찾을 수 없습니다."),
CATEGORY_NOT_EXIST(HttpStatus.NOT_FOUND, "카테고리를 찾을 수 없습니다."),
USER_ALREADY_EXISTS(HttpStatus.CONFLICT, "이미 가입한 사용자입니다."),
SUBCATEGORY_ALREADY_EXISTS(HttpStatus.CONFLICT, "이미 존재하는 서브 카테고리입니다."),

// JWT 관련 에러
JWT_NOT_EXISTS(HttpStatus.UNAUTHORIZED, "요청에 JWT가 존재하지 않습니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ public interface CategoryRepository extends JpaRepository<Category, Long> {
"WHERE c.user = :user " +
"GROUP BY c.subCategory, c.id")
List<SubCategoryResponse> findAllSubCategoryByUser(User user);

boolean existsByMainCategoryAndSubCategory(MainCategory mainCategory, String subCategory);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,21 @@

import com.hongik.graduationproject.domain.dto.category.SubCategoryListResponse;
import com.hongik.graduationproject.domain.dto.category.SubCategoryResponse;
import com.hongik.graduationproject.domain.entity.Category;
import com.hongik.graduationproject.domain.entity.User;
import com.hongik.graduationproject.enums.MainCategory;
import com.hongik.graduationproject.exception.AppException;
import com.hongik.graduationproject.exception.ErrorCode;
import com.hongik.graduationproject.repository.CategoryRepository;
import com.hongik.graduationproject.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;
import org.springframework.transaction.annotation.Transactional;

@Slf4j
@Service
@RequiredArgsConstructor
public class CategoryService {
Expand All @@ -21,6 +27,7 @@ public SubCategoryListResponse getSubCategoryList(MainCategory mainCategory, Lon
// User user = userRepository.getReferenceById(1L);
User user = userRepository.getReferenceById(userId);
List<SubCategoryResponse> subCategoryList = categoryRepository.findAllByMainCategoryAndUser(mainCategory, user);
log.info("사용자 ID {}의 메인 카테고리 {}에 대한 서브 카테고리 목록 조회", userId, mainCategory);
return new SubCategoryListResponse(subCategoryList);
}

Expand All @@ -29,4 +36,22 @@ public SubCategoryListResponse getAllSubCategoryList(Long userId) {
List<SubCategoryResponse> subCategoryList = categoryRepository.findAllSubCategoryByUser(user);
return new SubCategoryListResponse(subCategoryList);
}

@Transactional
public void createSubCategory(MainCategory mainCategory, String subCategoryName, Long userId) {

User user = userRepository.getReferenceById(userId);

if (categoryRepository.existsByMainCategoryAndSubCategory(mainCategory, subCategoryName)) {
throw new AppException(ErrorCode.SUBCATEGORY_ALREADY_EXISTS);
}

Category category = Category.builder()
.user(user)
.mainCategory(mainCategory)
.subCategory(subCategoryName)
.build();

categoryRepository.save(category);
}
}

0 comments on commit 0a55c7a

Please sign in to comment.