feat(vocab): implement upcoming vocabulary review tracking and update UI accordingly

This commit is contained in:
Torsten Schulz (local)
2026-08-25 12:46:19 +02:00
parent 53f00db154
commit a481a440c8
4 changed files with 52 additions and 99 deletions

View File

@@ -2031,6 +2031,21 @@ export default class VocabService {
this._isTrainableSrsPair(item)
&& (!validKeys.size || validKeys.has(String(item.itemKey || '').trim()))
);
const scheduledRows = await VocabSrsItem.findAll({
where: { userId: user.id, courseId: Number(course.id) },
order: [['nextDueAt', 'ASC']]
});
const upcomingByDate = new Map();
scheduledRows
.filter((item) => (
this._isTrainableSrsPair(item)
&& (!validKeys.size || validKeys.has(String(item.itemKey || '').trim()))
&& new Date(item.nextDueAt).getTime() > now.getTime()
))
.forEach((item) => {
const date = new Date(item.nextDueAt).toISOString().slice(0, 10);
upcomingByDate.set(date, (upcomingByDate.get(date) || 0) + 1);
});
const rows = validDueRows.slice(0, limit);
const totalDueCount = validDueRows.length;
@@ -2046,6 +2061,7 @@ export default class VocabService {
totalDueCount,
dailyLimit: DAILY_SRS_LIMIT,
limit,
upcoming: Array.from(upcomingByDate, ([date, count]) => ({ date, count })).slice(0, 6),
items: rows.map((item) => ({
itemKey: item.itemKey,
courseId: item.courseId,