https://github.com/sjh4172/Todo
| Method | EndPoint | Request | Response |
|---|---|---|---|
| POST | http://localhost:8080/ | { “title” : “운동하기”, “todoOrder” : 1, “completed” : false } | { "id": 1, "title": "운동하기", "todoOrder": 1, "completed": false, } |
| GET | http://localhost:8080/ | [ { "id": 1, "title": "운동하기", "todoOrder": 1, "completed": false, }, { "id": 2, "title": "공부하기", "todoOrder": 2, "completed": false, } ] | |
| GET | http://localhost:8080/{id} | { "id": 1, "title": "운동하기", "todoOrder": 1, "completed": false, } | |
| PATCH | http://localhost:8080/{id} | { “title” : “운동하기”, “todoOrder” : 1, “completed” : true } | { "id": 1, "title": "운동하기", "todoOrder": 1, "completed": false, } |
| DELETE | http://localhost:8080/ | ||
| DELETE | http://localhost:8080/{id} |
@RestController
@Validated
@RequestMapping("/todo")
public class TodoController {
private final TodoService todoService;
private final TodoMapper mapper;
public TodoController(TodoService todoService, TodoMapper mapper) {
this.todoService = todoService;
this.mapper = mapper;
}
@PostMapping
public ResponseEntity postTodo (@RequestBody TodoDto.Post requestBody) {
Todo todo = mapper.todoPostDtoToTodo(requestBody);
Todo response = todoService.createTodo(todo);
return new ResponseEntity(mapper.todoToTodoResponseDto(response), HttpStatus.CREATED);
}
@PatchMapping("/{id}")
public ResponseEntity patchTodo(@PathVariable("id") long id,
@Valid @RequestBody TodoDto.Patch requestBody) {
requestBody.setTodoId(id);
Todo todo = mapper.todoPatchDtoToTodo(requestBody);
Todo response = todoService.updateTodo(todo);
return new ResponseEntity(mapper.todoToTodoResponseDto(response), HttpStatus.OK);
}
@GetMapping("/{id}")
public ResponseEntity getTodo(@PathVariable("id") long id){
Todo response = todoService.findTodo(id);
return new ResponseEntity(mapper.todoToTodoResponseDto(response), HttpStatus.OK);
}
@GetMapping
public ResponseEntity getTodos() {
return new ResponseEntity(todoService.findAll(), HttpStatus.OK);
}
@DeleteMapping("/{id}")
public ResponseEntity deleteTodo(@PathVariable("id") long id) {
todoService.deleteTodo(id);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@DeleteMapping
public void deleteTodos() {
}
}
@Service
public class TodoService {
private final TodoRepository todoRepository;
public TodoService(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
public Todo createTodo(Todo todo) {
return todoRepository.save(todo);
};
public Todo updateTodo(Todo todo) {
Todo findTodo = findTodo(todo.getTodoId());
findTodo.setTitle(todo.getTitle());
findTodo.setTodoOrder(todo.getTodoOrder());
findTodo.setCompleted(todo.isCompleted());
return todoRepository.save(findTodo);
}
public Todo findTodo(long todoId) {
Todo todo = todoRepository.findById(todoId)
.orElseThrow(() -> new BusinessLogicException(ExceptionCode.TODO_NOT_FOUND));
return todo;
}
public List<Todo> findAll() {
return todoRepository.findAll();
}
public void deleteTodo(long todoId) {
Todo todo = todoRepository.findById(todoId)
.orElseThrow(() -> new BusinessLogicException(ExceptionCode.TODO_NOT_FOUND));
todoRepository.delete(todo);
}
public void deleteTodos() {
}
}
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Todo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long todoId;
@Column
private String title;
@Column
private int todoOrder;
@Column
private boolean completed;
}
public class TodoDto {
@Getter
@NoArgsConstructor
public static class Post{
@NotBlank
private String title;
@NotBlank
private int todoOrder;
@NotBlank
private boolean completed;
}
@Getter
@Setter
@NoArgsConstructor
public static class Patch{
private long todoId;
private String title;
private int todoOrder;
private boolean completed;
}
@Getter
@Setter
@NoArgsConstructor
public static class Get {
private long todoId;
private String title;
private int todoOrder;
private boolean completed;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public static class TodoResponse {
private long todoId;
private String title;
private int todoOrder;
private boolean completed;
}
}
public interface TodoRepository extends JpaRepository<Todo, Long>{
}




