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'))