aboutsummaryrefslogtreecommitdiff
path: root/src/lib/server/services/routines.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/server/services/routines.ts')
-rw-r--r--src/lib/server/services/routines.ts43
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,