aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/server/routes
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-02-08 11:29:22 +0000
committerClaude <noreply@anthropic.com>2026-02-08 11:29:22 +0000
commit6d53e63d9f3fd81125d0f61e9701ecd262318875 (patch)
tree0f068896360b01e19e787b4e23da912c4e3518ee /src/server/routes
parente17c87441d9beff9c1241cbe3ba71c402a7c0c3f (diff)
downloadkioku-6d53e63d9f3fd81125d0f61e9701ecd262318875.tar.gz
kioku-6d53e63d9f3fd81125d0f61e9701ecd262318875.tar.zst
kioku-6d53e63d9f3fd81125d0f61e9701ecd262318875.zip
fix(deck): change review card limit to 80 and simplify deck detail stats
Review card limit is reduced from 100 to 80 across deck list, deck detail, and study routes. Deck detail page now shows only total card count and due card count (with budget limits applied), matching the deck list and study screen numbers. https://claude.ai/code/session_01NAj4waQhwSSXV9EbgioX2j
Diffstat (limited to 'src/server/routes')
-rw-r--r--src/server/routes/decks.ts18
-rw-r--r--src/server/routes/study.test.ts2
-rw-r--r--src/server/routes/study.ts2
3 files changed, 18 insertions, 4 deletions
diff --git a/src/server/routes/decks.ts b/src/server/routes/decks.ts
index 6a24c66..d73aa0c 100644
--- a/src/server/routes/decks.ts
+++ b/src/server/routes/decks.ts
@@ -22,7 +22,7 @@ const deckIdParamSchema = z.object({
id: z.uuid(),
});
-const REVIEW_CARDS_LIMIT = 100;
+const REVIEW_CARDS_LIMIT = 80;
export function createDecksRouter(deps: DeckDependencies) {
const { deckRepo, cardRepo, reviewLogRepo } = deps;
@@ -82,7 +82,21 @@ export function createDecksRouter(deps: DeckDependencies) {
throw Errors.notFound("Deck not found", "DECK_NOT_FOUND");
}
- return c.json({ deck }, 200);
+ const now = new Date();
+ const [dueNewCards, dueReviewCards, reviewedNewCards] = await Promise.all(
+ [
+ cardRepo.countDueNewCards(deck.id, now),
+ cardRepo.countDueReviewCards(deck.id, now),
+ reviewLogRepo.countTodayNewCardReviews(deck.id, now),
+ ],
+ );
+
+ const newCardBudget = Math.max(0, deck.newCardsPerDay - reviewedNewCards);
+ const newCardsToStudy = Math.min(dueNewCards, newCardBudget);
+ const reviewCardsToStudy = Math.min(dueReviewCards, REVIEW_CARDS_LIMIT);
+ const dueCardCount = newCardsToStudy + reviewCardsToStudy;
+
+ return c.json({ deck: { ...deck, dueCardCount } }, 200);
})
.put(
"/:id",
diff --git a/src/server/routes/study.test.ts b/src/server/routes/study.test.ts
index a58ea0d..514d966 100644
--- a/src/server/routes/study.test.ts
+++ b/src/server/routes/study.test.ts
@@ -198,7 +198,7 @@ describe("GET /api/decks/:deckId/study", () => {
expect(mockCardRepo.findDueReviewCardsForStudy).toHaveBeenCalledWith(
DECK_ID,
expect.any(Date),
- 100,
+ 80,
);
});
diff --git a/src/server/routes/study.ts b/src/server/routes/study.ts
index efd450c..d05f3ca 100644
--- a/src/server/routes/study.ts
+++ b/src/server/routes/study.ts
@@ -62,7 +62,7 @@ export function createStudyRouter(deps: StudyDependencies) {
// Fetch new cards (limited) and review cards separately
const [newCards, reviewCards] = await Promise.all([
cardRepo.findDueNewCardsForStudy(deckId, now, newCardBudget),
- cardRepo.findDueReviewCardsForStudy(deckId, now, 100),
+ cardRepo.findDueReviewCardsForStudy(deckId, now, 80),
]);
return c.json({ cards: [...newCards, ...reviewCards] }, 200);