feat: add manual interval creation and inline entry editing

- Service: CreateInterval() validates same-day, end>start, day not closed
- Service: Update() now rejects edits on closed-day entries (ErrDayAlreadyClosed)
- Handler: POST /api/entries creates a completed interval with explicit times
- API client: entries.createInterval(startMs, endMs, note)
- Utils: parseTimeInput / toTimeInput helpers for HH:MM <-> unix ms
- Today page: '+ Add interval' form (time pickers + optional note)
- Today page: pencil button on each entry opens inline edit row (start/end/note)
- Tests: TestCreateInterval, TestCreateIntervalEndBeforeStart,
         TestCreateIntervalCrossesMidnight, TestUpdateRejectsClosedDay
This commit is contained in:
2026-04-30 17:45:02 +02:00
parent 245edf1534
commit 9d6233b116
6 changed files with 393 additions and 25 deletions

View File

@@ -85,6 +85,8 @@ export interface Settings {
export const entries = {
start: (note = '') => request<Entry>('POST', '/entries/start', { note }),
createInterval: (startTime: number, endTime: number, note = '') =>
request<Entry>('POST', '/entries', { start_time: startTime, end_time: endTime, note }),
stop: (id: string) => request<Entry>('POST', `/entries/${id}/stop`),
list: (from?: string, to?: string) => {
const params = new URLSearchParams();