diff options
Diffstat (limited to 'src/server/repositories')
| -rw-r--r-- | src/server/repositories/noteType.test.ts | 1 | ||||
| -rw-r--r-- | src/server/repositories/noteType.ts | 18 | ||||
| -rw-r--r-- | src/server/repositories/types.ts | 1 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/server/repositories/noteType.test.ts b/src/server/repositories/noteType.test.ts index fdb9d5c..3fd9e7d 100644 --- a/src/server/repositories/noteType.test.ts +++ b/src/server/repositories/noteType.test.ts @@ -66,6 +66,7 @@ function createMockNoteTypeRepo(): NoteTypeRepository { update: vi.fn(), softDelete: vi.fn(), hasNotes: vi.fn(), + countCards: vi.fn(), }; } diff --git a/src/server/repositories/noteType.ts b/src/server/repositories/noteType.ts index 06c8834..89cf6fd 100644 --- a/src/server/repositories/noteType.ts +++ b/src/server/repositories/noteType.ts @@ -143,6 +143,24 @@ export const noteTypeRepository: NoteTypeRepository = { return result.length > 0; }, + + async countCards(noteTypeId: string): Promise<number> { + const { cards } = await import("../db/schema.js"); + + const result = await db + .select({ count: sql<number>`cast(count(*) as int)` }) + .from(cards) + .innerJoin(notes, eq(cards.noteId, notes.id)) + .where( + and( + eq(notes.noteTypeId, noteTypeId), + isNull(notes.deletedAt), + isNull(cards.deletedAt), + ), + ); + + return Number(result[0]?.count ?? 0); + }, }; export const noteFieldTypeRepository: NoteFieldTypeRepository = { diff --git a/src/server/repositories/types.ts b/src/server/repositories/types.ts index 7e0819a..27a12b4 100644 --- a/src/server/repositories/types.ts +++ b/src/server/repositories/types.ts @@ -250,6 +250,7 @@ export interface NoteTypeRepository { ): Promise<NoteType | undefined>; softDelete(id: string, userId: string): Promise<boolean>; hasNotes(id: string, userId: string): Promise<boolean>; + countCards(noteTypeId: string): Promise<number>; } export interface NoteFieldTypeRepository { |
