Update dta_service/core/views.py
This commit is contained in:
@@ -1,3 +1,171 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework import generics, permissions, status, viewsets
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework_simplejwt.views import TokenObtainPairView
|
||||
from rest_framework_simplejwt.tokens import RefreshToken
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.shortcuts import get_object_or_404
|
||||
from .models import (
|
||||
PropertyOwner, Vendor, Property, VideoCategory, Video,
|
||||
UserVideoProgress, Conversation, Message
|
||||
)
|
||||
from .serializers import (
|
||||
CustomTokenObtainPairSerializer, UserSerializer, UserRegisterSerializer,
|
||||
PropertyOwnerSerializer, VendorSerializer, PropertySerializer,
|
||||
VideoCategorySerializer, VideoSerializer, UserVideoProgressSerializer,
|
||||
ConversationSerializer, MessageSerializer, PasswordResetRequestSerializer,
|
||||
PasswordResetConfirmSerializer
|
||||
)
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from .permissions import IsOwnerOrReadOnly, IsPropertyOwner, IsVendor, IsParticipant
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework import filters
|
||||
|
||||
# Create your views here.
|
||||
User = get_user_model()
|
||||
|
||||
class CustomTokenObtainPairView(TokenObtainPairView):
|
||||
serializer_class = CustomTokenObtainPairSerializer
|
||||
|
||||
class UserRegisterView(generics.CreateAPIView):
|
||||
queryset = User.objects.all()
|
||||
serializer_class = UserRegisterSerializer
|
||||
permission_classes = [permissions.AllowAny]
|
||||
|
||||
class LogoutView(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request):
|
||||
try:
|
||||
refresh_token = request.data["refresh_token"]
|
||||
token = RefreshToken(refresh_token)
|
||||
token.blacklist()
|
||||
return Response(status=status.HTTP_205_RESET_CONTENT)
|
||||
except Exception as e:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class PasswordResetRequestView(APIView):
|
||||
permission_classes = [permissions.AllowAny]
|
||||
|
||||
def post(self, request):
|
||||
serializer = PasswordResetRequestSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(
|
||||
{"detail": "Password reset email has been sent."},
|
||||
status=status.HTTP_200_OK
|
||||
)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class PasswordResetConfirmView(APIView):
|
||||
permission_classes = [permissions.AllowAny]
|
||||
|
||||
def post(self, request):
|
||||
serializer = PasswordResetConfirmSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(
|
||||
{"detail": "Password has been reset successfully."},
|
||||
status=status.HTTP_200_OK
|
||||
)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class PropertyOwnerViewSet(viewsets.ModelViewSet):
|
||||
queryset = PropertyOwner.objects.all()
|
||||
serializer_class = PropertyOwnerSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
|
||||
search_fields = ['user__first_name', 'user__last_name', 'user__email']
|
||||
|
||||
class VendorViewSet(viewsets.ModelViewSet):
|
||||
queryset = Vendor.objects.all()
|
||||
serializer_class = VendorSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
|
||||
search_fields = ['business_name', 'user__first_name', 'user__last_name', 'user__email']
|
||||
filterset_fields = ['business_type']
|
||||
|
||||
class PropertyViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = PropertySerializer
|
||||
permission_classes = [IsAuthenticated, IsOwnerOrReadOnly]
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
|
||||
search_fields = ['address', 'city', 'state', 'zip_code']
|
||||
filterset_fields = ['owner', 'state', 'city']
|
||||
|
||||
def get_queryset(self):
|
||||
user = self.request.user
|
||||
if user.user_type == 'property_owner':
|
||||
return Property.objects.filter(owner__user=user)
|
||||
return Property.objects.all()
|
||||
|
||||
def perform_create(self, serializer):
|
||||
if self.request.user.user_type == 'property_owner':
|
||||
owner = PropertyOwner.objects.get(user=self.request.user)
|
||||
serializer.save(owner=owner)
|
||||
else:
|
||||
serializer.save()
|
||||
|
||||
class VideoCategoryViewSet(viewsets.ModelViewSet):
|
||||
queryset = VideoCategory.objects.all()
|
||||
serializer_class = VideoCategorySerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
class VideoViewSet(viewsets.ModelViewSet):
|
||||
queryset = Video.objects.all()
|
||||
serializer_class = VideoSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
|
||||
search_fields = ['title', 'description']
|
||||
filterset_fields = ['category']
|
||||
|
||||
class UserVideoProgressViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = UserVideoProgressSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
return UserVideoProgress.objects.filter(user=self.request.user)
|
||||
|
||||
def perform_create(self, serializer):
|
||||
serializer.save(user=self.request.user)
|
||||
|
||||
class ConversationViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = ConversationSerializer
|
||||
permission_classes = [IsAuthenticated, IsParticipant]
|
||||
|
||||
def get_queryset(self):
|
||||
user = self.request.user
|
||||
if user.user_type == 'property_owner':
|
||||
owner = PropertyOwner.objects.get(user=user)
|
||||
return Conversation.objects.filter(property_owner=owner)
|
||||
elif user.user_type == 'vendor':
|
||||
vendor = Vendor.objects.get(user=user)
|
||||
return Conversation.objects.filter(vendor=vendor)
|
||||
return Conversation.objects.none()
|
||||
|
||||
def perform_create(self, serializer):
|
||||
if self.request.user.user_type == 'property_owner':
|
||||
owner = PropertyOwner.objects.get(user=self.request.user)
|
||||
serializer.save(property_owner=owner)
|
||||
elif self.request.user.user_type == 'vendor':
|
||||
vendor = Vendor.objects.get(user=self.request.user)
|
||||
serializer.save(vendor=vendor)
|
||||
|
||||
class MessageViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = MessageSerializer
|
||||
permission_classes = [IsAuthenticated, IsParticipant]
|
||||
|
||||
def get_queryset(self):
|
||||
conversation_id = self.kwargs.get('conversation_id')
|
||||
conversation = get_object_or_404(Conversation, id=conversation_id)
|
||||
self.check_object_permissions(self.request, conversation)
|
||||
return Message.objects.filter(conversation=conversation).order_by('timestamp')
|
||||
|
||||
def perform_create(self, serializer):
|
||||
conversation_id = self.kwargs.get('conversation_id')
|
||||
conversation = get_object_or_404(Conversation, id=conversation_id)
|
||||
self.check_object_permissions(self.request, conversation)
|
||||
serializer.save(conversation=conversation, sender=self.request.user)
|
||||
|
||||
def get_serializer_context(self):
|
||||
context = super().get_serializer_context()
|
||||
context['conversation_id'] = self.kwargs.get('conversation_id')
|
||||
return context
|
||||
|
||||
Reference in New Issue
Block a user