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)