728x90
반응형
SMALL
Todo를 삭제하는 기능을 구현하고자합니당
퍼시스턴스 구현
TodoRepository를 사용한다. 업데이트를 위해 delete(), findByUserId()메서드를 사용한다.
서비스 구현
Delete기능의 구현을 위해 delete메서드를 작성하겠습니다! TodoService클래스에 해당 메서드를 추가해줍시다
public List<TodoEntity> deleteTodo(final TodoEntity entity) {
Validate.checkValidate(entity);
try {
//엔티티를 삭제한다.
todoRepository.delete(entity);
} catch (Exception e) {
//예외가 발생했을때 아이디와 예외를 로깅한다.
log.error("에러발생!!엔티티 삭제할떄 오류가 발생..", entity.getId(), e);
//컨트롤러로 예외를 보낸다. 데이터 베이스 내부 로직을 캡슐화 하려면
//e를 리턴하지 않고 새 exception 오브젝트를 리턴한다.
throw new RuntimeException("에려가 발생했습니다." + entity.getId());
}
return retrieveTodo(entity.getUserId());
}
삭제가 될때 발생하는 예외에 대해 많지는 않지만 이미없어진값이지만 또 삭제를 눌러 중복삭제를 한다던가등에
대한 예외가있을 수 있으니 트라이캐치문으로 풀었습니다.
그리고 삭제가 되면 다시 리스트를 반환하도록 하였습니다.
package com.unoSpringBoot.study.Controller;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import com.unoSpringBoot.study.DTO.ResponseDTO;
import com.unoSpringBoot.study.DTO.TodoDTO;
import com.unoSpringBoot.study.model.TodoEntity;
import com.unoSpringBoot.study.service.TodoService;
@Service
public class TodoDeleteCO {
@Autowired
private TodoService service;
private final String USER_ID = "KIM_EUN_HO";
public <R> ResponseEntity<?> deleteTodo(TodoDTO dto) {
try {
TodoEntity todoEntity = TodoDTO.setEntity(dto);
todoEntity.setUserId(USER_ID);
List<TodoEntity> entities = service.deleteTodo(todoEntity);
List<TodoDTO> outDTO = entities.stream().map(TodoDTO::new).collect(Collectors.toList());
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().data(outDTO).build();
return ResponseEntity.ok().body(response);
} catch (Exception e) {
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().error(e.getMessage()).build();
return ResponseEntity.badRequest().body(response);
}
}
}
이제 컨트롤을 담당하는 deleteCO를 만들었습니다.
그리고 URI서비스를 담당하는 메서드를 만들고 deleteCO를 호출해서 작동하도록 하겠습니다!

@DeleteMapping
public ResponseEntity<?> deleteTodo(@RequestBody TodoDTO dto) { // todo삭제
return todoDeleteCO.deleteTodo(dto);
}
실행
글 2개를 만들어주었고
감기조심하세요! 라는 글을 지워보겠습니다

해당 글 남바를 넣어주고요!
사라졌습니다!! 그러면 없는 남바를 지울땐 오또케 될까욧!?

추가적으로 매번 매 CO클래스마다
리스트를 초기화하고, 거기에 넣고 하는작업이 매 작업마다 일어난다. 이것을
나만의 작은 라이브러리를 만들어주고 관리하도록 하겠다. 클래스 이름은 Return 으로 해주었습니다.
package com.unoSpringBoot.study.UnoDOC;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.http.ResponseEntity;
import com.unoSpringBoot.study.DTO.ResponseDTO;
import com.unoSpringBoot.study.DTO.TodoDTO;
import com.unoSpringBoot.study.model.TodoEntity;
public class ReturnList {
public static ResponseEntity<ResponseDTO<TodoDTO>> returnList(final List<TodoEntity> entities) {
List<TodoDTO> outDTO = entities.stream().map(TodoDTO::new).collect(Collectors.toList());
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().data(outDTO).build();
return ResponseEntity.ok().body(response);
}
}
public static ResponseEntity<ResponseDTO<TodoDTO>> returnError(Exception e) {
ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().error(e.getMessage()).build();
return ResponseEntity.badRequest().body(response);
}
그럼 4~5줄정도가 사라지는데 매번 저걸 복붙하거나, 그대로 타이핑하는 번거로움을 한줄로 리턴값을 아예
박제해놓은것처럼하여서 어느정도 도움이 될것같다..
728x90
반응형
LIST
'Spring boot 프로젝트 기록 > 1. 백엔드 개발' 카테고리의 다른 글
회원정보 찾기 (0) | 2021.12.10 |
---|---|
서비스 개발(3) - 업데이트 기능 (0) | 2021.11.28 |
서비스 개발(2) - 전체리스트보기 (0) | 2021.11.28 |
서비스 개발(1) - 글을 추가하는 기능 (0) | 2021.11.26 |
기본 쿼리와 쿼리 작성 방법 (0) | 2021.11.26 |
댓글