diff --git a/booking_system/views.py b/booking_system/views.py index 9c3718d..30ed2f4 100644 --- a/booking_system/views.py +++ b/booking_system/views.py @@ -18,10 +18,10 @@ def api_root(request, format=None): 'methods': ['POST'], 'required_fields': ['email', 'first_name', 'last_name', 'password', 'password2'], 'example_request': { - 'email': 'user@example.com', - 'first_name': 'John', - 'last_name': 'Doe', - 'phone_number': '+1234567890', + 'email': 'saanii929@gmail', + 'first_name': 'Saani', + 'last_name': 'Iddi', + 'phone_number': '+233552732025', 'password': 'SecurePassword123', 'password2': 'SecurePassword123' } @@ -32,7 +32,7 @@ def api_root(request, format=None): 'methods': ['POST'], 'required_fields': ['email', 'otp'], 'example_request': { - 'email': 'user@example.com', + 'email': 'saanii929@gmail', 'otp': '123456' } }, @@ -42,7 +42,7 @@ def api_root(request, format=None): 'methods': ['POST'], 'required_fields': ['email', 'password'], 'example_request': { - 'email': 'user@example.com', + 'email': 'saanii929@gmail', 'password': 'SecurePassword123' } }, @@ -53,7 +53,7 @@ def api_root(request, format=None): 'required_fields': ['email'], 'optional_fields': ['context (registration/password_reset)'], 'example_request': { - 'email': 'user@example.com', + 'email': 'saanii929@gmail', 'context': 'registration' } }, @@ -63,7 +63,7 @@ def api_root(request, format=None): 'methods': ['POST'], 'required_fields': ['email'], 'example_request': { - 'email': 'user@example.com' + 'email': 'saanii929@gmail' } }, 'verify_password_reset_otp': { @@ -72,7 +72,7 @@ def api_root(request, format=None): 'methods': ['POST'], 'required_fields': ['email', 'otp'], 'example_request': { - 'email': 'user@example.com', + 'email': 'saanii929@gmail', 'otp': '123456' } }, @@ -82,7 +82,7 @@ def api_root(request, format=None): 'methods': ['POST'], 'required_fields': ['email', 'otp', 'new_password', 'confirm_password'], 'example_request': { - 'email': 'user@example.com', + 'email': 'saanii929@gmail', 'otp': '123456', 'new_password': 'NewSecurePassword123', 'confirm_password': 'NewSecurePassword123' @@ -104,9 +104,9 @@ def api_root(request, format=None): "authentication": "Required (Authenticated users only)", "required_fields": ["first_name", "last_name", "phone_number"], "example_request": { - "first_name": "John", - "last_name": "Doe", - "phone_number": "+1234567890" + "first_name": "Saani", + "last_name": "Iddi", + "phone_number": "+233552732025" } }, "get_profile": { @@ -291,8 +291,10 @@ def api_root(request, format=None): "user_appointments": { "description": "Get appointments for the authenticated user", "url": request.build_absolute_uri("/api/meetings/user/appointments/"), - "methods": ["GET"], + "methods": ["GET", "POST"], "authentication": "Required", + "request_fields": ["email"], + "example_request": {"email": "saanii929@gmail.com"}, "response": "List of user's appointment requests with enhanced availability data" }, "schedule_appointment": { diff --git a/meetings/views.py b/meetings/views.py index bb866f0..437bfbd 100644 --- a/meetings/views.py +++ b/meetings/views.py @@ -232,7 +232,6 @@ class WeeklyAvailabilityView(generics.GenericAPIView): return Response(weekly_availability) - class UserAppointmentsView(generics.ListAPIView): permission_classes = [IsAuthenticated] serializer_class = AppointmentRequestSerializer @@ -241,6 +240,26 @@ class UserAppointmentsView(generics.ListAPIView): return AppointmentRequest.objects.filter( email=self.request.user.email ).order_by('-created_at') + + def post(self, request, *args, **kwargs): + email = request.data.get('email') + + if not email: + return Response( + {"error": "Email is required"}, + status=status.HTTP_400_BAD_REQUEST + ) + + if email != request.user.email: + return Response( + {"error": "You can only view your own appointments"}, + status=status.HTTP_403_FORBID_REQUEST + ) + + appointments = AppointmentRequest.objects.filter(email__iexact=email).order_by('-created_at') + + serializer = self.get_serializer(appointments, many=True) + return Response(serializer.data) class AppointmentStatsView(generics.GenericAPIView): @@ -285,15 +304,14 @@ class UserAppointmentStatsView(generics.GenericAPIView): status=status.HTTP_403_FORBIDDEN ) - stats = AppointmentRequest.objects.filter( - email=email - ).aggregate( - total=Count('id'), - pending=Count('id', filter=Q(status='pending_review')), - scheduled=Count('id', filter=Q(status='scheduled')), - rejected=Count('id', filter=Q(status='rejected')), - completed=Count('id', filter=Q(status='completed')) - ) + appointments = AppointmentRequest.objects.filter(email__iexact=email) + stats = { + 'total': appointments.count(), + 'pending': appointments.filter(status='pending_review').count(), + 'scheduled': appointments.filter(status='scheduled').count(), + 'rejected': appointments.filter(status='rejected').count(), + 'completed': appointments.filter(status='completed').count(), + } total = stats['total'] scheduled = stats['scheduled'] @@ -309,7 +327,6 @@ class UserAppointmentStatsView(generics.GenericAPIView): 'email': email }) - class MatchingAvailabilityView(generics.GenericAPIView): permission_classes = [IsAuthenticated] diff --git a/templates/emails/admin_notification.html b/templates/emails/admin_notification.html index 63496fc..9ae9354 100644 --- a/templates/emails/admin_notification.html +++ b/templates/emails/admin_notification.html @@ -286,14 +286,6 @@