Update dta_service/core/views.py

This commit is contained in:
2025-07-06 17:50:48 +00:00
parent feffea7523
commit 680e9a1b8a

View File

@@ -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