20240103 (수) TodoApp 스텝3

2024. 1. 3. 20:53TIL

어제 작성한 글을 가져와 오늘 내가 작성한 코드를 적어놓겠다.

 

1번 오름차순 내림차순 정렬

 

나는 할일 카드와 할일 리스트 패키지를 분리해놨는데, 작성 날짜를 할일 카드쪽에 적용해놨다.

우선 할일 리스트쪽에도 작성날짜가 적용되도록 손보고(카드쪽 작성날짜는 그대로 둘지 없앨지 고민중)

작성날짜 기준으로 오름차순 내림차순 적용하는건 sortedArray(작성날짜)를 이용하면 쉬울것 같다.

 

override fun getAllTodoCardList(order: String?, name: String?): List<TodoCardResponse> {
    val todoCardList = todoCardRepository.findAll().map { it.toResponse() }
    if (order == null || order == "ASC") {
        todoCardList.sortedBy { it.date }
    } else if (order == "DESC") {
        todoCardList.sortedByDescending { it.date }
    }
    if (name != null) {
        return todoCardList.filter { it.user == name }
    }
    return todoCardList
}

 

할일 목록 이라길래 할일 리스트패키지에 만들어야 하나 고민했지만 미리보기에서 보면 내가 만든 할일 카드 부분이 할일 목록 부분이길래 할일 카드 쪽에다가 기능을 추가했다.

널값이 들어가면 기본적으로 오름차순 정렬이고

DESC 를 넣으면 내림차순 정렬이 된다.

 

2번 할일목록 api에 작성자 기준으로 필터링

 

이는 할일 목록을 불러올때 작성자 이름을 인자로 받고 같은 이름을 가진 할일들을 쭈욱 가져오면 될것 같다.

 

이 부분은 위쪽 코드에서 확인할수 있다.

이름 적은곳이 널값이 되면 필터링을 하지 않은채로 반환하고,

이름을 적어놨다면 그 이름에 맞는 할일 카드를 불러온다.

 

3번 작성 수정에 글자 제한 걸기

 

이것도 if문을 사용하면 될것 같고 크게 어려워보이진 않는다. dto쪽도 손보면 좋을것 같다.

기능실패도 Exception을 따로 만들어두면 될것 같다.

 

@Transactional
override fun addTodo(todoCardId: Long, request: AddTodoRequest): TodoResponse {
    val todoCard = todoCardRepository.findByIdOrNull(todoCardId)
        ?: throw ModelNotFoundException("TodoCard", todoCardId)
    val todo = Todo(
        todoTitle = request.todoTitle,
        todoDescription = request.todoDescription
    )
    if (todo.countTitle()) {
        throw IncorrectNumberOfCharactersException(1, todo.maxTitle)
    }
    if (todo.countDescription()) {
        throw IncorrectNumberOfCharactersException(1, todo.maxDescription)
    }
    todoCard.addTodo(todo)
    todoCardRepository.save(todoCard)
    return todo.toResponse()
}

@Transactional
override fun updateTodo(
    todoCardId: Long,
    todoId: Long,
    request: UpdateTodoRequest
): TodoResponse {

    val todo = todoRepository.findByIdOrNull(todoId)
        ?: throw ModelNotFoundException("Todo", todoId)

    val (todoTitle, todoDescription) = request
    todo.todoTitle = todoTitle
    todo.todoDescription = todoDescription

    if (todo.countTitle()) {
        throw IncorrectNumberOfCharactersException(1, todo.maxTitle)
    }
    if (todo.countDescription()) {
        throw IncorrectNumberOfCharactersException(1, todo.maxDescription)
    }
    return todoRepository.save(todo).toResponse()
}

 

작성 메소드와 수정 메소드에 적용해줬고, 만약 글자수가 맞지않으면 IncorrectNumberOfCharactersException 을 반환한다.

 

오늘의 한마디 : 구현자체는 쉽지만 어떤방식으로 구현할지 고민하는게 상당히 오래걸렸다. 이처럼 과제의 의도를 파악하는게 중요한것 같다.

'TIL' 카테고리의 다른 글

20240108 (월) 뉴스피드 프로젝트  (3) 2024.01.08
20240104 (목) 코딩일지  (2) 2024.01.04
20240102 (화) TodoApp 2차 과제물 코딩  (2) 2024.01.02
20231229 (금) 금요일TIL  (1) 2023.12.29
20231228 (목) TodoApp 완성  (1) 2023.12.28