Merge pull request #22 from WDI-Ideas/development

Development
This commit is contained in:
rizwanisready
2024-05-27 15:45:26 +05:30
committed by GitHub
3 changed files with 55 additions and 107 deletions

View File

@@ -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

View File

@@ -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",
]

View File

@@ -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(