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 CourseSessionUser from vbv_lernwelt.iam.permissions import can_view_profile from vbv_lernwelt.media_files.models import UserImage @api_view(["GET", "PUT"]) def me_user_view(request): if not request.user.is_authenticated: return Response(status=403) context = {"langauge": request.user.language} if request.method == "GET": return Response(UserSerializer(request.user, context=context).data) if request.method == "PUT": serializer = UserSerializer( request.user, data=request.data, partial=True, context=context ) if serializer.is_valid(): serializer.save() return Response(UserSerializer(request.user).data) else: return Response(serializer.errors, status=400) return Response(status=400) @api_view(["GET"]) @permission_classes([IsAuthenticated]) def get_profile(request, course_session_id: int, user_id: str): course_session_user = get_object_or_404( CourseSessionUser, course_session_id=course_session_id, user_id=user_id ) if not can_view_profile(request.user, course_session_user): return Response(status=403) return Response(UserSerializer(course_session_user.user).data) @api_view(["POST"]) @permission_classes([IsAuthenticated]) def post_avatar(request): if "file" not in request.FILES: return Response(status=400) request.user.avatar = UserImage.objects.create( file=request.FILES["file"], ) request.user.save() return Response({"url": request.user.avatar_url})