컨트롤러

bunny.log·2023년 1월 23일
0
post-custom-banner

컨트롤러는 유저에게서 TodoDto를 요청바디로 넘겨받고 이를 TodoEntity로 변환해 저장해야 하며 또 TodoService의 Create()가 리턴하는 TodoEntity를 TodoDTO로 변환해 리턴해야 한다.

DTO에서 TodoEntity로 변환

HTTP 응답을 반환할 때,비지니스 로직을 캡슐화하거나 추가적인 정보를 함께 반환하기 위해 DTO를 사용한다.

또 데이타베이스 테이블을 자바 내에서 사용하기 위해 엔티티를 사용하며 보통 데이타베이스 테이블 하나마다 그에 상응하는 예를 들어 MySQL의 Todo테이블과 TodoEntity.java같은 엔티티 클래스가 존재한다. 엔티티 클래스는 클래스 그 자체가 테이블을 정의해야 한다.

또 이런 ORM(Object Relation Mapping)작업을 집중적으로 해주는 DAO(Data Access Object클래스)를 작성해야 한다.

package com.example.springTest.dto;


import com.example.springTest.model.TodoEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class TodoDTO {
	private String id;
	private String title;
	private boolean done;
	
	public TodoDTO(final TodoEntity entity) {
		this.id = entity.getId();
		this.title = entity.getTitle();
		this.done = entity.isDone();
	}

	public static TodoEntity todoEntity(final TodoDTO dto){
		return TodoEntity.builder().id(dto.getId()).title(dto.getTitle()).done(dto.isDone()).build();
	}

}

Service에서 Create()가 리턴하는 Entity

service에서 repository를 사용하여 엔티티를 데이타베이스에 저장하고 데이타베이스 에서 원하는 값을 검색하여 리턴 받는다

package com.example.springTest.service;

import com.example.springTest.model.TodoEntity;
import com.example.springTest.persistence.TodoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class TodoService {
	@Autowired
	private TodoRepository repository;
    
	public List<TodoEntity> create(final TodoEntity entity){

		repository.save(entity);
        //엔티티를 데이타베이스에 저장한다.

		return  repository.findByUserId(entity.getUserId());
        //저장된 엔티티를 포함하는 새리스트를 리턴한다.
	}
}

Controller

package com.example.springTest.controller;

import com.example.springTest.dto.TodoDTO;
import com.example.springTest.model.TodoEntity;
import org.springframework.web.bind.annotation.*;


import com.example.springTest.service.TodoService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;

import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;

import com.example.springTest.dto.ResponseDTO;

@RestController
@RequestMapping("todo")
public class TodoController {
	
	@Autowired
	private TodoService service;

	@PostMapping
	public ResponseEntity<?> createTodo(@RequestBody TodoDTO dto){
		try {
			
			TodoEntity entity = TodoDTO.todoEntity(dto);
            //유저에게서 TodoDto를 요청바디로 넘겨받고 이를 TodoEntity로 변환한다.
			
            List<TodoEntity> entities = service.create(entity);
            //서비스에서 TodoEntity를 저장

			List<TodoDTO> dtos = entities.stream().map(TodoDTO::new).collect(Collectors.toList());
            //자바 스트림을 이용해 리턴된 엔티티 리스트를 TodoDTO 리스트로 변환.

			ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().data(dtos).build();
            //변환된 TodoDTO리스트를 이용해 ResponseDTO를 초기화한다.

			return ResponseEntity.ok().body(response);
            //ResponseDTO를 리턴한다.
            
            
		}catch (Exception e){
			String error = e.getMessage();
			ResponseDTO<TodoDTO> response = ResponseDTO.<TodoDTO>builder().error(error).build();
			return ResponseEntity.badRequest().body(response);
		}
	}


}
profile
https://github.com/nam-yeun-hwa
post-custom-banner

0개의 댓글