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

서비스 개발(3) - 업데이트 기능

by 으노으뇨 2021. 11. 28.
728x90
반응형
SMALL

지금의 포스팅은 Todo를 업데이트하는 리포지토리 서비스 컨트롤러 등을 구현한다.

그럼 제일 먼저할것은 서비스클래스에서 해당 기능을 해주는 update에 관련된 메서드를 만들어주는것이다.

	public List<TodoEntity> updateTodo(final TodoEntity entity) {
		// 저장할 엔티티가 유효한지 확인한다.
		Validate.checkValidate(entity);
		// 넘겨받은 엔티티 id를 이용해 Todo Entity를 가져온다. 존재하지 않은 엔티티는 업데이트 할 수 없기때문
		final Optional<TodoEntity> original = todoRepository.findById(entity.getId());
		original.ifPresent(todo -> {
		// 반환된 투두엔티티가 존재하면 값을 새 엔티티값으로 덮어씌운다.
			todo.setTitle(entity.getTitle());
			todo.setDone(entity.isDone());
		// 데이터베이스에 새 값을 저장한다.
			todoRepository.save(todo);
		});
		// 리스트를 보여주는 메서드를 반환해 사용자의 모든 todo리스트로 리턴하게 한다.
		return retrieveTodo(entity.getUserId());

	}

그리고 컨트롤을 담당하는 CO를 만들어야한다.

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 TodoUpdateCO {

	@Autowired
	private TodoService service;
	private final String USER_ID = "KIM_EUN_HO";

	public ResponseEntity<?> updateTodo(TodoDTO dto) {
		try {
			TodoEntity todoEntity = TodoDTO.setEntity(dto);
			todoEntity.setUserId(USER_ID);
			List<TodoEntity> entities = service.updateTodo(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) {
			// TODO: handle exception
			ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().error("오류").build();
			return ResponseEntity.badRequest().body(response);
		}
	}
}

간단하다. 대신 계속 유효성검사를 위한 아이디를 계속 상수로 가져오고있는데 나중에

로그인기능이 생기면 없애고 세션값에서 로그인정보를 이용해서 값을 출력하는 방식으로 바꿀예정이다.

그리고 URI를 관리하는 SO에도 해당 CO를 추가해주면된다.

	@PutMapping
	public ResponseEntity<?> updateTodo(@RequestBody TodoDTO dto) {
		return todoUpdateCO.updateTodo(dto);
	}

만약 해당 기능을 바꾸고싶다면 SO에서 모든걸 우지끈뚝딱고치는게아닌 해당 CO클래스에서 또는 service에서 수정하면

됩니당

이제 잘 실행되는지 확인해봅시당

포스트형식의 createTodo 로 두개의 글을 추가해주었습니닸!

그리고 아이디와 타이틀, 돈을 모두 복사하고 수정을 해봅시다!

바뀌었습니다!

첫번째 글도 글id를 맞춰서 넣어주고 제목을 수정해서 올렸더니 바뀌었습니다!

 

728x90
반응형
LIST

댓글