71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
import structlog
|
|
from rest_framework.decorators import api_view
|
|
from rest_framework.response import Response
|
|
from wagtail.models import Page
|
|
|
|
from vbv_lernwelt.completion.models import CircleCompletion
|
|
from vbv_lernwelt.completion.serializers import CircleCompletionSerializer
|
|
from vbv_lernwelt.learnpath.models import Circle, LearningPath
|
|
from vbv_lernwelt.learnpath.utils import get_wagtail_type
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
|
|
@api_view(['GET'])
|
|
def request_circle_completion(request, circle_key):
|
|
response_data = CircleCompletionSerializer(
|
|
CircleCompletion.objects.filter(user=request.user, circle_key=circle_key),
|
|
many=True,
|
|
).data
|
|
|
|
return Response(status=200, data=response_data)
|
|
|
|
|
|
@api_view(['GET'])
|
|
def request_learning_path_completion(request, learning_path_key):
|
|
response_data = CircleCompletionSerializer(
|
|
CircleCompletion.objects.filter(user=request.user, learning_path_key=learning_path_key),
|
|
many=True,
|
|
).data
|
|
|
|
return Response(status=200, data=response_data)
|
|
|
|
|
|
@api_view(['POST'])
|
|
def mark_circle_completion(request):
|
|
page_key = request.data.get('page_key')
|
|
completed = request.data.get('completed', True)
|
|
|
|
page = Page.objects.get(translation_key=page_key, locale__language_code='de-CH')
|
|
page_type = get_wagtail_type(page.specific)
|
|
circle = Circle.objects.ancestor_of(page).first()
|
|
learning_path = LearningPath.objects.ancestor_of(page).first()
|
|
|
|
cc, created = CircleCompletion.objects.get_or_create(
|
|
user=request.user,
|
|
page_key=page_key,
|
|
circle_key=circle.translation_key,
|
|
learning_path_key=learning_path.translation_key,
|
|
)
|
|
cc.page_type = page_type
|
|
cc.completed = completed
|
|
cc.save()
|
|
|
|
response_data = CircleCompletionSerializer(
|
|
CircleCompletion.objects.filter(user=request.user, circle_key=circle.translation_key),
|
|
many=True,
|
|
).data
|
|
|
|
logger.debug(
|
|
'page completed',
|
|
label='completion_api',
|
|
circle_key=circle.translation_key,
|
|
circle_title=circle.title,
|
|
page_key=page_key,
|
|
page_type=page_type,
|
|
page_title=page.title,
|
|
user_id=request.user.id,
|
|
)
|
|
|
|
return Response(status=200, data=response_data)
|