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