from rest_framework.decorators import api_view from rest_framework.parsers import FormParser, MultiPartParser from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticatedOrReadOnly, IsAuthenticated from rest_framework import status from .models import Book, CustomUser from .serializers import BookSerializer class BookListCreateView(APIView): permission_classes = [IsAuthenticatedOrReadOnly] parser_classes = [MultiPartParser, FormParser] def get(self, request): books = Book.objects.all() serializer = BookSerializer(books, many=True) return Response(serializer.data) def post(self, request): serializer = BookSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class BookDetailView(APIView): permission_classes = [IsAuthenticatedOrReadOnly] parser_classes = [MultiPartParser, FormParser] def put(self, request, book_id): book = Book.objects.get(id=book_id) serializer = BookSerializer(book, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) def delete(self, request, book_id): try: book = Book.objects.get(id=book_id) book.delete() return Response(status=status.HTTP_204_NO_CONTENT) except Book.DoesNotExist: return Response({"message": "Ce livre n'existe pas"}, status=status.HTTP_404_NOT_FOUND) @api_view(['GET']) def find_user_by_id(request, user_id): try: user = CustomUser.objects.get(id=user_id) books_queryset = Book.objects.filter(user=user) books_serializer = BookSerializer(books_queryset, many=True) return Response({ 'id': user.id, 'username': user.username, 'first_name': user.first_name, 'last_name': user.last_name, 'email': user.email, 'profile_picture': user.avatar.url if user.avatar else '', 'books': books_serializer.data, }) except CustomUser.DoesNotExist: return Response({"message": "Cet utilisateur n'existe pas"}, status=status.HTTP_404_NOT_FOUND) class UserProfileView(APIView): permission_classes = [IsAuthenticated] def get(self,request): user = request.user books_queryset = Book.objects.filter(user=user) books_serializer = BookSerializer(books_queryset, many=True) return Response({ 'id': user.id, 'username': user.username, 'first_name': user.first_name, 'last_name': user.last_name, 'email': user.email, 'profile_picture': user.avatar.url if user.avatar else '', 'books': books_serializer.data, })