vbv/server/vbv_lernwelt/api/user.py

62 lines
1.8 KiB
Python

from django.shortcuts import get_object_or_404
from rest_framework.decorators import api_view, permission_classes
from rest_framework.generics import get_object_or_404
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from vbv_lernwelt.core.serializers import UserSerializer
from vbv_lernwelt.course.models import Course, CourseSessionUser
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
from vbv_lernwelt.learning_mentor.models import LearningMentor
@api_view(["GET", "PUT"])
def me_user_view(request):
if not request.user.is_authenticated:
return Response(status=403)
if request.method == "GET":
return Response(UserSerializer(request.user).data)
if request.method == "PUT":
serializer = UserSerializer(
request.user,
data=request.data,
partial=True,
)
if serializer.is_valid():
serializer.save()
return Response(UserSerializer(request.user).data)
return Response(status=400)
@api_view(["GET"])
@permission_classes([IsAuthenticated])
def get_cockpit_type(request, course_id: int):
course = get_object_or_404(Course, id=course_id)
is_mentor = LearningMentor.objects.filter(
mentor=request.user, course=course
).exists()
is_expert = CourseSessionUser.objects.filter(
user=request.user,
course_session__course=course,
role=CourseSessionUser.Role.EXPERT,
).exists()
is_supervisor = CourseSessionGroup.objects.filter(
course_session__course=course, supervisor=request.user
).exists()
if is_mentor:
cockpit_type = "mentor"
elif is_expert or is_supervisor:
cockpit_type = "expert"
else:
cockpit_type = None
return Response({"type": cockpit_type})