feat: overall overtime balance on history page
Backend:
- ClosedWeekStore.SumDelta: single SQL aggregate returning total delta_ms and
row count across all closed_weeks
- WeekService.Balance: thin passthrough returning BalanceResult{TotalDeltaMs, ClosedWeekCount}
- GET /api/weeks/balance handler; route registered alongside /weeks list/close/reopen
- Tests: store-level SumDelta (empty + populated), service-level Balance (empty + 2 weeks)
Frontend:
- weeks.balance() added to API client
- History page: balance card at top, fetched in parallel with existing data
- Loading state shows '—'; once loaded shows formatDelta value in green/red/gray
- Shows 'across N closed weeks' count alongside the value
This commit is contained in:
@@ -65,6 +65,14 @@ func (s *ClosedWeekStore) ListByRange(ctx context.Context, fromWeekKey, toWeekKe
|
||||
return result, rows.Err()
|
||||
}
|
||||
|
||||
// SumDelta returns the sum of delta_ms and the count of rows across all closed_weeks.
|
||||
func (s *ClosedWeekStore) SumDelta(ctx context.Context) (totalDeltaMs int64, count int, err error) {
|
||||
err = s.db.QueryRowContext(ctx,
|
||||
`SELECT COALESCE(SUM(delta_ms), 0), COUNT(*) FROM closed_weeks`,
|
||||
).Scan(&totalDeltaMs, &count)
|
||||
return
|
||||
}
|
||||
|
||||
// SumWorkedMsForWeek sums worked_ms across closed_days for the given day keys.
|
||||
func SumWorkedMsForWeek(ctx context.Context, db *sql.DB, dayKeys []string) (int64, error) {
|
||||
if len(dayKeys) == 0 {
|
||||
|
||||
Reference in New Issue
Block a user