From e8d629dfe2c0b4ea2e5538b25644ee8b975af1f6 Mon Sep 17 00:00:00 2001 From: laura-jung <166522604+laura-jung@users.noreply.github.com> Date: Wed, 2 Sep 2026 03:38:38 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=B0=98=EB=B3=B5=20=ED=88=AC=EB=91=90?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C=20=EC=B2=98=EB=A6=AC=20=EC=8B=9C=20?= =?UTF-8?q?=ED=83=80=EC=9D=B4=EB=A8=B8=20=EA=B2=80=EC=82=AC=EB=A5=BC=20?= =?UTF-8?q?=EB=82=A0=EC=A7=9C=20=EB=8B=A8=EC=9C=84=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다른 날짜의 타이머가 실행 중일 때 해당 규칙의 모든 날짜 완료가 막히던 문제를 수정. hasActiveTimer(todoId) 대신 날짜를 함께 확인하는 hasActiveTimerOn(todoId, date)으로 완료 가드를 변경했다. Co-Authored-By: Claude Opus 4.8 --- .../Timo/domain/timer/repository/TimerRecordRepository.java | 4 ++++ .../java/com/Timo/Timo/domain/timer/service/TimerService.java | 4 ++++ .../java/com/Timo/Timo/domain/todo/service/TodoService.java | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/Timo/Timo/domain/timer/repository/TimerRecordRepository.java b/src/main/java/com/Timo/Timo/domain/timer/repository/TimerRecordRepository.java index f2959c24..dcb13d4f 100644 --- a/src/main/java/com/Timo/Timo/domain/timer/repository/TimerRecordRepository.java +++ b/src/main/java/com/Timo/Timo/domain/timer/repository/TimerRecordRepository.java @@ -3,6 +3,7 @@ import com.Timo.Timo.domain.timer.entity.TimerRecord; import com.Timo.Timo.domain.timer.enums.TimerStatus; import jakarta.persistence.LockModeType; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -18,6 +19,9 @@ public interface TimerRecordRepository extends JpaRepository boolean existsByTodo_IdAndStatusIn(Long todoId, List statuses); + boolean existsByTodo_IdAndTargetDateAndStatusIn( + Long todoId, LocalDate targetDate, List statuses); + @Modifying(clearAutomatically = true) @Query("delete from TimerRecord r where r.todo.id = :todoId") void deleteByTodoId(@Param("todoId") Long todoId); diff --git a/src/main/java/com/Timo/Timo/domain/timer/service/TimerService.java b/src/main/java/com/Timo/Timo/domain/timer/service/TimerService.java index 8eea3fb4..778984a6 100644 --- a/src/main/java/com/Timo/Timo/domain/timer/service/TimerService.java +++ b/src/main/java/com/Timo/Timo/domain/timer/service/TimerService.java @@ -184,6 +184,10 @@ public boolean hasActiveTimer(Long todoId) { return timerRecordRepository.existsByTodo_IdAndStatusIn(todoId, ACTIVE_STATUS); } + public boolean hasActiveTimerOn(Long todoId, LocalDate date) { + return timerRecordRepository.existsByTodo_IdAndTargetDateAndStatusIn(todoId, date, ACTIVE_STATUS); + } + @Transactional public void deleteTimersByTodo(Long todoId) { timerSessionRepository.deleteByTodoId(todoId); diff --git a/src/main/java/com/Timo/Timo/domain/todo/service/TodoService.java b/src/main/java/com/Timo/Timo/domain/todo/service/TodoService.java index c9cad042..f3446eed 100644 --- a/src/main/java/com/Timo/Timo/domain/todo/service/TodoService.java +++ b/src/main/java/com/Timo/Timo/domain/todo/service/TodoService.java @@ -137,7 +137,7 @@ public TodoStatusChangeResponse changeCompletion(Long userId, Long todoId, TodoS throw new CustomException(TodoErrorCode.TODO_NOT_FOUND); } - if (timerService.hasActiveTimer(todoId)) { + if (timerService.hasActiveTimerOn(todoId, date)) { throw new CustomException(TodoErrorCode.TIMER_RUNNING); }