summaryrefslogtreecommitdiff
path: root/src/actions/srs.ts
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-05-29 14:08:02 +0700
committerpolwex <polwex@sortug.com>2025-05-29 14:08:02 +0700
commitf243847216279cbd43879de8b5ef6dcceb3a2f1d (patch)
tree1e0be878f164d327762c7bc54f37077d9410dafe /src/actions/srs.ts
parent4ed3994fb0f6a2a09eb6ac433a62daee2fc01686 (diff)
lets see
Diffstat (limited to 'src/actions/srs.ts')
-rw-r--r--src/actions/srs.ts105
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