From 87350f90180ef8255582ec53c67301099c04c737 Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Sat, 16 Aug 2025 18:19:58 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=BD=80=EB=AA=A8=EB=8F=84?= =?UTF-8?q?=EB=A1=9C=20=EC=B4=9D=20=EC=A7=91=EC=A4=91=20=EC=8B=9C=EA=B0=84?= =?UTF-8?q?=20=EC=B4=88=EB=8B=A8=EC=9C=84=EB=A1=9C=20=EB=B3=80=EA=B2=BD(#6?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: CreateStudyLogRequest 총 집중 시간 필드 초단위로 변경 * refactor: PomodoroService.updateTotalFocusTime() 메서드 리팩토링 * test: PomodoroService 단위 테스트 총 학습시간 업데이트 테스트 리팩토링 --- .../application/service/PomodoroService.java | 5 ++--- .../dto/request/CreatePomodoroRequest.java | 7 +++++-- .../application/facade/StudyLogFacade.java | 2 +- .../dto/request/CreateStudyLogRequest.java | 4 ++-- .../service/PomodoroServiceTest.java | 19 +++++++++---------- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/ject/studytrip/pomodoro/application/service/PomodoroService.java b/src/main/java/com/ject/studytrip/pomodoro/application/service/PomodoroService.java index 2d11c0d..01a00cb 100644 --- a/src/main/java/com/ject/studytrip/pomodoro/application/service/PomodoroService.java +++ b/src/main/java/com/ject/studytrip/pomodoro/application/service/PomodoroService.java @@ -40,8 +40,8 @@ public Pomodoro getValidPomodoroByDailyGoal(Long dailyGoalId) { return pomodoro; } - public void updateTotalFocusTime(Long dailyGoalId, int totalFocusTimeInMinutes) { - PomodoroPolicy.validateTotalFocusTimeNotNegative(totalFocusTimeInMinutes); + public void updateTotalFocusTime(Long dailyGoalId, int totalFocusTimeInSeconds) { + PomodoroPolicy.validateTotalFocusTimeNotNegative(totalFocusTimeInSeconds); Pomodoro pomodoro = pomodoroRepository @@ -50,7 +50,6 @@ public void updateTotalFocusTime(Long dailyGoalId, int totalFocusTimeInMinutes) () -> new CustomException(PomodoroErrorCode.POMODORO_NOT_FOUND)); PomodoroPolicy.validateNotDeleted(pomodoro); - int totalFocusTimeInSeconds = totalFocusTimeInMinutes * 60; pomodoro.updateTotalFocusTimeInSeconds(totalFocusTimeInSeconds); } } diff --git a/src/main/java/com/ject/studytrip/pomodoro/presentation/dto/request/CreatePomodoroRequest.java b/src/main/java/com/ject/studytrip/pomodoro/presentation/dto/request/CreatePomodoroRequest.java index fd53db7..92add8f 100644 --- a/src/main/java/com/ject/studytrip/pomodoro/presentation/dto/request/CreatePomodoroRequest.java +++ b/src/main/java/com/ject/studytrip/pomodoro/presentation/dto/request/CreatePomodoroRequest.java @@ -1,7 +1,10 @@ package com.ject.studytrip.pomodoro.presentation.dto.request; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; public record CreatePomodoroRequest( - @Min(value = 1, message = "뽀모도로 최소 집중 시간은 1분입니다.") int focusDurationInMinute, - @Min(value = 1, message = "뽀모도로 최소 집중 세션 개수는 1개입니다.") int focusSessionCount) {} + @Schema(description = "집중 시간(분)") @Min(value = 1, message = "뽀모도로 최소 집중 시간은 1분입니다.") + int focusDurationInMinute, + @Schema(description = "집중 세션 개수") @Min(value = 1, message = "뽀모도로 최소 집중 세션 개수는 1개입니다.") + int focusSessionCount) {} diff --git a/src/main/java/com/ject/studytrip/studylog/application/facade/StudyLogFacade.java b/src/main/java/com/ject/studytrip/studylog/application/facade/StudyLogFacade.java index 2e01f68..2a637e8 100644 --- a/src/main/java/com/ject/studytrip/studylog/application/facade/StudyLogFacade.java +++ b/src/main/java/com/ject/studytrip/studylog/application/facade/StudyLogFacade.java @@ -48,7 +48,7 @@ public StudyLogInfo createStudyLog( studyLogService.createStudyLog(trip.getMember(), dailyGoal, request.content()); // 3. 뽀모도로 총 학습시간 업데이트 - pomodoroService.updateTotalFocusTime(dailyGoalId, request.totalFocusTimeInMinutes()); + pomodoroService.updateTotalFocusTime(dailyGoalId, request.totalFocusTimeInSeconds()); // 4. 연관 데이터 생성 및 미션 완료 처리 createStudyLogDailyMissionsAndCompleteMissions(studyLog, selectedDailyMissions); diff --git a/src/main/java/com/ject/studytrip/studylog/presentation/dto/request/CreateStudyLogRequest.java b/src/main/java/com/ject/studytrip/studylog/presentation/dto/request/CreateStudyLogRequest.java index a085066..b11fcc1 100644 --- a/src/main/java/com/ject/studytrip/studylog/presentation/dto/request/CreateStudyLogRequest.java +++ b/src/main/java/com/ject/studytrip/studylog/presentation/dto/request/CreateStudyLogRequest.java @@ -6,8 +6,8 @@ import java.util.List; public record CreateStudyLogRequest( - @Schema(description = "뽀모도로 총 집중시간(분)") @Min(value = 0, message = "총 집중시간(분)은 음수일 수 없습니다.") - int totalFocusTimeInMinutes, + @Schema(description = "뽀모도로 총 집중시간(초)") @Min(value = 0, message = "총 집중시간(초)은 음수일 수 없습니다.") + int totalFocusTimeInSeconds, @Schema(description = "선택한 데일리 미션 ID 목록") @NotEmpty(message = "학습로그를 작성할 데일리 미션 목록은 필수 요청 값입니다.") List selectedDailyMissionIds, diff --git a/src/test/java/com/ject/studytrip/pomodoro/application/service/PomodoroServiceTest.java b/src/test/java/com/ject/studytrip/pomodoro/application/service/PomodoroServiceTest.java index 80cf3c0..2c1e5a3 100644 --- a/src/test/java/com/ject/studytrip/pomodoro/application/service/PomodoroServiceTest.java +++ b/src/test/java/com/ject/studytrip/pomodoro/application/service/PomodoroServiceTest.java @@ -135,29 +135,28 @@ class UpdateTotalFocusTime { @DisplayName("유효한 데일리 목표 ID와 총 학습시간으로 뽀모도로의 총 학습시간을 업데이트한다") void shouldUpdateTotalFocusTime() { // given - int totalFocusTimeInMinutes = 120; + int totalFocusTimeInSeconds = 120; given(pomodoroRepository.findByDailyGoalId(dailyGoal.getId())) .willReturn(Optional.of(pomodoro)); // when - pomodoroService.updateTotalFocusTime(dailyGoal.getId(), totalFocusTimeInMinutes); + pomodoroService.updateTotalFocusTime(dailyGoal.getId(), totalFocusTimeInSeconds); // then - assertThat(pomodoro.getTotalFocusTimeInSeconds()) - .isEqualTo(totalFocusTimeInMinutes * 60); + assertThat(pomodoro.getTotalFocusTimeInSeconds()).isEqualTo(totalFocusTimeInSeconds); } @Test @DisplayName("뽀모도로 총 집중시간(분)이 음수일 경우 예외가 발생한다") void shouldThrowExceptionWhenTotalFocusTimeIsNegative() { // given - int totalFocusTimeInMinutes = -30; + int totalFocusTimeInSeconds = -30; // when & then assertThatThrownBy( () -> pomodoroService.updateTotalFocusTime( - dailyGoal.getId(), totalFocusTimeInMinutes)) + dailyGoal.getId(), totalFocusTimeInSeconds)) .isInstanceOf(CustomException.class) .hasMessage(PomodoroErrorCode.POMODORO_NEGATIVE_FOCUS_TIME.getMessage()); } @@ -166,7 +165,7 @@ void shouldThrowExceptionWhenTotalFocusTimeIsNegative() { @DisplayName("뽀모도로가 존재하지 않으면 예외가 발생한다") void shouldThrowExceptionWhenPomodoroNotFound() { // given - int totalFocusTimeInMinutes = 60; + int totalFocusTimeInSeconds = 60; given(pomodoroRepository.findByDailyGoalId(dailyGoal.getId())) .willReturn(Optional.empty()); @@ -174,7 +173,7 @@ void shouldThrowExceptionWhenPomodoroNotFound() { assertThatThrownBy( () -> pomodoroService.updateTotalFocusTime( - dailyGoal.getId(), totalFocusTimeInMinutes)) + dailyGoal.getId(), totalFocusTimeInSeconds)) .isInstanceOf(CustomException.class) .hasMessage(PomodoroErrorCode.POMODORO_NOT_FOUND.getMessage()); } @@ -183,7 +182,7 @@ void shouldThrowExceptionWhenPomodoroNotFound() { @DisplayName("삭제된 뽀모도로일 경우 예외가 발생한다") void shouldThrowExceptionWhenPomodoroIsDeleted() { // given - int totalFocusTimeInMinutes = 60; + int totalFocusTimeInSeconds = 60; pomodoro.updateDeletedAt(); given(pomodoroRepository.findByDailyGoalId(dailyGoal.getId())) .willReturn(Optional.of(pomodoro)); @@ -192,7 +191,7 @@ void shouldThrowExceptionWhenPomodoroIsDeleted() { assertThatThrownBy( () -> pomodoroService.updateTotalFocusTime( - dailyGoal.getId(), totalFocusTimeInMinutes)) + dailyGoal.getId(), totalFocusTimeInSeconds)) .isInstanceOf(CustomException.class) .hasMessage(PomodoroErrorCode.POMODORO_ALREADY_DELETED.getMessage()); }