Project/Todo

[Spring Boot] Todo 서비스 구현 (3)

lakelight 2022. 7. 18. 19:04
728x90
반응형
투두를 완료했을 때 다르게 표시하기 위해서 투두의 상태를 추가하였습니다.

 

[TodoStatus.java]

package hooyn.todo.domain;

public enum TodoStatus {
    NOT_COMPLETE, ING, COMPLETE
}

 

[Todo.java]

//필드 추가

//데이터베이스에 저장될 때 String으로 저장되게 하기 위해서 EnumType.String으로 설정하였습니다.
@Enumerated(EnumType.STRING) 
private TodoStatus status;
//생성 메서드에서 status NOT_COMPLETE 상태로 설정하였습니다.

@Builder
private Todo(String title, String content, Deadline deadline){
    this.title = title;
    this.content = content;
    this.deadline = deadline;
    this.create_time = LocalDateTime.now();
    this.status = TodoStatus.NOT_COMPLETE;
}

 

[TodoService.java]

//투두 상태 변경 (완료 & 완료취소)
Long updateTodoStatus(Long todo_id);

 

[TodoServiceImpl.java]

/**
 * 투두 상태 변경 (완료 & 완료취소)
 */
@Override
@Transactional
public Long updateTodoStatus(Long todo_id) {
    Todo todo = todoRepository.findById(todo_id);

    TodoStatus status = todo.getStatus();

    if(status.equals(TodoStatus.NOT_COMPLETE)){
        todo.changeTodoStatus(TodoStatus.COMPLETE);
    } else if(status.equals(TodoStatus.COMPLETE)){
        todo.changeTodoStatus(TodoStatus.NOT_COMPLETE);
    }

    return todo.getId();
}

 

[TodoController.java]

/**
 * 투두 상태 변경
 */
@PutMapping("/todo/status")
public Response updateTodoStatus(@RequestBody UpdateTodoStatusRequest request){

    Member member = memberService.findUserByUUID(request.getUuid());

    if(member!=null){
        Long todo_id = todoService.updateTodoStatus(request.getTodo_id());

        log.info("투두 상태 변경 Success Code:200 " + now.getDate());
        return new Response(true, HttpStatus.OK.value(), todo_id, "투두 상태가 변경되었습니다.");
    } else {
        // 301 에러
        log.error("아이디 없음 Error Code:301 " + now.getDate());
        return new Response(false, HttpStatus.MOVED_PERMANENTLY.value(), null, "등록되지 않은 회원입니다.");
    }
}

 

키워드에 따른 투두 조회 시 키워드 포함 범위를 제목과 내용 모두로 변경하였습니다.

 

[TodoRepositoryImpl.java]

/**
 * content가 포함된 투두 조회
 */
@Override
public List<Todo> findByContent(String uuid, String content, Integer page) {
    return queryFactory
            .selectFrom(todo)
            .where(
                    (todo.content.like("%"+content+"%").or(todo.title.like("%"+content+"%")))
                            .and(todo.member.uuid.eq(UUID.fromString(uuid)))
            )
            .orderBy(todo.create_time.desc())
            .offset(0+((page-1)*10))
            .limit(10)
            .fetch();
}

 

팀프로젝트 : Todo Code Github

 

GitHub - hooyn/Todo: [팀프로젝트] Todo App 서버 API

[팀프로젝트] Todo App 서버 API. Contribute to hooyn/Todo development by creating an account on GitHub.

github.com

 

728x90
반응형