Files

35 lines
1.4 KiB
Python

from rest_framework import permissions, viewsets
from apps.bookings.models import Booking, BookingStatus
from apps.bookings.serializers import BookingCreateSerializer, BookingSerializer
from apps.notifications.models import NotificationEvent
from apps.notifications.services import notify_booking_lifecycle, notify_on_status_change
class BookingViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
user = self.request.user
if getattr(user, "is_superuser", False) or user.role == "admin":
return Booking.objects.all().order_by("-created_at")
if user.role == "manager":
return Booking.objects.filter(salon__owner=user).order_by("-created_at")
if user.role == "staff":
return Booking.objects.filter(staff__user=user).order_by("-created_at")
return Booking.objects.filter(customer=user).order_by("-created_at")
def get_serializer_class(self):
if self.action == "create":
return BookingCreateSerializer
return BookingSerializer
def perform_create(self, serializer):
booking = serializer.save()
notify_booking_lifecycle(booking, NotificationEvent.BOOKING_CREATED)
def perform_update(self, serializer):
previous_status = self.get_object().status
booking = serializer.save()
notify_on_status_change(booking, previous_status)