본문 바로가기
Spring boot 프로젝트 기록/1. 백엔드 개발

서비스 개발(4) - 삭제기능

by 으노으뇨 2021. 11. 28.
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

댓글