from sqlalchemy import delete, select from .models import (CourseObjective, GraduationIndicator, RubricCriterion, RubricScoreLevel, TopicDirection) def sync_course_entities(db, version): db.execute(delete(CourseObjective).where(CourseObjective.course_version_id == version.id)) db.execute(delete(GraduationIndicator).where(GraduationIndicator.course_version_id == version.id)) db.execute(delete(TopicDirection).where(TopicDirection.course_version_id == version.id)) for value in version.objectives: db.add(CourseObjective(course_version_id=version.id, code=str(value["code"]), name=value["name"], description=value.get("description", ""), indicator_codes=value.get("indicators", []))) for value in version.indicators: db.add(GraduationIndicator(course_version_id=version.id, code=str(value["code"]), description=value["description"])) for value in version.directions: db.add(TopicDirection(course_version_id=version.id, name=value["name"], examples=value.get("examples", []))) db.flush() def sync_rubric_entities(db, rubric): ids = db.scalars(select(RubricCriterion.id).where(RubricCriterion.rubric_version_id == rubric.id)).all() if ids: db.execute(delete(RubricScoreLevel).where(RubricScoreLevel.rubric_criterion_id.in_(ids))) db.execute(delete(RubricCriterion).where(RubricCriterion.rubric_version_id == rubric.id)) for value in rubric.criteria: item = RubricCriterion(rubric_version_id=rubric.id, criterion_id=value["criterion_id"], category=value["category"], name=value["name"], description=value["description"], max_score=value["max_score"], linked_objectives=value.get("linked_objectives", []), linked_outcomes=value.get("linked_outcomes", []), required_evidence=value.get("required_evidence", [])) db.add(item) db.flush() for level in value.get("score_levels", []): db.add(RubricScoreLevel(rubric_criterion_id=item.id, min_score=level["min"], max_score=level["max"], description=level["description"])) db.flush()