37 lines
2.2 KiB
Python
37 lines
2.2 KiB
Python
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()
|