입사 후 공부하며 기술 스텍을 쌓던 내게 던져진 첫 실무 과제.
stack : Springboot 2.3.6 RELEASE, gradle, JPA, mysql ...
저번시간에 이어 이번에는 Service
계층의 get
메서드와 update, delete
메소드를 구현해보자.
Map
의 형태로 json
화 하여 return
해줄것 public Map <String, CategoryDTO> getCategoryByBranch (String branch) {
Category category = categoryRepository.findByBranchAndCode(branch, "ROOT")
.orElseThrow(() -> new IllegalArgumentException("찾는 대분류가 없습니다"));
CategoryDTO categoryDTO = new CategoryDTO(category);
Map <String, CategoryDTO> data = new HashMap<>();
data.put(categoryDTO.getName(), categoryDTO);
return data;
}
대분류를 return
하여 하위 모든 카테고리를 가져오도록 디자인.
categoryRepository.finByBranchAndCode()
의 파라미터로 "ROOT"
조회Map
객체를 생성하여 넣어준 뒤 return
하면 끝 ! 😁
Refactor
과정 통해 return
스펙을 조금 변화 시켜 줄 예정이다.
요구 스펙
repository
에서도 삭제name
을 "Deleted category"
로 변경만 할것🛠 Code
public void deleteCategory (Long categoryId) {
Category category = findCategory(categoryId);
if (category.getSubCategory().size() == 0) { //하위 카테고리 없을 경우
Category parentCategory = findCategory(category.getParentCategory().getId());
if (!parentCategory.getName().equals("ROOT")) { // ROOT가 아닌 다른 부모가 있을 경우
parentCategory.getSubCategory().remove(category);
}
categoryRepository.deleteById(category.getId());
} else { //하위 카테고리 있을 경우
Category parentCategory = findCategory(category.getParentCategory().getId());
//ROOT아닌 부모가 있을 경우
if (!parentCategory.getName().equals("ROOT")) {
parentCategory.getSubCategory().remove(category);
}
category.setName("Deleted category");
}
ROOT
의 경우를 검색하여 최상단 카테고리 인지도 검사를 해주었다. update
요구사항은 간단했다. 우선은 name
만 변경하도록 ! public Long updateCategory (Long categoryId, CategoryDTO categoryDTO) {
Category category = findCategory(categoryId);
category.setName(categoryDTO.getName());
return category.getId();
}
findCategory(categoryId)
는 하도 카테고리를 찾아오는 경우가 많아서 메소드로 하나 빼놓았다. refactor
할게 많을 것 같다.save
부분과 map
에 담아 넘긴 get
부분이었다. business
로직을 테스트하는 테스트 코드를 짜보도록 하겠다.
포스팅 잘 보고 있습니다~
공부하다보니 [4-2] 에서 repository findByBranchAndCode -> findByBranchAndName 이 맞는 것 같아서 알려드립니다!