diff options
Diffstat (limited to 'src/lib/server/services/routines.ts')
| -rw-r--r-- | src/lib/server/services/routines.ts | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/lib/server/services/routines.ts b/src/lib/server/services/routines.ts index c3a5eff..b314d50 100644 --- a/src/lib/server/services/routines.ts +++ b/src/lib/server/services/routines.ts @@ -69,6 +69,7 @@ export async function edit( frequencyDays: fields.frequencyDays ?? current.frequencyDays, description: fields.description ?? current.description, archived: current.archived, + archivedAt: current.archivedAt, createdAt: current.createdAt, }) .returning(); @@ -88,9 +89,51 @@ export async function archive(id: number, db = defaultDb): Promise<void> { ...current, version: current.version + 1, archived: true, + archivedAt: new Date().toISOString(), }); } +export interface ArchivedRoutine { + id: number; + name: string; + frequencyDays: number; + createdAt: string; + archivedAt: string; +} + +/** Archived routines of a project, most recently archived first. */ +export async function loadArchived( + projectId: number, + db = defaultDb, +): Promise<ArchivedRoutine[]> { + const versions = await db + .select() + .from(routines) + .where(eq(routines.projectId, projectId)); + + // Keep only the max-version row per routine id (same rule as the + // dashboard): archived = its current snapshot is archived. + const current = new Map<number, Routine>(); + for (const r of versions) { + const existing = current.get(r.id); + if (!existing || r.version > existing.version) current.set(r.id, r); + } + return ( + [...current.values()] + .filter((r) => r.archived) + // Legacy rows archived before archived_at existed fall back to their + // creation date. + .sort((a, b) => ((a.archivedAt ?? '') < (b.archivedAt ?? '') ? 1 : -1)) + .map((r) => ({ + id: r.id, + name: r.name, + frequencyDays: r.frequencyDays, + createdAt: r.createdAt, + archivedAt: r.archivedAt ?? r.createdAt, + })) + ); +} + export async function loadAllVersions( routineId: number, db = defaultDb, |
