vbv/server/vbv_lernwelt/completion/views.py

67 lines
2.2 KiB
Python

import structlog
from rest_framework.decorators import api_view
from rest_framework.response import Response
from vbv_lernwelt.completion.models import LearningContentCompletion, UserCircleCompletion
from vbv_lernwelt.completion.serializers import UserCircleCompletionSerializer, LearningContentCompletionSerializer
from vbv_lernwelt.learnpath.models import LearningContent
logger = structlog.get_logger(__name__)
@api_view(['GET'])
def request_user_circle_completion(request, circle_key):
ucc = UserCircleCompletion.objects.filter(
user=request.user,
circle_key=circle_key,
)
response_data = {}
if ucc.count() > 0:
response_data = UserCircleCompletionSerializer(ucc.first()).data
response_data['completed_learning_contents'] = LearningContentCompletionSerializer(
LearningContentCompletion.objects.filter(circle_key=circle_key, user=request.user),
many=True
).data
return Response(status=200, data=response_data)
@api_view(['POST'])
def complete_learning_content(request):
learning_content_key = request.data.get('learning_content_key')
completed = request.data.get('completed', True)
learning_content = LearningContent.objects.get(translation_key=learning_content_key)
circle_key = learning_content.get_parent().translation_key
lcc, created = LearningContentCompletion.objects.get_or_create(
user=request.user,
learning_content_key=learning_content_key,
circle_key=circle_key,
)
lcc.completed = completed
lcc.save()
ucc, created = UserCircleCompletion.objects.get_or_create(
user=request.user,
circle_key=circle_key,
)
response_data = UserCircleCompletionSerializer(ucc).data
response_data['completed_learning_contents'] = LearningContentCompletionSerializer(
LearningContentCompletion.objects.filter(circle_key=circle_key, user=request.user),
many=True
).data
logger.debug(
'learning content completed',
label='completion_api',
circle_key=circle_key,
learning_content_key=learning_content_key,
user_id=request.user.id,
)
return Response(status=200, data=response_data)