feat(repo): countToday(now?) — KST midnight bucket count
For the F4-C·F cue strengthening surfaces (tray tooltip + Inbox identity counter), main + renderer need a single source of truth for "오늘 N번 잡아뒀다". Implements `NoteRepository.countToday(now?)` that computes the half-open UTC interval covering the KST calendar date of `now` and counts rows whose `created_at` falls inside. `now` is injectable for deterministic tests across the KST/UTC boundary (02:00 KST and 23:00 KST land on different UTC dates yet the same / a different KST day). Four new cases cover empty DB, KST-day filtering, KST-midnight crossover, and the default-arg branch.
This commit is contained in:
@@ -302,6 +302,28 @@ export class NoteRepository {
|
||||
return row.c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count notes whose `created_at` falls on the KST calendar date of `now`.
|
||||
* KST = UTC+9. We compute the UTC half-open interval
|
||||
* [KST-midnight today, KST-midnight tomorrow)
|
||||
* and count rows whose UTC ISO `created_at` lies inside.
|
||||
*/
|
||||
countToday(now: Date = new Date()): number {
|
||||
const KST_OFFSET_MS = 9 * 60 * 60 * 1000;
|
||||
const kstNow = new Date(now.getTime() + KST_OFFSET_MS);
|
||||
const kstYear = kstNow.getUTCFullYear();
|
||||
const kstMonth = kstNow.getUTCMonth();
|
||||
const kstDate = kstNow.getUTCDate();
|
||||
const kstMidnightUtc = Date.UTC(kstYear, kstMonth, kstDate) - KST_OFFSET_MS;
|
||||
const nextKstMidnightUtc = kstMidnightUtc + 24 * 60 * 60 * 1000;
|
||||
const startIso = new Date(kstMidnightUtc).toISOString();
|
||||
const endIso = new Date(nextKstMidnightUtc).toISOString();
|
||||
const row = this.db
|
||||
.prepare(`SELECT COUNT(*) AS c FROM notes WHERE created_at >= ? AND created_at < ?`)
|
||||
.get(startIso, endIso) as { c: number };
|
||||
return row.c;
|
||||
}
|
||||
|
||||
getAllPendingJobs(): Array<{ noteId: string; attempts: number; nextRunAt: string }> {
|
||||
const rows = this.db
|
||||
.prepare(`SELECT note_id, attempts, next_run_at FROM pending_jobs`)
|
||||
|
||||
Reference in New Issue
Block a user