Refactor course expert serializer

This commit is contained in:
Daniel Egger 2023-01-09 17:57:54 +01:00
parent 597c9f267b
commit 47770bde90
4 changed files with 18 additions and 27 deletions

View File

@ -75,9 +75,8 @@ export const useCourseSessionsStore = defineStore("courseSessions", () => {
if (courseSessionForRoute.value) { if (courseSessionForRoute.value) {
const userStore = useUserStore(); const userStore = useUserStore();
return ( return (
courseSessionForRoute.value.experts.filter( userStore.course_session_experts.includes(courseSessionForRoute.value.id) ||
(expert) => expert.user_id === userStore.id userStore.is_superuser
).length > 0
); );
} }

View File

@ -14,6 +14,8 @@ export type UserState = {
email: string; email: string;
username: string; username: string;
avatar_url: string; avatar_url: string;
is_superuser: boolean;
course_session_experts: number[];
loggedIn: boolean; loggedIn: boolean;
}; };
@ -24,6 +26,8 @@ const initialUserState: UserState = {
last_name: "", last_name: "",
username: "", username: "",
avatar_url: "", avatar_url: "",
is_superuser: false,
course_session_experts: [],
loggedIn: false, loggedIn: false,
}; };

View File

@ -1,9 +1,12 @@
from rest_framework import serializers from rest_framework import serializers
from vbv_lernwelt.core.models import User from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.models import CourseSessionUser
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
course_session_experts = serializers.SerializerMethodField()
class Meta: class Meta:
model = User model = User
fields = [ fields = [
@ -13,4 +16,13 @@ class UserSerializer(serializers.ModelSerializer):
"email", "email",
"username", "username",
"avatar_url", "avatar_url",
"is_superuser",
"course_session_experts",
] ]
def get_course_session_experts(self, obj):
qs = CourseSessionUser.objects.filter(
role=CourseSessionUser.Role.EXPERT, user=obj
)
return [csu.course_session.id for csu in qs]

View File

@ -6,9 +6,7 @@ from vbv_lernwelt.course.models import (
CourseCategory, CourseCategory,
CourseCompletion, CourseCompletion,
CourseSession, CourseSession,
CourseSessionUser,
) )
from vbv_lernwelt.learnpath.models import Circle
class CourseSerializer(serializers.ModelSerializer): class CourseSerializer(serializers.ModelSerializer):
@ -50,7 +48,6 @@ class CourseSessionSerializer(serializers.ModelSerializer):
learning_path_url = serializers.SerializerMethodField() learning_path_url = serializers.SerializerMethodField()
competence_url = serializers.SerializerMethodField() competence_url = serializers.SerializerMethodField()
media_library_url = serializers.SerializerMethodField() media_library_url = serializers.SerializerMethodField()
experts = serializers.SerializerMethodField()
documents = serializers.SerializerMethodField() documents = serializers.SerializerMethodField()
def get_course(self, obj): def get_course(self, obj):
@ -68,26 +65,6 @@ class CourseSessionSerializer(serializers.ModelSerializer):
def get_competence_url(self, obj): def get_competence_url(self, obj):
return obj.course.get_competence_url() return obj.course.get_competence_url()
def get_experts(self, obj):
expert_relations = CourseSessionUser.objects.filter(
expert__in=Circle.objects.descendant_of(obj.course.coursepage)
).distinct()
expert_result = []
for er in expert_relations:
for circle in er.expert.all():
expert_result.append(
{
"user_id": er.user.id,
"user_email": er.user.email,
"user_first_name": er.user.first_name,
"user_last_name": er.user.last_name,
"circle_id": circle.id,
"circle_slug": circle.slug,
"circle_translation_key": circle.translation_key,
}
)
return expert_result
def get_documents(self, obj): def get_documents(self, obj):
documents = CircleDocument.objects.filter( documents = CircleDocument.objects.filter(
course_session=obj, file__upload_finished_at__isnull=False course_session=obj, file__upload_finished_at__isnull=False
@ -109,7 +86,6 @@ class CourseSessionSerializer(serializers.ModelSerializer):
"competence_url", "competence_url",
"media_library_url", "media_library_url",
"course_url", "course_url",
"experts",
"documents", "documents",
] ]