From 87bf928c128cd51ef88ee143ee3c279e31bf77f3 Mon Sep 17 00:00:00 2001 From: Thomas Richter Date: Thu, 29 Jan 2026 11:01:59 +0100 Subject: [PATCH] feat(02-01): add getOrdered method to repository - Add getOrdered(options?) method to EntryRepository interface - Implement filtering for completed entries (showCompleted option) - Order by type ASC (task before thought), then createdAt DESC - Import asc, ne operators from drizzle-orm --- src/lib/server/db/repository.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lib/server/db/repository.ts b/src/lib/server/db/repository.ts index 44a80b4..7897b32 100644 --- a/src/lib/server/db/repository.ts +++ b/src/lib/server/db/repository.ts @@ -1,4 +1,4 @@ -import { eq, desc } from 'drizzle-orm'; +import { eq, desc, asc, ne } from 'drizzle-orm'; import { db } from './index'; import { entries, type Entry, type NewEntry } from './schema'; import { nanoid } from 'nanoid'; @@ -7,6 +7,7 @@ export interface EntryRepository { create(entry: Omit): Entry; getById(id: string): Entry | undefined; getAll(options?: { limit?: number; offset?: number }): Entry[]; + getOrdered(options?: { showCompleted?: boolean }): Entry[]; update(id: string, updates: Partial>): Entry | undefined; delete(id: string): boolean; count(): number; @@ -35,6 +36,25 @@ class SQLiteEntryRepository implements EntryRepository { return db.select().from(entries).orderBy(desc(entries.createdAt)).limit(limit).offset(offset).all(); } + getOrdered(options: { showCompleted?: boolean } = {}): Entry[] { + const { showCompleted = false } = options; + + if (!showCompleted) { + return db + .select() + .from(entries) + .where(ne(entries.status, 'done')) + .orderBy(asc(entries.type), desc(entries.createdAt)) + .all(); + } + + return db + .select() + .from(entries) + .orderBy(asc(entries.type), desc(entries.createdAt)) + .all(); + } + update(id: string, updates: Partial>): Entry | undefined { const existing = this.getById(id); if (!existing) return undefined;