diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/AddCategoryController.java b/src/main/java/clap/server/adapter/inbound/web/admin/AddCategoryController.java index e5b841fb..584726c4 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/AddCategoryController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/AddCategoryController.java @@ -18,7 +18,7 @@ @Tag(name = "05. Admin") @WebAdapter @RequiredArgsConstructor -@RequestMapping("/api/management") +@RequestMapping("/api/managements") public class AddCategoryController { private final AddCategoryUsecase addCategoryUsecase; diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/DeleteCategoryController.java b/src/main/java/clap/server/adapter/inbound/web/admin/DeleteCategoryController.java index 82126fff..e4c0c194 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/DeleteCategoryController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/DeleteCategoryController.java @@ -15,7 +15,7 @@ @Tag(name = "05. Admin") @WebAdapter @RequiredArgsConstructor -@RequestMapping("/api/management") +@RequestMapping("/api/managements") public class DeleteCategoryController { private final DeleteCategoryUsecase deleteCategoryUsecase; diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/FindCategoryController.java b/src/main/java/clap/server/adapter/inbound/web/admin/FindCategoryController.java index ea1d7725..bc2ed571 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/FindCategoryController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/FindCategoryController.java @@ -27,7 +27,7 @@ public class FindCategoryController { @Operation(summary = "모든 카테고리 조회") @GetMapping("/category") - public ResponseEntity findAllCategory() { + public ResponseEntity> findAllCategory() { return ResponseEntity.ok(findAllCategoryUsecase.findAllCategory()); } diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/UpdateCategoryController.java b/src/main/java/clap/server/adapter/inbound/web/admin/UpdateCategoryController.java index 9ccc7731..9ec32397 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/UpdateCategoryController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/UpdateCategoryController.java @@ -17,7 +17,7 @@ @Tag(name = "05. Admin") @WebAdapter @RequiredArgsConstructor -@RequestMapping("/api/management") +@RequestMapping("/api/managements") public class UpdateCategoryController { private final UpdateCategoryUsecase updateCategoryUsecase; diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindAllCategoryResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindAllCategoryResponse.java index 74dc547a..46febb93 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindAllCategoryResponse.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindAllCategoryResponse.java @@ -3,7 +3,9 @@ import java.util.List; public record FindAllCategoryResponse( - List mainCategory, + Long id, + String name, + String code, List subCategory ) { } diff --git a/src/main/java/clap/server/application/mapper/response/CategoryResponseMapper.java b/src/main/java/clap/server/application/mapper/response/CategoryResponseMapper.java index 19b780fd..663637b7 100644 --- a/src/main/java/clap/server/application/mapper/response/CategoryResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/response/CategoryResponseMapper.java @@ -10,9 +10,11 @@ public class CategoryResponseMapper { public static FindAllCategoryResponse toFindAllCategoryResponse( - List mainCategoryResponses, + Long id, + String name, + String code, List subCategoryResponses) { - return new FindAllCategoryResponse(mainCategoryResponses, subCategoryResponses); + return new FindAllCategoryResponse(id, name, code, subCategoryResponses); } public static FindMainCategoryResponse toFindMainCategoryResponse(Category category) { diff --git a/src/main/java/clap/server/application/port/inbound/admin/FindAllCategoryUsecase.java b/src/main/java/clap/server/application/port/inbound/admin/FindAllCategoryUsecase.java index e9c3c26d..03968603 100644 --- a/src/main/java/clap/server/application/port/inbound/admin/FindAllCategoryUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/admin/FindAllCategoryUsecase.java @@ -2,6 +2,8 @@ import clap.server.adapter.inbound.web.dto.admin.FindAllCategoryResponse; +import java.util.List; + public interface FindAllCategoryUsecase { - FindAllCategoryResponse findAllCategory(); + List findAllCategory(); } diff --git a/src/main/java/clap/server/application/service/admin/DeleteCategoryService.java b/src/main/java/clap/server/application/service/admin/DeleteCategoryService.java index bbff33d4..f490bd5e 100644 --- a/src/main/java/clap/server/application/service/admin/DeleteCategoryService.java +++ b/src/main/java/clap/server/application/service/admin/DeleteCategoryService.java @@ -1,7 +1,7 @@ package clap.server.application.service.admin; import clap.server.application.port.inbound.admin.DeleteCategoryUsecase; -import clap.server.application.port.outbound.member.LoadMemberPort; +import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.task.LoadCategoryPort; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Member; @@ -9,19 +9,18 @@ import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; -import static clap.server.exception.code.MemberErrorCode.ACTIVE_MEMBER_NOT_FOUND; import static clap.server.exception.code.TaskErrorCode.CATEGORY_NOT_FOUND; @ApplicationService @RequiredArgsConstructor public class DeleteCategoryService implements DeleteCategoryUsecase { private final LoadCategoryPort loadCategoryPort; - private final LoadMemberPort loadMemberPort; + private final MemberService memberService; @Override @Transactional public void deleteCategory(Long adminId, Long categoryId) { - Member admin = loadMemberPort.findActiveMemberById(adminId).orElseThrow(() -> new ApplicationException(ACTIVE_MEMBER_NOT_FOUND)); + Member admin = memberService.findActiveMember(adminId); loadCategoryPort.findById(categoryId) .orElseThrow(() -> new ApplicationException(CATEGORY_NOT_FOUND)) .deleteCategory(admin); diff --git a/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java b/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java index 6fe93c55..27fe7c76 100644 --- a/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java +++ b/src/main/java/clap/server/application/service/admin/FindAllCategoryService.java @@ -1,16 +1,15 @@ package clap.server.application.service.admin; import clap.server.adapter.inbound.web.dto.admin.FindAllCategoryResponse; -import clap.server.adapter.inbound.web.dto.admin.FindMainCategoryResponse; import clap.server.adapter.inbound.web.dto.admin.FindSubCategoryResponse; import clap.server.application.mapper.response.CategoryResponseMapper; import clap.server.application.port.inbound.admin.FindAllCategoryUsecase; import clap.server.application.port.outbound.task.LoadCategoryPort; import clap.server.common.annotation.architecture.ApplicationService; +import clap.server.domain.model.task.Category; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; import java.util.List; @ApplicationService @@ -20,16 +19,23 @@ public class FindAllCategoryService implements FindAllCategoryUsecase { @Override @Transactional(readOnly = true) - public FindAllCategoryResponse findAllCategory() { - List mainCategoryResponses = new ArrayList<>(); - List subCategoryResponses = new ArrayList<>(); - loadCategoryPort.findAll().forEach(category -> { - if (category.getMainCategory() == null) { - mainCategoryResponses.add(CategoryResponseMapper.toFindMainCategoryResponse(category)); - } else { - subCategoryResponses.add(CategoryResponseMapper.toFindSubCategoryResponse(category)); - } - }); - return CategoryResponseMapper.toFindAllCategoryResponse(mainCategoryResponses, subCategoryResponses); + public List findAllCategory() { + List categories = loadCategoryPort.findAll(); + return categories.stream().filter(category -> category.getMainCategory() == null) + .map(parent -> CategoryResponseMapper.toFindAllCategoryResponse( + parent.getCategoryId(), + parent.getName(), + parent.getCode(), + getSubCategories(categories, parent) // 2차 카테고리 리스트 변환 + )) + .toList(); + } + + private List getSubCategories(List categories, Category parent) { + return categories.stream() + .filter(category -> category.getMainCategory() != null && + category.getMainCategory().getCategoryId().equals(parent.getCategoryId())) // 부모가 같은 것들 필터링 + .map(CategoryResponseMapper::toFindSubCategoryResponse) + .toList(); } } \ No newline at end of file