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) {
const userStore = useUserStore();
return (
courseSessionForRoute.value.experts.filter(
(expert) => expert.user_id === userStore.id
).length > 0
userStore.course_session_experts.includes(courseSessionForRoute.value.id) ||
userStore.is_superuser
);
}

View File

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

View File

@ -1,9 +1,12 @@
from rest_framework import serializers
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.models import CourseSessionUser
class UserSerializer(serializers.ModelSerializer):
course_session_experts = serializers.SerializerMethodField()
class Meta:
model = User
fields = [
@ -13,4 +16,13 @@ class UserSerializer(serializers.ModelSerializer):
"email",
"username",
"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,
CourseCompletion,
CourseSession,
CourseSessionUser,
)
from vbv_lernwelt.learnpath.models import Circle
class CourseSerializer(serializers.ModelSerializer):
@ -50,7 +48,6 @@ class CourseSessionSerializer(serializers.ModelSerializer):
learning_path_url = serializers.SerializerMethodField()
competence_url = serializers.SerializerMethodField()
media_library_url = serializers.SerializerMethodField()
experts = serializers.SerializerMethodField()
documents = serializers.SerializerMethodField()
def get_course(self, obj):
@ -68,26 +65,6 @@ class CourseSessionSerializer(serializers.ModelSerializer):
def get_competence_url(self, obj):
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):
documents = CircleDocument.objects.filter(
course_session=obj, file__upload_finished_at__isnull=False
@ -109,7 +86,6 @@ class CourseSessionSerializer(serializers.ModelSerializer):
"competence_url",
"media_library_url",
"course_url",
"experts",
"documents",
]