Skip to content

πŸš€ [κΈ°λŠ₯κ°œμ„ ][λ°±μ—”λ“œ][Timer] today-stats 응닡에 λˆ„μ  톡계 ν•„λ“œ 3개 μΆ”κ°€Β #40

Description

@EM-H20

πŸ“ ν˜„μž¬ 문제점

  • ν΄λΌμ΄μ–ΈνŠΈμ˜ λˆ„μ  톡계 (totalStudyMinutesProvider, totalSessionCountProvider, monthlyStudyMinutesProvider) κ°€ GET /api/timer-sessions 의 첫 νŽ˜μ΄μ§€(20개) 만 ν•©μ‚°ν•˜κ³  μžˆμ–΄ 인증 μ‚¬μš©μžμ—κ²Œ λΆ€μ •ν™•ν•œ 값이 λ…ΈμΆœλ¨.
  • 영ν–₯ λ²”μœ„:
    • ν”„λ‘œν•„ ν™”λ©΄ 의 "곡뢀 μ‹œκ°„" 톡계 μΉ΄λ“œκ°€ 졜근 20μ„Έμ…˜ κΈ°μ€€μœΌλ‘œλ§Œ ν‘œμ‹œλ¨ (μ‹€μ œ λˆ„μ κ³Ό 닀름).
    • 뱃지 ν•΄κΈˆ μ‹œμŠ€ν…œ 의 쑰건 평가가 λΆ€μ •ν™•ν•΄ "총 100μ‹œκ°„ 곡뢀", "총 50회 μ„Έμ…˜ μ™„λ£Œ" λ₯˜ 뱃지가 μ˜μ›νžˆ ν•΄κΈˆλ˜μ§€ μ•Šμ„ 수 있음.
  • ν΄λΌμ—μ„œ λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό μˆœνšŒν•΄ ν•©μ‚°ν•˜λŠ” 방식은 μ„Έμ…˜μ΄ λ§Žμ•„μ§ˆμˆ˜λ‘ N번 API 호좜이 λ°œμƒν•΄ λΉ„νš¨μœ¨μ .

πŸ› οΈ ν•΄κ²° λ°©μ•ˆ / μ œμ•ˆ κΈ°λŠ₯

  • κΈ°μ‘΄ GET /api/timer-sessions/today-stats 응닡에 λˆ„μ  톡계 ν•„λ“œ 3개 μΆ”κ°€.
  • μ‹ κ·œ endpoint λŒ€μ‹  today-stats ν™•μž₯을 μ„ νƒν•œ 이유:
    • 클라의 호좜 μ‹œμ Β·μΊμ‹œ 정책이 today-stats 와 동일 (ν™ˆ/ν”„λ‘œν•„ μ§„μž… μ‹œ).
    • API ν‘œλ©΄μ  μ΅œμ†Œν™”.
    • κΈ°μ‘΄ TodayStatsResponse μŠ€ν‚€λ§ˆμ™€ μžμ—°μŠ€λŸ¬μš΄ ν™•μž₯ 관계.

βš™οΈ μž‘μ—… λ‚΄μš©

  • TodayStatsResponse DTO 에 ν•„λ“œ 3개 μΆ”κ°€
    • lifetimeMinutes: νšŒμ›μ˜ 전체 λˆ„μ  곡뢀 μ‹œκ°„ (λΆ„) β€” SUM(duration_minutes) WHERE member_id = ?
    • lifetimeSessionCount: νšŒμ›μ˜ 전체 μ„Έμ…˜ 수 β€” COUNT(*) WHERE member_id = ?
    • monthlyMinutes: 이번 달 λˆ„μ  곡뢀 μ‹œκ°„ (λΆ„, KST κΈ°μ€€) β€” SUM(duration_minutes) WHERE member_id = ? AND started_at >= 이번 달 1일 00:00 KST
  • 이번 달 κ²½κ³„λŠ” streak 와 λ™μΌν•˜κ²Œ Asia/Seoul κΈ°μ€€ 적용
  • docs/api-docs.json 의 TodayStatsResponse μŠ€ν‚€λ§ˆ κ°±μ‹  (description, example 포함)
  • 응닡 μ˜ˆμ‹œ κ°±μ‹ :
    {
      "totalMinutes": 180,
      "sessionCount": 3,
      "streak": 7,
      "lifetimeMinutes": 12450,
      "lifetimeSessionCount": 287,
      "monthlyMinutes": 1820
    }
  • νšŒμ›μ˜ μ„Έμ…˜ 0건 μΌ€μ΄μŠ€ β€” μ„Έ ν•„λ“œ λͺ¨λ‘ 0 λ°˜ν™˜ (null κΈˆμ§€)
  • κΈ°μ‘΄ ν•„λ“œλͺ…Β·κ΅¬μ‘°λŠ” μœ μ§€ν•˜μ—¬ ν˜Έν™˜μ„± 보μž₯ (클라 μΈ‘ 무쀑단 배포 κ°€λŠ₯)

πŸ™‹β€β™‚οΈ λ‹΄λ‹Ήμž

  • λ°±μ—”λ“œ: 이름
  • ν”„λ‘ νŠΈμ—”λ“œ: 이름
  • λ””μžμΈ: 이름

Metadata

Metadata

Assignees

Labels

μž‘μ—…μ™„λ£Œμž‘μ—… μ™„λ£Œ μƒνƒœμΈ 경우 (이슈 폐쇄)

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions