"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); }