vbv/server/vbv_lernwelt/api/user.py

60 lines
1.8 KiB
Python

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})