aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/server/repositories
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/repositories')
-rw-r--r--src/server/repositories/card.test.ts1
-rw-r--r--src/server/repositories/card.ts41
-rw-r--r--src/server/repositories/types.ts5
3 files changed, 47 insertions, 0 deletions
diff --git a/src/server/repositories/card.test.ts b/src/server/repositories/card.test.ts
index 22d0f41..64c071e 100644
--- a/src/server/repositories/card.test.ts
+++ b/src/server/repositories/card.test.ts
@@ -96,6 +96,7 @@ function createMockCardRepo(): CardRepository {
softDelete: vi.fn(),
softDeleteByNoteId: vi.fn(),
findDueCards: vi.fn(),
+ findDueCardsWithNoteData: vi.fn(),
updateFSRSFields: vi.fn(),
};
}
diff --git a/src/server/repositories/card.ts b/src/server/repositories/card.ts
index 830b2f7..92811d4 100644
--- a/src/server/repositories/card.ts
+++ b/src/server/repositories/card.ts
@@ -178,6 +178,47 @@ export const cardRepository: CardRepository = {
return result;
},
+ async findDueCardsWithNoteData(
+ deckId: string,
+ now: Date,
+ limit: number,
+ ): Promise<CardWithNoteData[]> {
+ const dueCards = await this.findDueCards(deckId, now, limit);
+
+ const cardsWithNoteData: CardWithNoteData[] = [];
+
+ for (const card of dueCards) {
+ if (!card.noteId) {
+ cardsWithNoteData.push({
+ ...card,
+ note: null,
+ fieldValues: [],
+ });
+ continue;
+ }
+
+ const noteResult = await db
+ .select()
+ .from(notes)
+ .where(and(eq(notes.id, card.noteId), isNull(notes.deletedAt)));
+
+ const note = noteResult[0] ?? null;
+
+ const fieldValuesResult = await db
+ .select()
+ .from(noteFieldValues)
+ .where(eq(noteFieldValues.noteId, card.noteId));
+
+ cardsWithNoteData.push({
+ ...card,
+ note,
+ fieldValues: fieldValuesResult,
+ });
+ }
+
+ return cardsWithNoteData;
+ },
+
async updateFSRSFields(
id: string,
deckId: string,
diff --git a/src/server/repositories/types.ts b/src/server/repositories/types.ts
index 3b910f3..8b86061 100644
--- a/src/server/repositories/types.ts
+++ b/src/server/repositories/types.ts
@@ -134,6 +134,11 @@ export interface CardRepository {
softDelete(id: string, deckId: string): Promise<boolean>;
softDeleteByNoteId(noteId: string): Promise<boolean>;
findDueCards(deckId: string, now: Date, limit: number): Promise<Card[]>;
+ findDueCardsWithNoteData(
+ deckId: string,
+ now: Date,
+ limit: number,
+ ): Promise<CardWithNoteData[]>;
updateFSRSFields(
id: string,
deckId: string,