diff options
| author | Claude <noreply@anthropic.com> | 2026-01-12 08:57:51 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-01-12 08:57:51 +0000 |
| commit | 887630365ff0531a0556cb71a6b1be0956c41d06 (patch) | |
| tree | f0cebd927c2292a40f123a694c6aa561768ad7a3 /src/server/repositories | |
| parent | f8e4be9b36a16969ac53bd9ce12ce8064be10196 (diff) | |
| download | kioku-887630365ff0531a0556cb71a6b1be0956c41d06.tar.gz kioku-887630365ff0531a0556cb71a6b1be0956c41d06.tar.zst kioku-887630365ff0531a0556cb71a6b1be0956c41d06.zip | |
feat(deck): show due card count on deck list page
Display a badge with the number of cards due for study today next to
each deck name on the home page. The count is fetched along with deck
data from the API to minimize additional network requests.
Diffstat (limited to 'src/server/repositories')
| -rw-r--r-- | src/server/repositories/card.test.ts | 1 | ||||
| -rw-r--r-- | src/server/repositories/card.ts | 14 | ||||
| -rw-r--r-- | src/server/repositories/types.ts | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/server/repositories/card.test.ts b/src/server/repositories/card.test.ts index 0a46a76..b492fd7 100644 --- a/src/server/repositories/card.test.ts +++ b/src/server/repositories/card.test.ts @@ -111,6 +111,7 @@ function createMockCardRepo(): CardRepository { softDelete: vi.fn(), softDeleteByNoteId: vi.fn(), findDueCards: vi.fn(), + countDueCards: vi.fn(), findDueCardsWithNoteData: vi.fn(), findDueCardsForStudy: vi.fn(), updateFSRSFields: vi.fn(), diff --git a/src/server/repositories/card.ts b/src/server/repositories/card.ts index 04425a2..ac03bc6 100644 --- a/src/server/repositories/card.ts +++ b/src/server/repositories/card.ts @@ -204,6 +204,20 @@ export const cardRepository: CardRepository = { return result; }, + async countDueCards(deckId: string, now: Date): Promise<number> { + const result = await db + .select({ count: sql<number>`count(*)::int` }) + .from(cards) + .where( + and( + eq(cards.deckId, deckId), + isNull(cards.deletedAt), + lte(cards.due, now), + ), + ); + return result[0]?.count ?? 0; + }, + async findDueCardsWithNoteData( deckId: string, now: Date, diff --git a/src/server/repositories/types.ts b/src/server/repositories/types.ts index 4768d49..cb3a287 100644 --- a/src/server/repositories/types.ts +++ b/src/server/repositories/types.ts @@ -147,6 +147,7 @@ export interface CardRepository { softDelete(id: string, deckId: string): Promise<boolean>; softDeleteByNoteId(noteId: string): Promise<boolean>; findDueCards(deckId: string, now: Date, limit: number): Promise<Card[]>; + countDueCards(deckId: string, now: Date): Promise<number>; findDueCardsWithNoteData( deckId: string, now: Date, |
