반응형
[Spring JPA] 1. 체크리스트 만들기 - 초기 설정하기
Checklist Service
@Service
@AllArgsConstructor
public class ChecklistService {
@Autowired
private final ChecklistRepository checklistRepository;
@Autowired
private final ItemRepository itemRepository;
public ChecklistResponse saveChecklist() throws BaseException {
// 새로운 체크리스트 생성 및 저장
ChecklistEntity newChecklist = new ChecklistEntity();
newChecklist.setTitle("새로운 체크리스트");
newChecklist.setTravel(travel);
newChecklist = checklistRepository.save(newChecklist);
// 저장된 체크리스트 정보를 ChecklistResponse 형태로 반환
ChecklistResponse checklistResponse = new ChecklistResponse(newChecklist.getTitle(), newChecklist.getCId(), travel.getTId());
// 아이템 정보 생성 및 추가
List<ItemResponse> itemResponses = new ArrayList<>();
if (itemResponses.isEmpty()) {
itemResponses = Collections.emptyList();
}
checklistResponse.setItems(itemResponses);
return checklistResponse;
}
public ChecklistResponse getChecklist(int cId) throws BaseException {
Optional<ChecklistEntity> getChecklist = checklistRepository.findBycIdAndState(cId, 1);
if (!getChecklist.isPresent()) {
throw new BaseException(CHECKLIST_IS_EMPTY);
}
ChecklistResponse checklistResponse = new ChecklistResponse(getChecklist.get());
return checklistResponse;
}
// 체크리스트명 변경
public ChecklistResponse patchChecklist(String accessToken, int cId, String newTitle) throws BaseException {
// 기존 체크리스트를 데이터베이스에서 조회
ChecklistEntity checklist = checklistRepository.findBycId(cId)
.orElseThrow(() -> new BaseException(CHECKLIST_IS_EMPTY));
// 체크리스트명 변경
checklist.setTitle(newTitle);
// 변경사항을 임시로 저장
try {
checklist = checklistRepository.save(checklist);
} catch (Exception e) {
throw new BaseException(SAVE_CATEGORY_FAIL);
}
// 변경된 체크리스트 정보를 ChecklistResponse 형태로 반환
ChecklistResponse response = new ChecklistResponse();
response.setCId(checklist.getCId());
response.setTitle(checklist.getTitle());
// ItemResponse 리스트 생성 및 추가
List<ItemResponse> itemResponses = new ArrayList<>();
for (ItemEntity item : checklist.getChecklistItems()) {
ItemResponse itemResponse = new ItemResponse();
itemResponse.setIId(item.getId());
itemResponse.setName(item.getName());
itemResponse.setItemOrder(item.getItemOrder());
itemResponse.setChecked(item.isIschecked());
itemResponse.setCId(checklist.getCId());
itemResponses.add(itemResponse);
}
response.setItems(itemResponses);
return response;
}
// 체크리스트 삭제
public int deleteChecklist(int cId) throws BaseException {
// 체크리스트를 데이터베이스에서 조회
ChecklistEntity checklist = checklistRepository.findById(cId)
.orElseThrow(() -> new BaseException(CHECKLIST_IS_EMPTY));
try {
// 체크리스트 삭제 (필요하다면 데이터베이스에서도 삭제)
checklistRepository.delete(checklist);
} catch (Exception e) {
// If the deletion fails, throw an exception indicating the failure
throw new BaseException(DELETE_CATEGORY_FAIL);
}
// 성공적으로 삭제되면 1 반환
return 1;
}
}
Checklist에 대하여 CRUD를 작성하였다.
예외를 처리하는 부분에서는 try catch를 사용하였다.
또한 체크리스트 이름을 바꿀 경우, newtitle로 받도록 하였다.
Item Service
@Service
@AllArgsConstructor
public class ItemService {
private final ItemRepository itemRepository;
private final ChecklistRepository checklistRepository;
// 새로운 아이템 정보 저장
public ItemResponse saveItem(int cId) throws BaseException {
ChecklistEntity checklist = checklistRepository.findById(cId)
.orElseThrow(() -> new BaseException(ITEM_NOT_FOUND));
// Create a new ItemEntity based on the itemRequest
ItemEntity newItem = new ItemEntity();
newItem.setName("새로운 준비물");
newItem.setIschecked(false);
newItem.setChecklist(checklist);
newItem = itemRepository.save(newItem);
return new ItemResponse(newItem.getId(), newItem.getName(), newItem.getIschecked() , newItem.getChecklist().getCId());
}
// 모든 item 정보 조회
public List<ItemResponse> getAllItem() {
List<ItemEntity> items = itemRepository.findAll();
return mapItemEntityListToItemResponseList(items);
}
// 특정 아이템 정보 조회
public ItemResponse getItem(int iId) throws BaseException {
ItemEntity item = (ItemEntity) itemRepository.findById(iId)
.orElseThrow(() -> new BaseException(ITEM_NOT_FOUND));
return new ItemResponse (item.getId(), item.getName(), item.getIschecked());
}
// 특정 checklist에 포함된 모든 item 정보조회
public List<ItemResponse> getallItemByChecklist(int cId) throws BaseException {
ChecklistEntity checklist = checklistRepository.findById(cId)
.orElseThrow(() -> new BaseException(CHECKLIST_IS_EMPTY));
List<ItemEntity> items = itemRepository.findAllByChecklist(checklist);
return mapItemEntityListToItemResponseList(items);
}
// ItemEntity 리스트를 ItemResponse 리스트로 변환하는 메서드
private List<ItemResponse> mapItemEntityListToItemResponseList(List<ItemEntity> items) {
List<ItemResponse> itemResponses = new ArrayList<>();
for (ItemEntity item : items) {
ItemResponse itemResponse = new ItemResponse(item.getId(), item.getName(), item.getIschecked());
itemResponses.add(itemResponse);
}
return itemResponses;
}
// 특정 checklist에 포함된 item 수정
public ItemResponse patchItem(int cId, int iId, ItemRequest itemRequest) throws BaseException {
ItemEntity item = itemRepository.findByIdAndChecklist_cId(iId, cId)
.orElseThrow(() -> new BaseException(ITEM_NOT_FOUND));
item.setName(itemRequest.getName());
item.setIschecked(itemRequest.getIschecked());
try {
item = itemRepository.save(item);
} catch (Exception e) {
throw new BaseException(SAVE_ITEM_FAIL);
}
return new ItemResponse(item.getId(), item.getName(), item.getIschecked());
}
// 특정 checklist내 포함된 item 삭제
public int deleteItem(int cId, int iId) throws BaseException {
ItemEntity item = (ItemEntity) itemRepository.findByIdAndChecklist_cId(iId, cId)
.orElseThrow(() -> new BaseException(ITEM_NOT_FOUND));
try {
itemRepository.delete(item);
} catch (Exception e) {
throw new BaseException(DELETE_ITEM_FAIL);
}
return cId;
}
// 특정 체크리스트에 포함된 아이템 조회 및 삭제
public ItemResponse getItemFromChecklist(int cId, int iId) throws BaseException {
ChecklistEntity checklist = checklistRepository.findById(cId)
.orElseThrow(() -> new BaseException(CHECKLIST_IS_EMPTY));
ItemEntity item = itemRepository.findByIdAndChecklist(iId, checklist)
.orElseThrow(() -> new BaseException(ITEM_NOT_FOUND));
try {
itemRepository.delete(item); // 아이템 삭제 시도
} catch (Exception e) {
throw new BaseException(DELETE_ITEM_FAIL);
}
return new ItemResponse(item.getId(), item.getName(), item.getIschecked());
}
}
Item service에 대해서도 마찬가지로 CRUD를 완성하였다.
반응형
'Develop > Spring Boot' 카테고리의 다른 글
[Spring JPA] 5. 체크리스트 만들기 - Repository, DTO 설정하기 (0) | 2023.08.28 |
---|---|
[Spring JPA] 3. 체크리스트 만들기 - Controller 설정하기 (0) | 2023.08.28 |
[Spring JPA] 2. 체크리스트 만들기 - Entity 설정하기 (0) | 2023.08.28 |
[Spring JPA] 1. 체크리스트 만들기 - 초기 설정하기 (0) | 2023.08.25 |
[Error] HikariPool-1 - Thread starvation or clock leap detected (0) | 2023.08.05 |