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) {
|
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
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue