Refactor course expert serializer
This commit is contained in:
parent
597c9f267b
commit
47770bde90
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue