diff --git a/server/vbv_lernwelt/course/graphql/types.py b/server/vbv_lernwelt/course/graphql/types.py index 2c243ccd..89bc4b47 100644 --- a/server/vbv_lernwelt/course/graphql/types.py +++ b/server/vbv_lernwelt/course/graphql/types.py @@ -291,8 +291,8 @@ class CourseSessionObjectType(DjangoObjectType): _add_course_session_user(rel.participant) if self.course.configuration.is_uk: - # happy path, members and experts if me_csu: + # VBV-708: Teilnehmer und Trainer haben Zugriff auf alle Teilnehmer im Ük for course_session_user in CourseSessionUser.objects.filter( course_session_id=self.id ).distinct(): @@ -300,6 +300,45 @@ class CourseSessionObjectType(DjangoObjectType): user.id for user in course_session_users_resolved ]: _add_course_session_user(course_session_user) + elif CourseSessionGroup.objects.filter( + supervisor=info.context.user, course_session=self + ).exists(): + # VBV-708: Supervisor (Regionenleiter) has access to all users and circles + for course_session_user in CourseSessionUser.objects.filter( + course_session_id=self.id + ).distinct(): + if course_session_user.id not in [ + user.id for user in course_session_users_resolved + ]: + _add_course_session_user(course_session_user) + + circles = ( + self.course.get_learning_path() + .get_descendants() + .live() + .specific() + .exact_type(Circle) + ) + user = info.context.user + course_session_users_resolved.append( + CourseSessionUserObjectsType( + id=f"{user.id}-{self.id}-as-ephemeral-supervisor", # noqa + user_id=user.id, # noqa + first_name=user.first_name, # noqa + last_name=user.last_name, # noqa + email=user.email, # noqa + avatar_url=user.avatar_url, # noqa + role=CourseSessionUser.Role.EXPERT, # noqa + circles=[ # noqa + CourseSessionUserExpertCircleType( # noqa + id=circle.id, # noqa + title=circle.title, # noqa + slug=circle.slug, # noqa + ) + for circle in circles + ], + ) + ) else: # VBV-708: user has only "AgentParticipantRole" and is not in the list of users for rel in AgentParticipantRelation.objects.filter( @@ -310,67 +349,4 @@ class CourseSessionObjectType(DjangoObjectType): ]: _add_course_session_user(rel.participant) - # workaround for supervisor - # add supervisor to the list of users (as expert) - course_session_id = self.id # noqa - user = info.context.user # noqa - - if CourseSessionGroup.objects.filter( - course_session=course_session_id, supervisor=user - ).exists(): - if course_session := CourseSession.objects.filter( - id=course_session_id - ).first(): - circles = ( - course_session.course.get_learning_path() - .get_descendants() - .live() - .specific() - .exact_type(Circle) - ) - - course_session_users_resolved.append( - CourseSessionUserObjectsType( - id=f"{user.id}-as-ephemeral-supervisor", # noqa - user_id=user.id, # noqa - first_name=user.first_name, # noqa - last_name=user.last_name, # noqa - email=user.email, # noqa - avatar_url=user.avatar_url, # noqa - role=CourseSessionUser.Role.EXPERT, # noqa - circles=[ # noqa - CourseSessionUserExpertCircleType( # noqa - id=circle.id, # noqa - title=circle.title, # noqa - slug=circle.slug, # noqa - ) - for circle in circles - ], - ) - ) - return course_session_users_resolved - - def _add_course_session_user( - self, course_session_user, course_session_users_resolved - ): - course_session_users_resolved.append( - CourseSessionUserObjectsType( - id=course_session_user.id, # noqa - user_id=course_session_user.user.id, # noqa - first_name=course_session_user.user.first_name, # noqa - last_name=course_session_user.user.last_name, # noqa - email=course_session_user.user.email, # noqa - avatar_url=course_session_user.user.avatar_url, # noqa - role=course_session_user.role, # noqa - circles=[ # noqa - CourseSessionUserExpertCircleType( # noqa - id=circle.id, # noqa - title=circle.title, # noqa - slug=circle.slug, # noqa - ) - for circle in course_session_user.expert.all() # noqa - ], - optional_attendance=course_session_user.optional_attendance, # noqa - ) - )