diff options
Diffstat (limited to 'src/actions')
-rw-r--r-- | src/actions/srs.ts | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/actions/srs.ts b/src/actions/srs.ts new file mode 100644 index 0000000..47e1655 --- /dev/null +++ b/src/actions/srs.ts @@ -0,0 +1,105 @@ +"use server"; + +import db from "@/lib/db"; +import { SRSStudyService, ReviewResult } from "@/lib/services/srs_study"; + +// Create an instance of the SRS service +const srsService = new SRSStudyService(db); + +/** + * Start a study session for a lesson + * @param userId User ID + * @param lessonId Lesson ID + * @param random Whether to randomize card order + * @returns Cards due for review or new cards + */ +export async function startStudySession(userId: number, lessonId: number, random: boolean = true) { + return srsService.startStudySession(userId, lessonId, random); +} + +/** + * Process a review result and update SRS parameters + * @param userId User ID + * @param cardId Card ID + * @param accuracy Recall accuracy (0-1) + * @param reviewTime Time taken to review in milliseconds + * @returns Updated card data + */ +export async function processReview( + userId: number, + cardId: number, + accuracy: number, + reviewTime: number = 5000 +) { + const reviewResult: ReviewResult = { + cardId, + accuracy, + reviewTime + }; + + return srsService.processReview(userId, reviewResult); +} + +/** + * Reset progress for a specific card + * @param userId User ID + * @param cardId Card ID + */ +export async function resetCardProgress(userId: number, cardId: number) { + srsService.resetProgress(userId, cardId); + return { ok: "Progress reset successfully" }; +} + +/** + * Get user study statistics + * @param userId User ID + * @returns Study statistics + */ +export async function getUserStudyStats(userId: number) { + return srsService.getUserStats(userId); +} + +/** + * Get lesson progress statistics + * @param userId User ID + * @param lessonId Lesson ID + * @returns Lesson progress statistics + */ +export async function getLessonProgress(userId: number, lessonId: number) { + return srsService.getLessonProgress(userId, lessonId); +} + +/** + * Get all lessons with progress information for a user + * @param userId User ID + * @returns Array of lessons with progress information + */ +export async function getUserLessons(userId: number) { + return srsService.getUserLessons(userId); +} + +/** + * Get new cards for a lesson that haven't been studied yet + * @param userId User ID + * @param lessonId Lesson ID + * @param random Whether to randomize card order + * @returns New cards for the lesson + */ +export async function getNewCards(userId: number, lessonId: number, random: boolean = true) { + return srsService.fetchNewCards(userId, lessonId, random); +} + +/** + * Create a simplified response object from review result + * Used for grading cards with Good/Again responses + * @param userId User ID + * @param cardId Card ID + * @param isCorrect Whether the answer was correct + * @returns Updated card data + */ +export async function gradeCard(userId: number, cardId: number, isCorrect: boolean) { + // Convert boolean to accuracy (0.2 for wrong, 1.0 for correct) + const accuracy = isCorrect ? 1.0 : 0.2; + + return processReview(userId, cardId, accuracy); +}
\ No newline at end of file |