컨트롤러 구현
package com.example.controller;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.model.TodoEntity;
import com.example.model.TodoRequest;
import com.example.model.TodoResponse;
import com.example.service.TodoService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@CrossOrigin
@AllArgsConstructor
@RestController
@RequestMapping("/")
public class TodoController {
private final TodoService todoService;
// 1. Todo 아이템을 생성하는 메서드
@PostMapping
public ResponseEntity<TodoResponse> create(@RequestBody TodoRequest request) {
log.info("CREATE");
// 요청된 Todo 아이템이 유효한지 검사
if (ObjectUtils.isEmpty(request.getTitle()))
return ResponseEntity.badRequest().build();
// 필수 파라미터들이 비어있을 경우 기본값으로 설정
if (ObjectUtils.isEmpty(request.getOrder()))
request.setOrder(0L);
if (ObjectUtils.isEmpty(request.getCompleted()))
request.setCompleted(false);
// TodoService를 통해 Todo 아이템 생성하고, 생성된 결과를 ResponseEntity로 반환
TodoEntity result = this.todoService.add(request);
return ResponseEntity.ok(new TodoResponse(result));
}
// 2. 모든 Todo 아이템을 조회하는 메서드
@GetMapping
public ResponseEntity<List<TodoResponse>> readAll() {
log.info("READ ALL");
// TodoService를 통해 모든 Todo 아이템을 조회하고, 조회된 결과를 ResponseEntity로 반환
List<TodoEntity> result = this.todoService.searchAll();
List<TodoResponse> response = result.stream().map(TodoResponse::new).collect(Collectors.toList());
return ResponseEntity.ok(response);
}
// 3. 특정 id에 해당하는 Todo 아이템을 조회하는 메서드
@GetMapping("{id}")
public ResponseEntity<TodoResponse> readOne(@PathVariable Long id) {
log.info("READ");
// TodoService를 통해 특정 id에 해당하는 Todo 아이템을 조회하고, 조회된 결과를 ResponseEntity로 반환
TodoEntity result = this.todoService.searchById(id);
return ResponseEntity.ok(new TodoResponse(result));
}
// 4. 특정 id에 해당하는 Todo 아이템을 업데이트하는 메서드
@PatchMapping("{id}")
public ResponseEntity<TodoResponse> update(@PathVariable Long id, @RequestBody TodoRequest request) {
log.info("UPDATE");
// TodoService를 통해 특정 id에 해당하는 Todo 아이템을 업데이트하고, 업데이트된 결과를 ResponseEntity로 반환
TodoEntity result = this.todoService.updateById(id, request);
return ResponseEntity.ok(new TodoResponse(result));
}
// 5. 모든 Todo 아이템을 삭제하는 메서드
@DeleteMapping
public ResponseEntity<?> deleteAll() {
log.info("DELETE ALL");
// TodoService를 통해 모든 Todo 아이템을 삭제하고, 삭제 결과를 ResponseEntity로 반환
this.todoService.deleteAll();
return ResponseEntity.ok().build();
}
// 6. 특정 id에 해당하는 Todo 아이템을 삭제하는 메서드
@DeleteMapping("{id}")
public ResponseEntity<?> deleteOne(@PathVariable Long id) {
log.info("DELETE");
// TodoService를 통해 특정 id에 해당하는 Todo 아이템을 삭제하고, 삭제 결과를 ResponseEntity로 반환
this.todoService.deleteById(id);
return ResponseEntity.ok().build();
}
}
POSTMAN TEST
- POST
- GET
- DELETE
'Side Project > To do List API' 카테고리의 다른 글
TodoService 테스트 코드 (0) | 2024.02.03 |
---|---|
Front Test (0) | 2024.02.03 |
서비스 코드 구현 (0) | 2024.02.03 |
repository 구현 (0) | 2024.02.02 |
모델 구현 (0) | 2024.02.02 |