Spring Todo-List 4 특정 리스트 할 일만 보기

춤인형의 개발일지·2024년 12월 30일

Spring실습

목록 보기
17/40

24/12/28(토)

Todo - list 추가기능

특정 리스트의 할 일만 보기 1

리스트 따로 할 일 따로 조회

//response
    {
        "id": 2,
        "content": "빨래하기"
    },
    {
        "id": 3,
        "content": "청소기 돌리기"
    }
]
// Request
    - `GET` `/todos`
    - Query params
        - `titleId`
    -: `localhost:8080/todos?titleId=3`

method가 Get인데, 여러개를 이미 받고 있으니까 RequestParams으로 받아 들어오는 값에 따라 다르게 호출해야한다.

//controller
@GetMapping("/todos")
    public List<TodoResponse> getComplete(@RequestParam(required = false) Boolean isCompleted, Long todoTitleId) {
        return todoService.read(isCompleted,todoTitleId);
    }

read함수에 todoTitleId까지 같이 입력받아야한다.

//service
public List<TodoResponse> read(Boolean isCompleted, Long todoTitleId) {
        if(isCompleted == null && todoTitleId == null){
            return readAll();
        }
        if(todoTitleId == null){
            return readComplete(isCompleted);
        }
        else return readContentInTitle(todoTitleId);

    }

기존에 있던 read함수에 todoTitleId를 input으로 받아줘야한다. 그럼 생각할게 3가지가 된다.

  • isCompleted, todoTitleId 둘다 호출되지 않았을 때
    이때는 그냥 전체 할 일을 조회한다는 거니까 readAll함수를 호출한다.
  • isCompleted가 호출될 때
    isCompleted이게 호출이 된다는건, todoTitleId이 호출되지 않았다는 의미이기 때문에 todoTitleId가 null값이 되어야 한다. isColmpleted함수가 호출되면 readComplete인 완료 미완료의 상태를 읽어주는 함수를 호출한다.
  • todoTitleId가 호출될때
    새로운 함수를 실행한다. 제목에 있는 내용을 읽어오는 함수를 호출한다.
//service
private List<TodoResponse> readContentInTitle(Long todoTitleId) {
        List<Todo> byTodoTitleId = todoRepository.findByTodoTitleId(todoTitleId);
        return byTodoTitleId.stream().map(content->new TodoResponse(content.getContent(), content.getId())).toList();
    }
  1. 여러개의 content들을 output으로 내야하니까 List형식으로 return함수를 내준다.
  2. todoTitleId 를 찾아 할 일들의 목록을 반환해주는 JPA쿼리메서드를 만든 다음에 사용한다.
List<Todo> findByTodoTitleId(Long todoTitleId);
  1. byTodoTitleId 는 현재 할 일들의 목록이 들어있다. 그러면 내가 응답받고싶은 todoResponse의 형태로 만들어서 반환해준다.

해당 결과처럼 나오게 된다.


😐 느낀점

id는 항상 잘봐야한다. 왜냐면 id값으로 모든 데이터를 판별하기 때문에, id는 중요한 요소가 된다.

0개의 댓글