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

@@ -69,9 +69,7 @@ class RideLocationService:
return ride_location
@classmethod
def update_ride_location(
cls, ride_location: RideLocation, **updates
) -> RideLocation:
def update_ride_location(cls, ride_location: RideLocation, **updates) -> RideLocation:
"""
Update ride location with validation.
@@ -149,9 +147,7 @@ class RideLocationService:
if park:
queryset = queryset.filter(ride__park=park)
return list(
queryset.select_related("ride", "ride__park").order_by("point__distance")
)
return list(queryset.select_related("ride", "ride__park").order_by("point__distance"))
@classmethod
def get_ride_navigation_info(cls, ride_location: RideLocation) -> dict[str, Any]:
@@ -249,9 +245,7 @@ class RideLocationService:
# Rough conversion: 1 degree latitude ≈ 111,000 meters
# 1 degree longitude varies by latitude, but we'll use a rough approximation
lat_offset = offset[0] / 111000 # North offset in degrees
lon_offset = offset[1] / (
111000 * abs(park_location.latitude) * 0.01
) # East offset
lon_offset = offset[1] / (111000 * abs(park_location.latitude) * 0.01) # East offset
estimated_lat = park_location.latitude + lat_offset
estimated_lon = park_location.longitude + lon_offset
@@ -277,9 +271,7 @@ class RideLocationService:
return updated_count
# Get all rides in the park that don't have precise coordinates
ride_locations = RideLocation.objects.filter(
ride__park=park, point__isnull=True
).select_related("ride")
ride_locations = RideLocation.objects.filter(ride__park=park, point__isnull=True).select_related("ride")
for ride_location in ride_locations:
# Try to search for the specific ride within the park area
@@ -312,22 +304,15 @@ class RideLocationService:
# Look for results that might be the ride
for result in results:
display_name = result.get("display_name", "").lower()
if (
ride_location.ride.name.lower() in display_name
and park.name.lower() in display_name
):
if ride_location.ride.name.lower() in display_name and park.name.lower() in display_name:
# Update the ride location
ride_location.set_coordinates(
float(result["lat"]), float(result["lon"])
)
ride_location.set_coordinates(float(result["lat"]), float(result["lon"]))
ride_location.save()
updated_count += 1
break
except Exception as e:
logger.warning(
f"Error updating ride location for {ride_location.ride.name}: {str(e)}"
)
logger.warning(f"Error updating ride location for {ride_location.ride.name}: {str(e)}")
continue
return updated_count
@@ -346,9 +331,7 @@ class RideLocationService:
area_map = {}
ride_locations = (
RideLocation.objects.filter(ride__park=park)
.select_related("ride")
.order_by("park_area", "ride__name")
RideLocation.objects.filter(ride__park=park).select_related("ride").order_by("park_area", "ride__name")
)
for ride_location in ride_locations: