feat: Implement initial schema and add various API, service, and management command enhancements across the application.

This commit is contained in:
pacnpal
2026-01-01 15:13:01 -05:00
parent c95f99ca10
commit b243b17af7
413 changed files with 11164 additions and 17433 deletions

View File

@@ -44,18 +44,12 @@ class HomeView(TemplateView):
# If not in cache, get them directly and cache them
if trending_parks is None:
try:
trending_parks = list(
PageView.get_trending_items(Park, hours=24, limit=10)
)
trending_parks = list(PageView.get_trending_items(Park, hours=24, limit=10))
if trending_parks:
cache.set(
"trending_parks", trending_parks, 3600
) # Cache for 1 hour
cache.set("trending_parks", trending_parks, 3600) # Cache for 1 hour
else:
# Fallback to highest rated parks if no trending data
trending_parks = Park.objects.exclude(
average_rating__isnull=True
).order_by("-average_rating")[:10]
trending_parks = Park.objects.exclude(average_rating__isnull=True).order_by("-average_rating")[:10]
except Exception as e:
log_exception(
logger,
@@ -64,24 +58,16 @@ class HomeView(TemplateView):
request=self.request,
)
# Fallback to highest rated parks if trending calculation fails
trending_parks = Park.objects.exclude(
average_rating__isnull=True
).order_by("-average_rating")[:10]
trending_parks = Park.objects.exclude(average_rating__isnull=True).order_by("-average_rating")[:10]
if trending_rides is None:
try:
trending_rides = list(
PageView.get_trending_items(Ride, hours=24, limit=10)
)
trending_rides = list(PageView.get_trending_items(Ride, hours=24, limit=10))
if trending_rides:
cache.set(
"trending_rides", trending_rides, 3600
) # Cache for 1 hour
cache.set("trending_rides", trending_rides, 3600) # Cache for 1 hour
else:
# Fallback to highest rated rides if no trending data
trending_rides = Ride.objects.exclude(
average_rating__isnull=True
).order_by("-average_rating")[:10]
trending_rides = Ride.objects.exclude(average_rating__isnull=True).order_by("-average_rating")[:10]
except Exception as e:
log_exception(
logger,
@@ -90,21 +76,15 @@ class HomeView(TemplateView):
request=self.request,
)
# Fallback to highest rated rides if trending calculation fails
trending_rides = Ride.objects.exclude(
average_rating__isnull=True
).order_by("-average_rating")[:10]
trending_rides = Ride.objects.exclude(average_rating__isnull=True).order_by("-average_rating")[:10]
# Get highest rated items (mix of parks and rides)
highest_rated_parks = list(
Park.objects.exclude(average_rating__isnull=True).order_by(
"-average_rating"
)[:20]
Park.objects.exclude(average_rating__isnull=True).order_by("-average_rating")[:20]
) # Get more items to randomly select from
highest_rated_rides = list(
Ride.objects.exclude(average_rating__isnull=True).order_by(
"-average_rating"
)[:20]
Ride.objects.exclude(average_rating__isnull=True).order_by("-average_rating")[:20]
) # Get more items to randomly select from
# Combine and shuffle highest rated items
@@ -114,9 +94,7 @@ class HomeView(TemplateView):
# Keep the same context variable names for template compatibility
context["popular_parks"] = trending_parks
context["popular_rides"] = trending_rides
context["highest_rated"] = all_highest_rated[
:10
] # Take first 10 after shuffling
context["highest_rated"] = all_highest_rated[:10] # Take first 10 after shuffling
return context
@@ -131,9 +109,7 @@ class SearchView(TemplateView):
# Search parks
context["parks"] = (
Park.objects.filter(
Q(name__icontains=query)
| Q(location__icontains=query)
| Q(description__icontains=query)
Q(name__icontains=query) | Q(location__icontains=query) | Q(description__icontains=query)
)
.select_related("operating_company")
.prefetch_related("photos")[:10]
@@ -142,9 +118,7 @@ class SearchView(TemplateView):
# Search rides
context["rides"] = (
Ride.objects.filter(
Q(name__icontains=query)
| Q(description__icontains=query)
| Q(manufacturer__name__icontains=query)
Q(name__icontains=query) | Q(description__icontains=query) | Q(manufacturer__name__icontains=query)
)
.select_related("park", "coaster_stats")
.prefetch_related("photos")[:10]
@@ -163,11 +137,7 @@ class SearchView(TemplateView):
"parks_count": len(context["parks"]),
"rides_count": len(context["rides"]),
"companies_count": len(context["companies"]),
"user_id": (
self.request.user.id
if self.request.user.is_authenticated
else None
),
"user_id": (self.request.user.id if self.request.user.is_authenticated else None),
},
)
@@ -179,11 +149,7 @@ def environment_and_settings_view(request):
env_vars = dict(os.environ)
# Get all Django settings as a dictionary
settings_vars = {
setting: getattr(settings, setting)
for setting in dir(settings)
if setting.isupper()
}
settings_vars = {setting: getattr(settings, setting) for setting in dir(settings) if setting.isupper()}
return render(
request,