feat: add versioned backend scoring workflow
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user