Skip to content

Commit

Permalink
Merge pull request #39 from Kusitms-POPTATO-DEV/feat/get-yesterdays
Browse files Browse the repository at this point in the history
Feat#34: 어제 한 일 조회 기능 구현
  • Loading branch information
yeonjookang authored Oct 17, 2024
2 parents 5c20668 + 07547da commit 9f00104
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 19 deletions.
11 changes: 10 additions & 1 deletion src/main/java/server/poptato/todo/api/TodoController.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import server.poptato.todo.application.TodoService;
import server.poptato.todo.application.response.BacklogListResponseDto;
import server.poptato.todo.application.response.PaginatedHistoryResponseDto;
import server.poptato.todo.application.response.PaginatedYesterdayResponseDto;
import server.poptato.todo.application.response.TodayListResponseDto;
import server.poptato.todo.application.response.TodoDetailResponseDto;
import server.poptato.user.resolver.UserId;
Expand Down Expand Up @@ -61,7 +62,6 @@ public BaseResponse<PaginatedHistoryResponseDto> getHistories(
@UserId Long userId,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "15") int size) {
System.out.println(userId);
PaginatedHistoryResponseDto response = todoService.getHistories(userId, page, size);

return new BaseResponse<>(response);
Expand All @@ -72,6 +72,15 @@ public BaseResponse dragAndDrop(@UserId Long userId,
todoService.dragAndDrop(userId, dragAndDropRequestDto);
return new BaseResponse<>();
}
@GetMapping("/yesterdays")
public BaseResponse<PaginatedYesterdayResponseDto> getYesterdays(
@UserId Long userId,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "15") int size) {

PaginatedYesterdayResponseDto response = todoService.getYesterdays(userId, page, size);
return new BaseResponse<>(response);
}

@PostMapping("/backlog")
public BaseResponse generateBacklog(@UserId Long userId,
Expand Down
34 changes: 23 additions & 11 deletions src/main/java/server/poptato/todo/application/TodoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,29 @@ else if(todo.getType().equals(Type.YESTERDAY) || todo.getType().equals(Type.BACK
swipeBacklogToToday(todo);
}
}
public void dragAndDrop(Long userId, DragAndDropRequestDto requestDto) {
checkIsExistUser(userId);
List<Todo> todos = getTodos(requestDto);
checkIsValidToDragAndDrop(userId,todos,requestDto);
if (requestDto.getType().equals(Type.TODAY)) {
reassignTodayOrder(todos, requestDto.getTodoIds());
} else if (requestDto.getType().equals(Type.BACKLOG)) {
reassignBacklogOrder(todos, requestDto.getTodoIds());
}
}
public PaginatedYesterdayResponseDto getYesterdays(Long userId, int page, int size) {
Pageable pageable = PageRequest.of(page, size);
Page<Todo> todosPage = todoRepository.findByUserIdAndTypeAndTodayStatus(userId, Type.YESTERDAY, TodayStatus.INCOMPLETE, pageable);

List<YesterdayResponseDto> yesterdays = todosPage.getContent().stream()
.map(todo -> new YesterdayResponseDto(
todo.getId(),
todo.getContent()
))
.collect(Collectors.toList());

return new PaginatedYesterdayResponseDto(yesterdays, todosPage.getTotalPages());
}

private void swipeBacklogToToday(Todo todo) {
Integer maxTodayOrder = todoRepository.findMaxTodayOrderByUserIdOrZero(todo.getUserId());
Expand All @@ -143,17 +166,6 @@ private void swipeTodayToBacklog(Todo todo) {
todo.changeToBacklog(maxBacklogOrder);
}

public void dragAndDrop(Long userId, DragAndDropRequestDto requestDto) {
checkIsExistUser(userId);
List<Todo> todos = getTodos(requestDto);
checkIsValidToDragAndDrop(userId,todos,requestDto);
if (requestDto.getType().equals(Type.TODAY)) {
reassignTodayOrder(todos, requestDto.getTodoIds());
} else if (requestDto.getType().equals(Type.BACKLOG)) {
reassignBacklogOrder(todos, requestDto.getTodoIds());
}
}

private List<Todo> getTodos(DragAndDropRequestDto requestDto) {
List<Todo> todos = new ArrayList<>();
for(Long todoId: requestDto.getTodoIds()){
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package server.poptato.todo.application.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

import java.util.List;

@Getter
@Builder
@AllArgsConstructor
public class PaginatedYesterdayResponseDto {
private List<YesterdayResponseDto> yesterdays;
private int totalPageCount;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package server.poptato.todo.application.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
@AllArgsConstructor
public class YesterdayResponseDto {
private Long todoId;
private String content;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import server.poptato.todo.domain.entity.Todo;
import server.poptato.todo.domain.value.TodayStatus;
import server.poptato.todo.domain.value.Type;
Expand All @@ -29,4 +28,5 @@ List<Todo> findByUserIdAndTypeAndTodayDateAndTodayStatusOrderByCompletedDateTime
List<Todo> findByIdIn(List<Long> ids);
int findMaxBacklogOrderByIdIn(List<Long> ids);
int findMaxTodayOrderByIdIn(List<Long> ids);
Page<Todo> findByUserIdAndTypeAndTodayStatus(Long userId, Type type, TodayStatus todayStatus, Pageable pageable);
}
22 changes: 21 additions & 1 deletion src/test/java/server/poptato/todo/api/TodoControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,6 @@ public void shouldReturnOk_WhenIsBookmarkToggled() throws Exception {
.andExpect(status().isOk())
.andDo(print());
}

@DisplayName("백로그 생성 요청 바디에 content가 없거나 비어있으면 Validator가 잡는다.")
@Test
void 백로그_생성_요청바디_예외(){
Expand Down Expand Up @@ -313,4 +312,25 @@ public void shouldReturnOk_WhenIsBookmarkToggled() throws Exception {
.andExpect(status().isOk())
.andDo(print());
}

@DisplayName("어제 한 일 조회 시 Query String에 기본값이 적용되고, JWT로 사용자 아이디를 조회한다.")
@Test
void 어제한일_쿼리스트링_기본값() throws Exception {
// when
mockMvc.perform(get("/yesterdays")
.header("Authorization", "Bearer "+accessToken)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(print());
}
@DisplayName("어제 한 일 조회 시 헤더에 JWT가 없으면 예외가 발생한다.")
@Test
void 어제한일_JWT_예외() throws Exception {
// when
mockMvc.perform(get("/yesterdays")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isBadRequest()) // JWT가 없으므로 400 Bad Request 응답
.andDo(print());

}
}
26 changes: 21 additions & 5 deletions src/test/java/server/poptato/todo/application/TodoServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import server.poptato.todo.api.request.DragAndDropRequestDto;
import server.poptato.todo.application.response.PaginatedHistoryResponseDto;
import server.poptato.todo.application.response.TodayListResponseDto;
import server.poptato.todo.application.response.TodayResponseDto;
import server.poptato.todo.application.response.TodoDetailResponseDto;
import server.poptato.todo.domain.repository.TodoRepository;
import server.poptato.todo.application.response.*;
import server.poptato.todo.domain.entity.Todo;
import server.poptato.todo.domain.repository.TodoRepository;
import server.poptato.todo.domain.value.TodayStatus;
import server.poptato.todo.domain.value.Type;
import server.poptato.todo.exception.TodoException;
Expand Down Expand Up @@ -351,6 +348,25 @@ void getHistories_ShouldReturnPagedResult() {
assertThat(result.getTotalPageCount()).isGreaterThan(0);
}

@Test
@DisplayName("YESTERDAY 타입과 INCOMPLETE 상태인 todo 목록을 페이징 처리하여 가져온다")
void getYesterdays_ShouldReturnPagedResult() {
// given
Long userId = 1L;
int page = 0;
int size = 5; // 한번에 5개의 todo 가져오기


// when
PaginatedYesterdayResponseDto result = todoService.getYesterdays(userId, page, size);

// then
assertThat(result.getYesterdays()).hasSizeLessThanOrEqualTo(size); // 페이징 크기만큼 가져옴
assertThat(result.getTotalPageCount()).isGreaterThan(0); // 총 페이지 수가 0보다 큼
assertThat(result.getYesterdays().get(0).getTodoId()).isNotNull(); // 첫 번째 todo의 ID가 null이 아님
assertThat(result.getYesterdays().get(0).getContent()).isNotNull(); // 첫 번째 todo의 내용이 null이 아님
}

@DisplayName("할 일 상세조회 시 성공한다.")
@Test
void 할일_상세조회_성공(){
Expand Down

0 comments on commit 9f00104

Please sign in to comment.