DocDoeAI / app /routes /class_session_progress.py
asnannp's picture
deploy: sync backend to Space root (learn-lesson HF cache fix)
d5ee82b
Raw
History Blame Contribute Delete
1.95 kB
from __future__ import annotations
from fastapi import APIRouter, Depends, status
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.core.auth import require_user
from app.core.database import get_db
from app.models.class_session_progress import ClassSessionProgress
from app.models.user import User
from app.schemas.class_session_progress import (
ClassSessionProgressRead,
ClassSessionProgressUpsert,
)
from app.services.learning_state_service import sync_class_session_lesson_progress
router = APIRouter()
@router.post("", response_model=ClassSessionProgressRead, status_code=status.HTTP_200_OK)
def upsert_class_session_progress(
payload: ClassSessionProgressUpsert,
db: Session = Depends(get_db),
current_user: User = Depends(require_user),
) -> ClassSessionProgress:
record = db.scalar(
select(ClassSessionProgress).where(
ClassSessionProgress.user_id == current_user.id,
ClassSessionProgress.class_session_id == payload.class_session_id,
)
)
if record is None:
record = ClassSessionProgress(
user_id=current_user.id,
class_session_id=payload.class_session_id,
data=payload.data,
)
db.add(record)
else:
record.data = payload.data
db.add(record)
db.flush()
sync_class_session_lesson_progress(
db,
user_id=current_user.id,
class_session_id=record.class_session_id,
data=dict(record.data or {}),
)
db.commit()
db.refresh(record)
return record
@router.get("", response_model=list[ClassSessionProgressRead])
def list_class_session_progress(
db: Session = Depends(get_db),
current_user: User = Depends(require_user),
) -> list[ClassSessionProgress]:
return list(
db.scalars(
select(ClassSessionProgress).where(ClassSessionProgress.user_id == current_user.id)
).all()
)