vbv/server/vbv_lernwelt/course_session/graphql/mutations.py

71 lines
2.2 KiB
Python

import graphene
import structlog
from rest_framework.exceptions import PermissionDenied
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.permissions import has_course_access
from vbv_lernwelt.course_session.graphql.types import (
CourseSessionAttendanceCourseType,
)
from vbv_lernwelt.course_session.models import CourseSessionAttendanceCourse
from vbv_lernwelt.course_session.services.attendance import AttendanceUserStatus
logger = structlog.get_logger(__name__)
class AttendanceUserInputType(graphene.InputObjectType):
user_id = graphene.ID(required=True)
status = graphene.Field(
graphene.Enum.from_enum(AttendanceUserStatus), required=True
)
class AttendanceCourseUserMutation(graphene.Mutation):
course_session_attendance_course = graphene.Field(CourseSessionAttendanceCourseType)
class Input:
id = graphene.ID(required=True)
attendance_user_list = graphene.List(AttendanceUserInputType, required=True)
@classmethod
def mutate(
cls,
root,
info,
id,
attendance_user_list,
):
attendance_course = CourseSessionAttendanceCourse.objects.get(id=id)
if not has_course_access(
info.context.user,
attendance_course.course_session.course_id,
):
raise PermissionDenied()
# FIXME: create completion for every user in attendance_user_list
result_user_list = []
for attendance_user in attendance_user_list:
u = User.objects.filter(id=attendance_user.user_id).first()
if u is not None:
result_user_list.append(
{
"user_id": u.id,
"email": u.email,
"first_name": u.first_name,
"last_name": u.last_name,
}
)
attendance_course.attendance_user_list = result_user_list
attendance_course.save()
return AttendanceCourseUserMutation(
course_session_attendance_course=attendance_course
)
class CourseSessionMutation:
update_course_session_attendance_course_users = AttendanceCourseUserMutation.Field()