vbv/server/vbv_lernwelt/course/services.py

32 lines
1.0 KiB
Python

from vbv_lernwelt.core.utils import get_django_content_type
from vbv_lernwelt.course.models import CourseCompletion, CourseCompletionStatus
def mark_course_completion(
page, user, course_session, completion_status=CourseCompletionStatus.SUCCESS.value
):
if completion_status not in CourseCompletionStatus.__members__:
raise ValueError(
f"Invalid value for CourseCompletionStatus: {completion_status}"
)
if not (
hasattr(page.specific, "has_course_completion_status")
and page.specific.has_course_completion_status
):
return ValueError(
f"Page {page.id} of type {get_django_content_type(page)}"
f" cannot be marked as completed"
)
cc, created = CourseCompletion.objects.get_or_create(
user_id=user.id,
page_id=page.id,
course_session_id=course_session.id,
)
cc.completion_status = completion_status
cc.page_type = get_django_content_type(page.specific)
cc.save()
return cc