본문 바로가기
Side Project/To do List API

컨트롤러 구현

by BellOne4222 2024. 2. 3.

 

컨트롤러 구현

 

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