mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 13:31:08 -05:00
- Add HTMX-powered filtering with instant updates - Add smooth transitions and loading states - Improve visual hierarchy and styling - Add review notes functionality - Add confirmation dialogs for actions - Make navigation sticky - Add hover effects and visual feedback - Improve dark mode support
322 lines
14 KiB
Python
322 lines
14 KiB
Python
from django.core.management.base import BaseCommand
|
|
from django.utils import timezone
|
|
from companies.models import Manufacturer
|
|
from parks.models import Park
|
|
from rides.models import Ride, RollerCoasterStats
|
|
from decimal import Decimal
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Seeds ride data for parks'
|
|
|
|
def handle(self, *args, **options):
|
|
# Create major ride manufacturers
|
|
manufacturers_data = [
|
|
{
|
|
'name': 'Bolliger & Mabillard',
|
|
'website': 'https://www.bolligermabillard.com/',
|
|
'headquarters': 'Monthey, Switzerland',
|
|
'description': 'Known for their smooth steel roller coasters.'
|
|
},
|
|
{
|
|
'name': 'Rocky Mountain Construction',
|
|
'website': 'https://www.rockymtnconstruction.com/',
|
|
'headquarters': 'Hayden, Idaho, USA',
|
|
'description': 'Specialists in hybrid and steel roller coasters.'
|
|
},
|
|
{
|
|
'name': 'Intamin',
|
|
'website': 'https://www.intamin.com/',
|
|
'headquarters': 'Schaan, Liechtenstein',
|
|
'description': 'Creators of record-breaking roller coasters and rides.'
|
|
},
|
|
{
|
|
'name': 'Vekoma',
|
|
'website': 'https://www.vekoma.com/',
|
|
'headquarters': 'Vlodrop, Netherlands',
|
|
'description': 'Manufacturers of various roller coaster types.'
|
|
},
|
|
{
|
|
'name': 'Mack Rides',
|
|
'website': 'https://mack-rides.com/',
|
|
'headquarters': 'Waldkirch, Germany',
|
|
'description': 'Family-owned manufacturer of roller coasters and attractions.'
|
|
},
|
|
{
|
|
'name': 'Sally Dark Rides',
|
|
'website': 'https://sallydarkrides.com/',
|
|
'headquarters': 'Jacksonville, Florida, USA',
|
|
'description': 'Specialists in dark rides and interactive attractions.'
|
|
},
|
|
{
|
|
'name': 'Zamperla',
|
|
'website': 'https://www.zamperla.com/',
|
|
'headquarters': 'Vicenza, Italy',
|
|
'description': 'Manufacturer of family rides and thrill attractions.'
|
|
}
|
|
]
|
|
|
|
manufacturers = {}
|
|
for mfg_data in manufacturers_data:
|
|
manufacturer, created = Manufacturer.objects.get_or_create(
|
|
name=mfg_data['name'],
|
|
defaults=mfg_data
|
|
)
|
|
manufacturers[manufacturer.name] = manufacturer
|
|
self.stdout.write(f'{"Created" if created else "Found"} manufacturer: {manufacturer.name}')
|
|
|
|
# Create rides for each park
|
|
rides_data = [
|
|
# Silver Dollar City Rides
|
|
{
|
|
'park_name': 'Silver Dollar City',
|
|
'rides': [
|
|
{
|
|
'name': 'Time Traveler',
|
|
'manufacturer': 'Mack Rides',
|
|
'description': 'The world\'s fastest, steepest, and tallest spinning roller coaster.',
|
|
'category': 'RC',
|
|
'opening_date': '2018-03-14',
|
|
'stats': {
|
|
'height_ft': 100,
|
|
'length_ft': 3020,
|
|
'speed_mph': 50.3,
|
|
'inversions': 3,
|
|
'track_material': 'STEEL',
|
|
'roller_coaster_type': 'SPINNING',
|
|
'launch_type': 'LSM'
|
|
}
|
|
},
|
|
{
|
|
'name': 'Wildfire',
|
|
'manufacturer': 'Bolliger & Mabillard',
|
|
'description': 'A multi-looping roller coaster with a 155-foot drop.',
|
|
'category': 'RC',
|
|
'opening_date': '2001-04-01',
|
|
'stats': {
|
|
'height_ft': 155,
|
|
'length_ft': 3073,
|
|
'speed_mph': 66,
|
|
'inversions': 5,
|
|
'track_material': 'STEEL',
|
|
'roller_coaster_type': 'SITDOWN',
|
|
'launch_type': 'CHAIN'
|
|
}
|
|
},
|
|
{
|
|
'name': 'Fire In The Hole',
|
|
'manufacturer': 'Sally Dark Rides',
|
|
'description': 'Indoor coaster featuring special effects and storytelling.',
|
|
'category': 'DR',
|
|
'opening_date': '1972-01-01'
|
|
},
|
|
{
|
|
'name': 'American Plunge',
|
|
'manufacturer': 'Intamin',
|
|
'description': 'Log flume ride with a 50-foot splashdown.',
|
|
'category': 'WR',
|
|
'opening_date': '1981-01-01'
|
|
}
|
|
]
|
|
},
|
|
# Magic Kingdom Rides
|
|
{
|
|
'park_name': 'Magic Kingdom',
|
|
'rides': [
|
|
{
|
|
'name': 'Space Mountain',
|
|
'manufacturer': 'Vekoma',
|
|
'description': 'An indoor roller coaster through space.',
|
|
'category': 'RC',
|
|
'opening_date': '1975-01-15',
|
|
'stats': {
|
|
'height_ft': 180,
|
|
'length_ft': 3196,
|
|
'speed_mph': 27,
|
|
'inversions': 0,
|
|
'track_material': 'STEEL',
|
|
'roller_coaster_type': 'SITDOWN',
|
|
'launch_type': 'CHAIN'
|
|
}
|
|
},
|
|
{
|
|
'name': 'Haunted Mansion',
|
|
'manufacturer': 'Sally Dark Rides',
|
|
'description': 'Classic dark ride through a haunted estate.',
|
|
'category': 'DR',
|
|
'opening_date': '1971-10-01'
|
|
},
|
|
{
|
|
'name': 'Mad Tea Party',
|
|
'manufacturer': 'Zamperla',
|
|
'description': 'Spinning teacup ride based on Alice in Wonderland.',
|
|
'category': 'FR',
|
|
'opening_date': '1971-10-01'
|
|
},
|
|
{
|
|
'name': 'Splash Mountain',
|
|
'manufacturer': 'Intamin',
|
|
'description': 'Log flume ride with multiple drops and animatronics.',
|
|
'category': 'WR',
|
|
'opening_date': '1992-10-02'
|
|
}
|
|
]
|
|
},
|
|
# Cedar Point Rides
|
|
{
|
|
'park_name': 'Cedar Point',
|
|
'rides': [
|
|
{
|
|
'name': 'Millennium Force',
|
|
'manufacturer': 'Intamin',
|
|
'description': 'Former world\'s tallest and fastest complete-circuit roller coaster.',
|
|
'category': 'RC',
|
|
'opening_date': '2000-05-13',
|
|
'stats': {
|
|
'height_ft': 310,
|
|
'length_ft': 6595,
|
|
'speed_mph': 93,
|
|
'inversions': 0,
|
|
'track_material': 'STEEL',
|
|
'roller_coaster_type': 'SITDOWN',
|
|
'launch_type': 'CABLE'
|
|
}
|
|
},
|
|
{
|
|
'name': 'Cedar Downs Racing Derby',
|
|
'manufacturer': 'Zamperla',
|
|
'description': 'High-speed carousel with racing horses.',
|
|
'category': 'FR',
|
|
'opening_date': '1967-01-01'
|
|
},
|
|
{
|
|
'name': 'Snake River Falls',
|
|
'manufacturer': 'Intamin',
|
|
'description': 'Shoot-the-Chutes water ride with an 82-foot drop.',
|
|
'category': 'WR',
|
|
'opening_date': '1993-05-01'
|
|
}
|
|
]
|
|
},
|
|
# Universal Studios Florida Rides
|
|
{
|
|
'park_name': 'Universal Studios Florida',
|
|
'rides': [
|
|
{
|
|
'name': 'Harry Potter and the Escape from Gringotts',
|
|
'manufacturer': 'Intamin',
|
|
'description': 'Indoor steel roller coaster with 3D effects.',
|
|
'category': 'RC',
|
|
'opening_date': '2014-07-08',
|
|
'stats': {
|
|
'height_ft': 65,
|
|
'length_ft': 2000,
|
|
'speed_mph': 50,
|
|
'inversions': 0,
|
|
'track_material': 'STEEL',
|
|
'roller_coaster_type': 'SITDOWN',
|
|
'launch_type': 'LSM'
|
|
}
|
|
},
|
|
{
|
|
'name': 'The Amazing Adventures of Spider-Man',
|
|
'manufacturer': 'Sally Dark Rides',
|
|
'description': 'groundbreaking 3D dark ride.',
|
|
'category': 'DR',
|
|
'opening_date': '1999-05-28'
|
|
},
|
|
{
|
|
'name': 'Jurassic World VelociCoaster',
|
|
'manufacturer': 'Intamin',
|
|
'description': 'Florida\'s fastest and tallest launch coaster.',
|
|
'category': 'RC',
|
|
'opening_date': '2021-06-10',
|
|
'stats': {
|
|
'height_ft': 155,
|
|
'length_ft': 4700,
|
|
'speed_mph': 70,
|
|
'inversions': 4,
|
|
'track_material': 'STEEL',
|
|
'roller_coaster_type': 'SITDOWN',
|
|
'launch_type': 'LSM'
|
|
}
|
|
}
|
|
]
|
|
},
|
|
# SeaWorld Orlando Rides
|
|
{
|
|
'park_name': 'SeaWorld Orlando',
|
|
'rides': [
|
|
{
|
|
'name': 'Mako',
|
|
'manufacturer': 'Bolliger & Mabillard',
|
|
'description': 'Orlando\'s tallest, fastest and longest roller coaster.',
|
|
'category': 'RC',
|
|
'opening_date': '2016-06-10',
|
|
'stats': {
|
|
'height_ft': 200,
|
|
'length_ft': 4760,
|
|
'speed_mph': 73,
|
|
'inversions': 0,
|
|
'track_material': 'STEEL',
|
|
'roller_coaster_type': 'SITDOWN',
|
|
'launch_type': 'CHAIN'
|
|
}
|
|
},
|
|
{
|
|
'name': 'Journey to Atlantis',
|
|
'manufacturer': 'Mack Rides',
|
|
'description': 'Water coaster combining dark ride elements with splashes.',
|
|
'category': 'WR',
|
|
'opening_date': '1998-03-01'
|
|
},
|
|
{
|
|
'name': 'Sky Tower',
|
|
'manufacturer': 'Intamin',
|
|
'description': 'Rotating observation tower providing views of Orlando.',
|
|
'category': 'TR',
|
|
'opening_date': '1973-12-15'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
|
|
# Create rides and their stats
|
|
for park_data in rides_data:
|
|
try:
|
|
park = Park.objects.get(name=park_data['park_name'])
|
|
|
|
for ride_data in park_data['rides']:
|
|
manufacturer = manufacturers[ride_data['manufacturer']]
|
|
|
|
ride, created = Ride.objects.get_or_create(
|
|
name=ride_data['name'],
|
|
park=park,
|
|
defaults={
|
|
'description': ride_data['description'],
|
|
'category': ride_data['category'],
|
|
'manufacturer': manufacturer,
|
|
'opening_date': ride_data['opening_date'],
|
|
'status': 'OPERATING'
|
|
}
|
|
)
|
|
self.stdout.write(f'{"Created" if created else "Found"} ride: {ride.name}')
|
|
|
|
if created and ride_data.get('stats'):
|
|
stats = ride_data['stats']
|
|
RollerCoasterStats.objects.create(
|
|
ride=ride,
|
|
height_ft=stats['height_ft'],
|
|
length_ft=stats['length_ft'],
|
|
speed_mph=stats['speed_mph'],
|
|
inversions=stats['inversions'],
|
|
track_material=stats['track_material'],
|
|
roller_coaster_type=stats['roller_coaster_type'],
|
|
launch_type=stats['launch_type']
|
|
)
|
|
self.stdout.write(f'Created stats for: {ride.name}')
|
|
|
|
except Park.DoesNotExist:
|
|
self.stdout.write(self.style.WARNING(f'Park not found: {park_data["park_name"]}'))
|
|
|
|
self.stdout.write(self.style.SUCCESS('Successfully seeded ride data'))
|