my_book_list_api/books/views.py
2025-12-16 11:17:41 +01:00

83 lines
3.0 KiB
Python

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)
def delete(self, request, book_id):
try:
book = Book.objects.get(id=book_id)
book.delete()
return Response(status=status.HTTP_200_OK)
except Book.DoesNotExist:
return Response({"message": "Ce livre n'existe pas"}, status=status.HTTP_404_NOT_FOUND)
class BookDetailView(APIView):
permission_classes = [IsAuthenticatedOrReadOnly]
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,
})