diff --git a/src/main/java/app/nook/focus/converter/FocusConverter.java b/src/main/java/app/nook/focus/converter/FocusConverter.java index ce5cd5c..bff4d08 100644 --- a/src/main/java/app/nook/focus/converter/FocusConverter.java +++ b/src/main/java/app/nook/focus/converter/FocusConverter.java @@ -3,6 +3,7 @@ import app.nook.focus.domain.Focus; import app.nook.focus.domain.Theme; import app.nook.focus.dto.FocusResponseDto; +import app.nook.library.util.FocusTimeUtil; import java.util.List; @@ -40,7 +41,7 @@ public static FocusResponseDto.FocusEnd toFocusEndResponse(Focus focus) { focus.getStartedAt(), focus.getEndedAt(), focus.getDurationSec(), - formatDuration(focus.getDurationSec()), + FocusTimeUtil.formatFocusTime(focus.getDurationSec() == null ? 0 : focus.getDurationSec()), focus.getLibrary().getPage(), focus.getLibrary().getFocusSec(), focus.getLibrary().getReadingStatus().name() @@ -50,27 +51,13 @@ public static FocusResponseDto.FocusEnd toFocusEndResponse(Focus focus) { public static FocusResponseDto.RecentFocusItem toRecentFocusItem(Focus focus, String coverImageUrl) { return new FocusResponseDto.RecentFocusItem( focus.getId(), - focus.getLibrary().getId(), focus.getLibrary().getBook().getId(), focus.getLibrary().getBook().getTitle(), focus.getLibrary().getBook().getAuthor(), coverImageUrl, focus.getStartedAt(), focus.getEndedAt(), - focus.getDurationSec(), - formatDuration(focus.getDurationSec()) + FocusTimeUtil.formatFocusTime(focus.getDurationSec() == null ? 0 : focus.getDurationSec()) ); } - - private static String formatDuration(Integer totalSec) { - if (totalSec == null) { - return "00:00:00"; - } - - int hour = totalSec / 3600; - int minute = (totalSec % 3600) / 60; - int second = totalSec % 60; - - return String.format("%02d:%02d:%02d", hour, minute, second); - } } diff --git a/src/main/java/app/nook/focus/dto/FocusResponseDto.java b/src/main/java/app/nook/focus/dto/FocusResponseDto.java index e6ee40c..4e57ea0 100644 --- a/src/main/java/app/nook/focus/dto/FocusResponseDto.java +++ b/src/main/java/app/nook/focus/dto/FocusResponseDto.java @@ -41,14 +41,12 @@ public record FocusEnd( public record RecentFocusItem( Long focusId, - Long libraryId, Long bookId, String bookTitle, String author, String coverImageUrl, LocalDateTime startedAt, LocalDateTime endedAt, - Integer durationSec, String durationText ) {} } diff --git a/src/test/java/app/nook/controller/focus/FocusControllerTest.java b/src/test/java/app/nook/controller/focus/FocusControllerTest.java index 8dc0668..22eebc3 100644 --- a/src/test/java/app/nook/controller/focus/FocusControllerTest.java +++ b/src/test/java/app/nook/controller/focus/FocusControllerTest.java @@ -228,14 +228,12 @@ class GetRecentFocuses { List.of( new FocusResponseDto.RecentFocusItem( 100L, - 10L, 20L, "첫사랑의 침공", "권혁일", "https://cdn.nook.com/covers/book.jpg", LocalDateTime.of(2026, 3, 22, 14, 0, 0), LocalDateTime.of(2026, 3, 22, 14, 34, 26), - 2066, "00:34:26" ) ), @@ -262,14 +260,12 @@ class GetRecentFocuses { ApiResponseSnippet.withResult( fieldWithPath("result.items[]").type(ARRAY).description("포커스 목록"), fieldWithPath("result.items[].focusId").type(NUMBER).description("포커스 ID"), - fieldWithPath("result.items[].libraryId").type(NUMBER).description("서재 ID"), fieldWithPath("result.items[].bookId").type(NUMBER).description("책 ID"), fieldWithPath("result.items[].bookTitle").type(STRING).description("책 제목"), fieldWithPath("result.items[].author").type(STRING).description("저자"), fieldWithPath("result.items[].coverImageUrl").type(STRING).description("책 커버 이미지 URL"), fieldWithPath("result.items[].startedAt").type(STRING).description("포커스 시작 시각"), fieldWithPath("result.items[].endedAt").type(STRING).description("포커스 종료 시각"), - fieldWithPath("result.items[].durationSec").type(NUMBER).description("집중 시간(초)"), fieldWithPath("result.items[].durationText").type(STRING).description("집중 시간(HH:mm:ss)"), fieldWithPath("result.nextCursor").type(NUMBER).optional().description("다음 커서 (다음 페이지 없으면 null)"), fieldWithPath("result.hasNext").type(BOOLEAN).description("다음 페이지 존재 여부") diff --git a/src/test/java/app/nook/focus/service/FocusQueryServiceTest.java b/src/test/java/app/nook/focus/service/FocusQueryServiceTest.java index 68d848e..fec7a1c 100644 --- a/src/test/java/app/nook/focus/service/FocusQueryServiceTest.java +++ b/src/test/java/app/nook/focus/service/FocusQueryServiceTest.java @@ -80,10 +80,8 @@ class GetRecentFocuses { FocusResponseDto.RecentFocusItem item = result.getItems().get(0); assertThat(item.focusId()).isEqualTo(completedFocus.getId()); - assertThat(item.libraryId()).isEqualTo(library.getId()); assertThat(item.bookId()).isEqualTo(library.getBook().getId()); assertThat(item.coverImageUrl()).isEqualTo("https://cdn.nook.com/covers/book.jpg"); - assertThat(item.durationSec()).isEqualTo(2066); assertThat(item.durationText()).isEqualTo("00:34:26"); }