Reading history with chronologically sorted entries
Map of date -> Map of mangaId -> daily delta (chapters read that day)
export function computeDailyDeltasByManga(
history: ReadingHistory,
): Map<string, Map<string | number, number>> {
const dailyDeltaMap = new Map<string, Map<string | number, number>>();
const prevChaptersPerManga = new Map<string | number, number>();
// Sort entries by timestamp to ensure chronological order
const sortedEntries = [...history.entries].sort(
(a, b) => a.timestamp - b.timestamp,
);
for (const entry of sortedEntries) {
const date = getDateKey(entry.timestamp);
const mangaId = entry.mangaId;
const prevChapters = prevChaptersPerManga.get(mangaId) ?? 0;
const delta = Math.max(0, entry.chaptersRead - prevChapters);
// Only record if there's progress that day
if (delta > 0) {
if (!dailyDeltaMap.has(date)) {
dailyDeltaMap.set(date, new Map());
}
dailyDeltaMap.get(date)!.set(mangaId, delta);
}
// Update previous chapters for next iteration
prevChaptersPerManga.set(mangaId, entry.chaptersRead);
}
return dailyDeltaMap;
}
Computes daily chapter reading deltas by manga across reading history. Tracks progress change per manga per day, excluding days with no progress.