package todolist.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import todolist.dto.TodoRequest;
import todolist.dto.TodoResponse;
import todolist.service.TodoService;
@RestController
@RequestMapping("/api/todo")
@RequiredArgsConstructor
public class TodoController {
private final TodoService todoService;
// 생성
@PostMapping
public ResponseEntity<?> create(@RequestBody TodoRequest request) {
System.out.println("CREATE");
TodoResponse response = todoService.create(request);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
// 수정
@PatchMapping("/{id}")
public ResponseEntity<?> update(
@PathVariable Long id,
@RequestBody TodoRequest request
) {
System.out.println("UPDATE");
TodoResponse response = todoService.update(id, request);
return ResponseEntity.ok(response);
}
// 삭제
@DeleteMapping("/{id}")
public ResponseEntity<?> delete(@PathVariable Long id) {
System.out.println("DELETE");
todoService.delete(id);
return ResponseEntity
.status(HttpStatus.NO_CONTENT)
.build();
}
// 조회
@GetMapping("/{id}")
public ResponseEntity<?> get(@PathVariable Long id) {
System.out.println("READ ONE");
TodoResponse response = todoService.get(id);
return ResponseEntity.ok(response);
}
// 전체 조회
@GetMapping
public ResponseEntity<?> getAll(@PageableDefault(size = 10) Pageable pageable) {
System.out.println("READ ALL");
Page<TodoResponse> responses = todoService.getAll(pageable);
return ResponseEntity.ok(responses);
}
}
다음과 같이 TodoListApplication 의 main 메서드를 작성한다.
package todolist;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TodoListApplication {
public static void main(String[] args) {
SpringApplication.run(TodoListApplication.class, args);
}
}
처음에는 아래와 같이 서버 실행에 실패했다.
build.gradle 파일에서 다음과 같이 h2 데이터베이스를 추가하고 다시 실행하니 성공!
runtimeOnly 'com.h2database:h2'
// runtimeOnly 'mysql:mysql-connector-java'
추후 작성