feat(cefr): dual mistake ingestion, 1-tap options breakdown, and 260 curated questions

This commit is contained in:
Antigravity committed 2026-10-06 15:57:07 +03:00
1 parent a00b330f74
commit a2eb26ced5
7 files changed
+1277 -95

No files matched your search

+21
View File
@@ -36,6 +36,7 @@ from app.cefr import (
get_cefr_quiz_batch,
process_cefr_answer,
reset_user_cefr_level,
ingest_cefr_word,
)
from app.grammar import (
get_grammar_units_list,
@@ -185,6 +186,13 @@ class CefrResetRequest(BaseModel):
level: str
class CefrAddWordRequest(BaseModel):
level: str
term: str
context_sentence: Optional[str] = ""
class GrammarAnswerRequest(BaseModel):
unit_id: int
exercise_idx: int
@@ -1466,6 +1474,19 @@ async def api_cefr_reset(
return {"status": "ok", "level": req.level.upper(), "reset_count": deleted}
@app.post("/api/cefr/add-word")
async def api_cefr_add_word(
req: CefrAddWordRequest,
user: dict = Depends(require_user),
):
"""
Adds a word from a CEFR test options list directly into user's SRS active vocabulary.
"""
with get_db() as conn:
return ingest_cefr_word(conn, user["id"], req.level, req.term, req.context_sentence)
# ---------------------------------------------------------------------------
# Task 16: Murphy Grammar Engine & Handwritten Journaling Endpoints
# ---------------------------------------------------------------------------