optimized event api query and added events till 7 days
This commit is contained in:
@@ -147,7 +147,9 @@ class SMSService:
|
||||
raise SMSError(message=str(e))
|
||||
|
||||
def create_otp(self, principal: IAmPrincipal, opt_purpose: str):
|
||||
old_otp_change = IAmPrincipalOtp.objects.filter(principal=principal).update(is_used=True)
|
||||
old_otp_change = IAmPrincipalOtp.objects.filter(principal=principal).update(
|
||||
is_used=True
|
||||
)
|
||||
print("Everything Is Used..!!")
|
||||
otp = IAmPrincipalOtp.objects.create(
|
||||
principal=principal, otp_purpose=opt_purpose
|
||||
@@ -436,19 +438,22 @@ class InteractionCalculator:
|
||||
|
||||
|
||||
class EventFilterService:
|
||||
today = timezone.now().date()
|
||||
one_week_ago = today - timedelta(days=7)
|
||||
|
||||
# Base query for events that are active, not deleted, not draft, created by active users, and visible up to 1 week after their end date
|
||||
base_event_query = Event.objects.filter(
|
||||
active=True,
|
||||
deleted=False,
|
||||
draft=False,
|
||||
end_date__gte=one_week_ago,
|
||||
created_by__is_active=True,
|
||||
).distinct()
|
||||
|
||||
@staticmethod
|
||||
def filter_events_by_search(search_query=None):
|
||||
today = timezone.now().date()
|
||||
# Filter events that are active, not deleted, not draft, and created by active users
|
||||
filtered_events = Event.objects.filter(
|
||||
deleted=False,
|
||||
active=True,
|
||||
draft=False,
|
||||
created_by__is_active=True,
|
||||
end_date__gte=today, # Only include events that end today or in the future
|
||||
)
|
||||
filtered_events = EventFilterService.base_event_query
|
||||
|
||||
# Optional search filtering on title, key_guest, venue address, and tags
|
||||
if search_query:
|
||||
print("search_query: ", search_query)
|
||||
filtered_events = filtered_events.filter(
|
||||
@@ -458,136 +463,76 @@ class EventFilterService:
|
||||
| Q(tags__name__icontains=search_query)
|
||||
)
|
||||
print("filtered_events: ", filtered_events)
|
||||
else:
|
||||
# Filter events where key_guest is not null if no search query is provided
|
||||
filtered_events = filtered_events.filter(
|
||||
Q(key_guest__isnull=False) & ~Q(key_guest__exact="")
|
||||
)
|
||||
|
||||
# Ensure results are distinct
|
||||
filtered_events = filtered_events.distinct()
|
||||
|
||||
return filtered_events
|
||||
return filtered_events.distinct()
|
||||
|
||||
@staticmethod
|
||||
def filter_events_by_tags(search_query=None):
|
||||
today = timezone.now().date()
|
||||
filtered_events = EventFilterService.base_event_query
|
||||
|
||||
if search_query:
|
||||
print("search_query: ", search_query)
|
||||
filtered_events = Event.objects.filter(
|
||||
filtered_events = filtered_events.filter(
|
||||
tags__isnull=False,
|
||||
deleted=False,
|
||||
active=True,
|
||||
draft=False,
|
||||
created_by__is_active=True,
|
||||
tags__name__icontains=search_query,
|
||||
)
|
||||
|
||||
# filtered_events = (
|
||||
# filtered_events.annotate(
|
||||
# matched_tags=Count(
|
||||
# "tags",
|
||||
# filter=Q(tags__name__icontains=search_query),
|
||||
# distinct=True,
|
||||
# )
|
||||
# )
|
||||
# .filter(matched_tags__gt=0)
|
||||
# .distinct()
|
||||
# )
|
||||
print("filtered_events: ", filtered_events)
|
||||
|
||||
# Filter for current, future, or ongoing events
|
||||
current_and_future_events_query = Q(
|
||||
start_date__lte=today, end_date__gte=today
|
||||
) | Q(start_date__gt=today)
|
||||
filtered_events = filtered_events.filter(current_and_future_events_query)
|
||||
|
||||
return filtered_events
|
||||
return filtered_events.distinct()
|
||||
|
||||
@staticmethod
|
||||
def filter_events(filter_type, principal=None):
|
||||
today = timezone.now().date()
|
||||
events = Event.objects.none()
|
||||
|
||||
current_and_future_events_query = Q(
|
||||
active=True, deleted=False, draft=False, created_by__is_active=True
|
||||
) & (Q(start_date__lte=today, end_date__gte=today) | Q(start_date__gt=today))
|
||||
events = EventFilterService.base_event_query
|
||||
|
||||
if filter_type == "expensive":
|
||||
events = Event.objects.filter(current_and_future_events_query).order_by(
|
||||
"-entry_fee"
|
||||
)
|
||||
events = events.order_by("-entry_fee")
|
||||
elif filter_type == "cheap":
|
||||
events = Event.objects.filter(current_and_future_events_query).order_by(
|
||||
"entry_fee"
|
||||
)
|
||||
events = events.order_by("entry_fee")
|
||||
elif filter_type == "preference" and principal is not None:
|
||||
preferences = PrincipalPreference.objects.get(principal=principal)
|
||||
preferred_categories_ids = preferences.preferred_categories.values_list(
|
||||
"id", flat=True
|
||||
)
|
||||
events = Event.objects.filter(
|
||||
category__in=preferred_categories_ids,
|
||||
end_date__gte=today,
|
||||
draft=False,
|
||||
active=True,
|
||||
deleted=False,
|
||||
created_by__is_active=True,
|
||||
).distinct()
|
||||
preferred_categories_ids = preferences.preferred_categories.values_list("id", flat=True)
|
||||
events = events.filter(category__in=preferred_categories_ids)
|
||||
|
||||
return events
|
||||
return events.distinct()
|
||||
|
||||
@staticmethod
|
||||
def filter_events_by_category(category_id):
|
||||
today = timezone.now().date()
|
||||
events = EventFilterService.base_event_query
|
||||
|
||||
current_and_future_events_query = Q(
|
||||
active=True, deleted=False, draft=False, created_by__is_active=True
|
||||
) & (Q(start_date__lte=today, end_date__gte=today) | Q(start_date__gt=today))
|
||||
|
||||
# Ensure the category_id is valid and within the specified range (1-8)
|
||||
# Ensure the category_id is valid and within the specified range (1-10)
|
||||
if 1 <= category_id <= 10:
|
||||
events = Event.objects.filter(
|
||||
current_and_future_events_query, category_id=category_id
|
||||
).distinct()
|
||||
events = events.filter(category_id=category_id)
|
||||
else:
|
||||
events = (
|
||||
Event.objects.none()
|
||||
) # Return an empty queryset if the category_id is not valid
|
||||
events = Event.objects.none() # Return an empty queryset if the category_id is not valid
|
||||
|
||||
return events
|
||||
return events.distinct()
|
||||
|
||||
@staticmethod
|
||||
def filter_events_for_tomorrow():
|
||||
today = timezone.now().date()
|
||||
tomorrow = today + timezone.timedelta(days=1)
|
||||
tomorrow = EventFilterService.today + timezone.timedelta(days=1)
|
||||
|
||||
# Events that are starting tomorrow, ending tomorrow, or have an end date greater than tomorrow
|
||||
events_query = (
|
||||
Q(start_date=tomorrow)
|
||||
| Q(end_date=tomorrow)
|
||||
| (Q(start_date__lte=tomorrow) & Q(end_date__gte=tomorrow))
|
||||
events = EventFilterService.base_event_query.filter(
|
||||
start_date__lte=tomorrow,
|
||||
end_date__gte=tomorrow,
|
||||
)
|
||||
events = Event.objects.filter(
|
||||
events_query,
|
||||
active=True,
|
||||
deleted=False,
|
||||
draft=False,
|
||||
created_by__is_active=True,
|
||||
).distinct()
|
||||
|
||||
return events
|
||||
return events.distinct()
|
||||
|
||||
@staticmethod
|
||||
def filter_events_for_today():
|
||||
today = timezone.now().date()
|
||||
print("Today: ", today)
|
||||
print("Today: ", EventFilterService.today)
|
||||
|
||||
events = Event.objects.filter(
|
||||
active=True,
|
||||
deleted=False,
|
||||
draft=False,
|
||||
start_date__lte=today,
|
||||
end_date__gte=today,
|
||||
created_by__is_active=True,
|
||||
events = EventFilterService.base_event_query.filter(
|
||||
start_date__lte=EventFilterService.today,
|
||||
end_date__gte=EventFilterService.today,
|
||||
)
|
||||
|
||||
return events
|
||||
return events.distinct()
|
||||
|
||||
|
||||
# ye package ka naam hai
|
||||
|
||||
@@ -61,19 +61,19 @@ class EventListSerializer(serializers.ModelSerializer):
|
||||
"end_date",
|
||||
# "from_time",
|
||||
# "to_time",
|
||||
# "category",
|
||||
# "venue",
|
||||
"category",
|
||||
"venue",
|
||||
# "venue_capacity",
|
||||
"image",
|
||||
# "video_url",
|
||||
# "entry_type",
|
||||
"entry_fee",
|
||||
# "key_guest",
|
||||
"key_guest",
|
||||
# "age_group",
|
||||
# "images",
|
||||
# "is_favorited",
|
||||
# "reviews",
|
||||
# "tags",
|
||||
"tags",
|
||||
# "principal_interaction",
|
||||
# "draft",
|
||||
]
|
||||
|
||||
@@ -245,7 +245,10 @@ class MyEventsAPIView(APIView):
|
||||
errors="Invalid filter parameter",
|
||||
)
|
||||
|
||||
serializer = EventDetailSerializer(
|
||||
# serializer = EventDetailSerializer(
|
||||
# events, context={"request": request}, many=True
|
||||
# )
|
||||
serializer = EventListSerializer(
|
||||
events, context={"request": request}, many=True
|
||||
)
|
||||
return ApiResponse.success(
|
||||
|
||||
Reference in New Issue
Block a user