diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-04 22:31:13 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-04 22:43:15 +0900 |
| commit | a047cdd517efe7693ccd41162f9267f48cd67955 (patch) | |
| tree | 969c6582d53429085c066aa88881d09f42185aca /src/server/routes/study.ts | |
| parent | 87d925c8dfb9c0502a739275df19d1dde8b32230 (diff) | |
| download | kioku-a047cdd517efe7693ccd41162f9267f48cd67955.tar.gz kioku-a047cdd517efe7693ccd41162f9267f48cd67955.tar.zst kioku-a047cdd517efe7693ccd41162f9267f48cd67955.zip | |
feat(study): enforce newCardsPerDay limit in study API
Split due card fetching into new cards and review cards, applying
the deck's newCardsPerDay limit to new cards while leaving review
cards unrestricted. New cards are placed before review cards in
the response.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/server/routes/study.ts')
| -rw-r--r-- | src/server/routes/study.ts | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/server/routes/study.ts b/src/server/routes/study.ts index d978a6a..efd450c 100644 --- a/src/server/routes/study.ts +++ b/src/server/routes/study.ts @@ -51,9 +51,21 @@ export function createStudyRouter(deps: StudyDependencies) { } const now = new Date(); - const dueCards = await cardRepo.findDueCardsForStudy(deckId, now, 100); - return c.json({ cards: dueCards }, 200); + // Calculate new card budget based on today's already-reviewed new cards + const reviewedNewCards = await reviewLogRepo.countTodayNewCardReviews( + deckId, + now, + ); + const newCardBudget = Math.max(0, deck.newCardsPerDay - reviewedNewCards); + + // Fetch new cards (limited) and review cards separately + const [newCards, reviewCards] = await Promise.all([ + cardRepo.findDueNewCardsForStudy(deckId, now, newCardBudget), + cardRepo.findDueReviewCardsForStudy(deckId, now, 100), + ]); + + return c.json({ cards: [...newCards, ...reviewCards] }, 200); }) .post( "/:cardId", |
