Files
training-software/cms/views.py
Paperclip CTO 01661bf5a8
Some checks failed
CI / lint (push) Successful in 6s
CI / test (push) Failing after 7s
CI / build-container (push) Has been skipped
fix: restore CI by fixing lint, test collection, and notification syntax
2026-05-18 14:53:29 +02:00

65 lines
2.4 KiB
Python

import uuid
from django.shortcuts import get_object_or_404
from rest_framework import status
from rest_framework.parsers import MultiPartParser
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import ContentBlock
from .serializers import ContentBlockSerializer, MediaAssetSerializer
from .upload import UploadValidationError, save_upload, validate_upload
class MediaUploadView(APIView):
permission_classes = [IsAuthenticated]
parser_classes = [MultiPartParser]
def post(self, request):
file = request.FILES.get("file")
if not file:
return Response({"detail": "No file provided."}, status=status.HTTP_400_BAD_REQUEST)
org_id = request.data.get("org_id") or str(uuid.uuid4())
try:
validate_upload(file)
except UploadValidationError as exc:
return Response({"detail": str(exc)}, status=status.HTTP_400_BAD_REQUEST)
asset = save_upload(file, org_id=org_id, uploader=request.user)
return Response(MediaAssetSerializer(asset).data, status=status.HTTP_201_CREATED)
class PageContentBlocksView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, page_id):
blocks = ContentBlock.objects.filter(page_id=page_id).select_related("media_asset")
return Response(ContentBlockSerializer(blocks, many=True).data)
def post(self, request, page_id):
from courses.models import Page
get_object_or_404(Page, pk=page_id)
data = {**request.data, "page": page_id}
serializer = ContentBlockSerializer(data=data)
serializer.is_valid(raise_exception=True)
block = serializer.save(page_id=page_id)
return Response(ContentBlockSerializer(block).data, status=status.HTTP_201_CREATED)
class ContentBlockDetailView(APIView):
permission_classes = [IsAuthenticated]
def patch(self, request, block_id):
block = get_object_or_404(ContentBlock, pk=block_id)
serializer = ContentBlockSerializer(block, data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(ContentBlockSerializer(block).data)
def delete(self, request, block_id):
block = get_object_or_404(ContentBlock, pk=block_id)
block.delete()
return Response(status=status.HTTP_204_NO_CONTENT)