Skip to content

[FIX] 반복 투두를 오늘이 아닌 날짜에서 재생해도 해당 날짜에 귀속되도록 수정#257

Merged
kimminna merged 1 commit into
developfrom
fix/web/254-repeat-todo-timer-date-attribution
Jul 16, 2026
Merged

[FIX] 반복 투두를 오늘이 아닌 날짜에서 재생해도 해당 날짜에 귀속되도록 수정#257
kimminna merged 1 commit into
developfrom
fix/web/254-repeat-todo-timer-date-attribution

Conversation

@jjangminii

@jjangminii jjangminii commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

ISSUE 🔗

close #254



What is this PR? 🔍

반복 투두를 오늘이 아닌 날짜(과거/미래)의 카드에서 재생해도, 백엔드에 추가된 date 파라미터를 함께 보내 그 카드의 날짜에 정확히 귀속되도록 수정했습니다.

배경

  • 기존 구조: startTimer API는 todoId만 받고 날짜를 지정할 방법이 없어서, 서버가 항상 서버 기준 "오늘" 날짜로 타이머를 귀속시켰습니다.
  • 발생 문제: 반복 투두를 내일/어제 등 오늘이 아닌 날짜의 카드에서 재생하면, 실제로는 타이머가 시작되는데도 activeTimer.date가 오늘로 찍혀서 클릭한 카드와 매칭되지 않았습니다. 그 결과 방금 재생한 카드 자체가 "실행 중"으로 표시되지 않고, 다른 카드들의 재생 버튼을 누르면 "다른 투두의 타이머가 이미 실행 중이에요" 오류가 발생했습니다.
  • 해결 방향: 백엔드가 startTimer에 optional date 쿼리 파라미터를 추가했고(미지정 시 오늘로 기본 처리), startedAt은 실제 시작 시각을 그대로 유지하면서 date만 재생한 투두 인스턴스의 날짜로 귀속되도록 스키마가 바뀌었습니다. 클라이언트도 이에 맞춰 타이머를 시작할 때 클릭한 카드의 날짜를 함께 전송하도록 수정했습니다.

타이머 시작 API 연동

  • 변경 요약: pnpm gen:api로 orval 코드를 재생성해 startTimerdate 쿼리 파라미터(StartTimerParams)를 받도록 반영하고, Home/Today/Focus의 타이머 시작 호출부에서 이 파라미터를 채워 보내도록 수정했습니다.
  • 이유: 일시정지/재개/완료/정지 등 이후 액션은 모두 timerId 기반이라 날짜를 다시 보낼 필요가 없지만, 타이머를 최초로 시작하는 시점에만 서버가 "어떤 날짜에 귀속시킬지" 판단할 근거가 없었습니다.
  • 구현 방식: useHomeTodosByDate.ts/useTodayTodoList.ts는 재생한 카드가 속한 dateKey를, use-focus-session.ts는 현재 조회 중인 focusView.date를 각각 startTimer({ todoId, params: { date } })로 전달합니다. 재생성 시 이번 작업과 무관한 다른 도메인(캘린더 등)의 스펙 변경이 함께 딸려 나와서, 타이머 도메인 관련 파일만 남기고 나머지는 되돌렸습니다.
  • 경계 · 제약: 사이드바 타이머 패널(TimerPanel.tsx)은 새 타이머를 시작하는 진입점이 없고 이미 활성화된 타이머만 표시/제어하므로 이번 변경 대상에서 제외했습니다.



To Reviewers

startTimer 호출부 3곳(Home/Today/Focus) 모두 각자의 "재생한 카드/현재 보고 있는 날짜" 소스에서 date를 가져오는데, 값의 출처가 파일마다 달라서(dateKey 파라미터 vs todos.find(...)?.date vs focusView.date) 각 지점에서 실제로 맞는 날짜를 넘기고 있는지 한 번 봐주시면 좋겠습니다.



Screenshot 📷



Test Checklist ✔

  • pnpm check-types 통과
  • pnpm lint 통과
  • 반복 투두를 오늘이 아닌 날짜 카드에서 재생했을 때 해당 카드가 실행 중으로 표시되고 다른 카드에서 "이미 실행 중" 오류가 나지 않는지 — 미실행: 로그인 필요 환경이라 리뷰어 확인 요청

Summary by CodeRabbit

  • 버그 수정
    • 날짜별 할 일에서 타이머를 시작할 때 해당 날짜 정보가 정확히 전달되도록 개선했습니다.
    • 오늘 할 일과 집중 세션에서도 타이머 시작 날짜가 올바르게 반영됩니다.
    • 할 일이 선택된 경우에만 타이머가 시작되도록 동작을 안정화했습니다.

- 타이머 시작 API에 추가된 date 쿼리 파라미터를 반영하도록 orval 코드를 재생성했습니다
- Home/Today/Focus에서 타이머를 시작할 때 재생한 카드의 날짜를 함께 전송하도록 수정해, 반복 투두를 오늘이 아닌 날짜에서 재생해도 해당 날짜에 정확히 귀속되도록 했습니다
@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
timo Ready Ready Preview, Comment Jul 16, 2026 7:00am

Request Review

@github-actions
github-actions Bot requested review from ehye1 and kimminna July 16, 2026 06:59
@github-actions github-actions Bot added ⏰ Timo-web Timo 웹 서비스 🐛 Bug 기능이 정상적으로 작동하지 않는 문제 수정 ♠️ 정민 정민양 labels Jul 16, 2026
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ac4ad5b7-06e1-4518-998e-9467afcdbe94

📥 Commits

Reviewing files that changed from the base of the PR and between 3cc33b4 and 79bb8ce.

⛔ Files ignored due to path filters (4)
  • apps/timo-web/api/generated/endpoints/timer/timer.ts is excluded by !**/generated/**
  • apps/timo-web/api/generated/endpoints/timer/timer.zod.ts is excluded by !**/generated/**
  • apps/timo-web/api/generated/models/index.ts is excluded by !**/generated/**
  • apps/timo-web/api/generated/models/startTimerParams.ts is excluded by !**/generated/**
📒 Files selected for processing (3)
  • apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts
  • apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts
  • apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts

📝 Walkthrough

Walkthrough

홈, 오늘, 포커스 화면의 타이머 시작 요청에 선택한 투두 날짜를 params.date로 추가했습니다. 포커스 세션에서는 투두가 존재할 때만 요청하도록 호출 위치도 정리했습니다.

Changes

타이머 날짜 귀속

Layer / File(s) Summary
타이머 시작 날짜 파라미터
apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/home/_hooks/use-home-todos-by-date.ts, apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts, apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts
세 화면의 startTimer 호출이 todoId와 함께 해당 날짜를 params.date로 전달하도록 변경되었습니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: kimminna

Poem

토끼가 날짜를 콕 찍었네
타이머도 그날로 깡충 뛰네
홈과 오늘, 포커스까지
같은 날짜를 꼭 챙기지
당근처럼 정확한 시작! 🐰

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Linked Issues check ❓ Inconclusive Home/Today/Focus 훅에 date 전달은 반영됐지만, 제외된 생성 API 파일에서 startTimer 스키마와 응답 변경을 확인할 수 없어 완전 준수 여부는 판단 불가합니다. 제외된 apps/timo-web/api/generated/** 파일을 포함해 startTimer 스키마와 응답(date/startedAt) 변경을 확인할 수 있게 해주세요.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 반복 투두 타이머의 date 귀속 수정이라는 핵심 변경을 정확히 요약합니다.
Out of Scope Changes check ✅ Passed 변경은 모두 반복 투두 타이머 시작 시 date를 넘기는 관련 수정뿐이라, 불필요한 범위 확장은 보이지 않습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

Timo Performance Report

Bundle Size — timo-web
라우트 크기 First Load JS
/[locale]/home 212.45 kB 🔴 418.31 kB
/[locale]/today 196.62 kB 🔴 402.49 kB
/[locale]/focus 161.13 kB 🔴 367.00 kB
/[locale]/settings 167.55 kB 🔴 373.42 kB
/[locale]/statistics 154.90 kB 🔴 360.77 kB
/[locale]/[...rest] 0 B 🟡 205.87 kB
/[locale]/login 212.98 kB 🔴 418.85 kB
/[locale]/oauth/callback 119.68 kB 🟡 325.55 kB
/[locale]/onboarding 233.49 kB 🔴 439.36 kB
/[locale] 118.99 kB 🟡 324.86 kB
/[locale]/policy 125.12 kB 🟡 330.98 kB
/robots.txt/route 0 B 🟡 205.87 kB
/sitemap.xml/route 0 B 🟡 205.87 kB

공유 번들: 205.87 kB
🟢 < 200kB  |  🟡 < 350kB  |  🔴 ≥ 350kB (First Load JS · gzip)

Lighthouse — timo-web
URL Perf A11y LCP CLS TBT
/en/home 🔴 60 🟢 95 🔴 15.8s 🟢 0.000 🟡 552ms
/en/today 🔴 60 🟢 95 🔴 15.6s 🟢 0.000 🟡 579ms
/en/focus 🔴 63 🟢 95 🔴 15.3s 🟢 0.000 🟡 460ms
/en/statistics 🔴 59 🟢 95 🔴 15.3s 🟢 0.000 🟡 598ms

Perf ≥ 70 / A11y ≥ 85 목표
LCP 🟢 < 2.5s 🟡 < 4s 🔴 ≥ 4s  |  CLS 🟢 < 0.1 🟡 < 0.25 🔴 ≥ 0.25  |  TBT 🟢 < 200ms 🟡 < 600ms 🔴 ≥ 600ms

Image Optimization — timo-web
파일 크기 포맷 상태
favicon.png 27.84 kB PNG ⚠️ 🟢
images/google-calendar.png 36.20 kB PNG ⚠️ 🟢
images/google-logo.png 26.79 kB PNG ⚠️ 🟢
og.png 437.44 kB PNG ⚠️ 🟡

총 4개 · 528.28 kB  |  🟢 < 200KB  |  🟡 < 500KB  |  🔴 ≥ 500KB
⚠️ 4개 파일 WebP/AVIF 변환 권장

측정 커밋: 854b761

@jjangminii jjangminii added the 🚬 QA QA 반영 label Jul 16, 2026

@ehye1 ehye1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

서버에서 항상 오늘로 처리하고 있던게 문제였군요!
처음에만 date로 처리하고 이후에는 timerId로 처리하면 되구나
수고하셨습니당

@kimminna
kimminna merged commit 8991f89 into develop Jul 16, 2026
16 checks passed
@kimminna
kimminna deleted the fix/web/254-repeat-todo-timer-date-attribution branch July 16, 2026 07:58
@kimminna kimminna mentioned this pull request Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

♠️ 정민 정민양 🐛 Bug 기능이 정상적으로 작동하지 않는 문제 수정 🚬 QA QA 반영 ⏰ Timo-web Timo 웹 서비스

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FIX] 반복 투두를 오늘이 아닌 날짜에서 재생해도 해당 날짜에 귀속되도록 수정

3 participants