diff --git a/manage_events/api/filters.py b/manage_events/api/filters.py index e26a938..856ccbe 100644 --- a/manage_events/api/filters.py +++ b/manage_events/api/filters.py @@ -7,7 +7,7 @@ class EventFilter(filters.FilterSet): """ FilterSet for Event model. """ - title = filters.CharFilter(field_name="title", lookup_expr="icontains") + title = filters.CharFilter(method="filter_title") location = filters.CharFilter(field_name="venue__address", lookup_expr="icontains") category = filters.CharFilter(method="filter_category") start_date = filters.DateFilter(field_name="start_date", lookup_expr="gte") @@ -29,6 +29,13 @@ class EventFilter(filters.FilterSet): 'age_group', ] + def filter_title(self, queryset, name, value): + if value: + return queryset.filter( + Q(title__icontains=value) | Q(tags__name__icontains=value) + ).distinct() + return queryset + def filter_category(self, queryset, name, value): category = value.split(',') return queryset.filter(category__title__in=category) diff --git a/manage_events/api/urls.py b/manage_events/api/urls.py index 1937875..07fc2b4 100644 --- a/manage_events/api/urls.py +++ b/manage_events/api/urls.py @@ -11,7 +11,7 @@ urlpatterns = [ name="add_event", ), path("edit-event//", views.EventEditAPIView.as_view(), name="event-edit"), - path("get-events/", views.EventsAPIView.as_view(), name="events"), + path( "event//", views.EventDetailAPIView.as_view(), @@ -135,6 +135,8 @@ urlpatterns = [ name="age_group_list" ), + path("get-events/calendar/", views.EventsCalenderAPIView.as_view(), name="events-calendar"), + # event list with filter path( "events/", diff --git a/manage_events/api/views.py b/manage_events/api/views.py index 6c135c1..3a682ed 100644 --- a/manage_events/api/views.py +++ b/manage_events/api/views.py @@ -199,67 +199,6 @@ class VenueDeleteAPIView(APIView): ) -class EventsAPIView(APIView): - authentication_classes = [JWTAuthentication] - permission_classes = [IsAuthenticated] - - def get(self, request, *args, **kwargs): - filter = request.query_params.get("filter", None) - query = request.query_params.get("query", None) - category_id = request.query_params.get("category_id", None) - params = [ - "expensive", - "cheap", - "preference", - "today", - "tomorrow", - "category", - "key_guest", - "tags", - ] - if filter not in params: - return ApiResponse.error( - status=status.HTTP_400_BAD_REQUEST, - message=constants.FAILURE, - errors="No filter found", - ) - - try: - if filter == "today": - events = services.EventFilterService.filter_events_for_today() - elif filter == "tomorrow": - events = services.EventFilterService.filter_events_for_tomorrow() - elif filter == "key_guest": - events = services.EventFilterService.filter_events_by_search( - search_query=query - ) - elif filter == "category" and category_id is not None: - events = services.EventFilterService.filter_events_by_category( - int(category_id) - ) - else: - events = services.EventFilterService.filter_events( - filter_type=filter, principal=request.user - ) - # serializer = EventDetailSerializer( - # events, context={"request": request}, many=True - # ) - serializer = EventListSerializer( - events, context={"request": request}, many=True - ) - return ApiResponse.success( - status=status.HTTP_200_OK, - message=constants.SUCCESS, - data=serializer.data, - ) - except Exception as e: - return ApiResponse.error( - status=status.HTTP_400_BAD_REQUEST, - message=constants.FAILURE, - errors=str(e), - ) - - class MyEventsAPIView(APIView): authentication_classes = [JWTAuthentication] permission_classes = [IsAuthenticated] @@ -1040,6 +979,46 @@ class AgeGroupListView(APIView): return ApiResponse.success(message=constants.SUCCESS, data=serializer.data) +class EventsCalenderAPIView(APIView): + authentication_classes = [JWTAuthentication] + permission_classes = [IsAuthenticated] + + def get(self, request, *args, **kwargs): + try: + principal = request.user + queryset = Event.objects.filter( + active=True, + draft=False, + deleted=False, + end_date__gte=timezone.now().date() + ) + + # queryset = Event.objects.filter( + # ((Q(active=True) & Q(draft=False) & Q(deleted=False) & Q(end_date__gte=timezone.now().date()))) + # ) + + preferences = PrincipalPreference.objects.get(principal=principal) + preferred_categories_ids = preferences.preferred_categories.values_list("id", flat=True) + + # Filter the queryset to only include events in the user's preferred categories + queryset = queryset.filter(Q(category__in=preferred_categories_ids) | Q(principal=principal)) + + serializer = EventListSerializer( + queryset, context={"request": request}, many=True + ) + return ApiResponse.success( + status=status.HTTP_200_OK, + message=constants.SUCCESS, + data=serializer.data, + ) + except Exception as e: + return ApiResponse.error( + status=status.HTTP_400_BAD_REQUEST, + message=constants.FAILURE, + errors=str(e), + ) + + class EventListView(generics.ListAPIView): authentication_classes = [JWTAuthentication] permission_classes = [IsAuthenticated]