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)