# Generated by Django 4.2.8 on 2025-11-08 16:41 import dirtyfields.dirtyfields from django.db import migrations, models import django.db.models.deletion import django.utils.timezone import django_lifecycle.mixins import model_utils.fields import uuid class Migration(migrations.Migration): initial = True dependencies = [ ("core", "0001_initial"), ] operations = [ migrations.CreateModel( name="Company", fields=[ ( "created", model_utils.fields.AutoCreatedField( default=django.utils.timezone.now, editable=False, verbose_name="created", ), ), ( "modified", model_utils.fields.AutoLastModifiedField( default=django.utils.timezone.now, editable=False, verbose_name="modified", ), ), ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ( "name", models.CharField( db_index=True, help_text="Official company name", max_length=255, unique=True, ), ), ( "slug", models.SlugField( help_text="URL-friendly identifier", max_length=255, unique=True ), ), ( "description", models.TextField( blank=True, help_text="Company description and history" ), ), ( "company_types", models.JSONField( default=list, help_text="List of company types (manufacturer, operator, etc.)", ), ), ( "founded_date", models.DateField( blank=True, help_text="Company founding date", null=True ), ), ( "founded_date_precision", models.CharField( choices=[("year", "Year"), ("month", "Month"), ("day", "Day")], default="day", help_text="Precision of founded date", max_length=20, ), ), ( "closed_date", models.DateField( blank=True, help_text="Company closure date (if applicable)", null=True, ), ), ( "closed_date_precision", models.CharField( choices=[("year", "Year"), ("month", "Month"), ("day", "Day")], default="day", help_text="Precision of closed date", max_length=20, ), ), ( "website", models.URLField(blank=True, help_text="Official company website"), ), ( "logo_image_id", models.CharField( blank=True, help_text="CloudFlare image ID for company logo", max_length=255, ), ), ( "logo_image_url", models.URLField( blank=True, help_text="CloudFlare image URL for company logo" ), ), ( "park_count", models.IntegerField( default=0, help_text="Number of parks operated (for operators)" ), ), ( "ride_count", models.IntegerField( default=0, help_text="Number of rides manufactured (for manufacturers)", ), ), ( "location", models.ForeignKey( blank=True, help_text="Company headquarters location", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="companies", to="core.locality", ), ), ], options={ "verbose_name": "Company", "verbose_name_plural": "Companies", "ordering": ["name"], }, bases=( dirtyfields.dirtyfields.DirtyFieldsMixin, django_lifecycle.mixins.LifecycleModelMixin, models.Model, ), ), migrations.CreateModel( name="Park", fields=[ ( "created", model_utils.fields.AutoCreatedField( default=django.utils.timezone.now, editable=False, verbose_name="created", ), ), ( "modified", model_utils.fields.AutoLastModifiedField( default=django.utils.timezone.now, editable=False, verbose_name="modified", ), ), ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ( "name", models.CharField( db_index=True, help_text="Official park name", max_length=255 ), ), ( "slug", models.SlugField( help_text="URL-friendly identifier", max_length=255, unique=True ), ), ( "description", models.TextField( blank=True, help_text="Park description and history" ), ), ( "park_type", models.CharField( choices=[ ("theme_park", "Theme Park"), ("amusement_park", "Amusement Park"), ("water_park", "Water Park"), ( "family_entertainment_center", "Family Entertainment Center", ), ("traveling_park", "Traveling Park"), ("zoo", "Zoo"), ("aquarium", "Aquarium"), ], db_index=True, help_text="Type of park", max_length=50, ), ), ( "status", models.CharField( choices=[ ("operating", "Operating"), ("closed", "Closed"), ("sbno", "Standing But Not Operating"), ("under_construction", "Under Construction"), ("planned", "Planned"), ], db_index=True, default="operating", help_text="Current operational status", max_length=50, ), ), ( "opening_date", models.DateField( blank=True, db_index=True, help_text="Park opening date", null=True, ), ), ( "opening_date_precision", models.CharField( choices=[("year", "Year"), ("month", "Month"), ("day", "Day")], default="day", help_text="Precision of opening date", max_length=20, ), ), ( "closing_date", models.DateField( blank=True, help_text="Park closing date (if closed)", null=True ), ), ( "closing_date_precision", models.CharField( choices=[("year", "Year"), ("month", "Month"), ("day", "Day")], default="day", help_text="Precision of closing date", max_length=20, ), ), ( "latitude", models.DecimalField( blank=True, decimal_places=7, help_text="Latitude coordinate", max_digits=10, null=True, ), ), ( "longitude", models.DecimalField( blank=True, decimal_places=7, help_text="Longitude coordinate", max_digits=10, null=True, ), ), ( "website", models.URLField(blank=True, help_text="Official park website"), ), ( "banner_image_id", models.CharField( blank=True, help_text="CloudFlare image ID for park banner", max_length=255, ), ), ( "banner_image_url", models.URLField( blank=True, help_text="CloudFlare image URL for park banner" ), ), ( "logo_image_id", models.CharField( blank=True, help_text="CloudFlare image ID for park logo", max_length=255, ), ), ( "logo_image_url", models.URLField( blank=True, help_text="CloudFlare image URL for park logo" ), ), ( "ride_count", models.IntegerField(default=0, help_text="Total number of rides"), ), ( "coaster_count", models.IntegerField( default=0, help_text="Number of roller coasters" ), ), ( "custom_fields", models.JSONField( blank=True, default=dict, help_text="Additional park-specific data", ), ), ( "location", models.ForeignKey( blank=True, help_text="Park location", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="parks", to="core.locality", ), ), ( "operator", models.ForeignKey( blank=True, help_text="Current park operator", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="operated_parks", to="entities.company", ), ), ], options={ "verbose_name": "Park", "verbose_name_plural": "Parks", "ordering": ["name"], }, bases=( dirtyfields.dirtyfields.DirtyFieldsMixin, django_lifecycle.mixins.LifecycleModelMixin, models.Model, ), ), migrations.CreateModel( name="RideModel", fields=[ ( "created", model_utils.fields.AutoCreatedField( default=django.utils.timezone.now, editable=False, verbose_name="created", ), ), ( "modified", model_utils.fields.AutoLastModifiedField( default=django.utils.timezone.now, editable=False, verbose_name="modified", ), ), ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ( "name", models.CharField( db_index=True, help_text="Model name (e.g., 'Inverted Coaster', 'Boomerang')", max_length=255, ), ), ( "slug", models.SlugField( help_text="URL-friendly identifier", max_length=255, unique=True ), ), ( "description", models.TextField( blank=True, help_text="Model description and technical details" ), ), ( "model_type", models.CharField( choices=[ ("coaster_model", "Roller Coaster Model"), ("flat_ride_model", "Flat Ride Model"), ("water_ride_model", "Water Ride Model"), ("dark_ride_model", "Dark Ride Model"), ("transport_ride_model", "Transport Ride Model"), ], db_index=True, help_text="Type of ride model", max_length=50, ), ), ( "typical_height", models.DecimalField( blank=True, decimal_places=1, help_text="Typical height in feet", max_digits=6, null=True, ), ), ( "typical_speed", models.DecimalField( blank=True, decimal_places=1, help_text="Typical speed in mph", max_digits=6, null=True, ), ), ( "typical_capacity", models.IntegerField( blank=True, help_text="Typical hourly capacity", null=True ), ), ( "image_id", models.CharField( blank=True, help_text="CloudFlare image ID", max_length=255 ), ), ( "image_url", models.URLField(blank=True, help_text="CloudFlare image URL"), ), ( "installation_count", models.IntegerField( default=0, help_text="Number of installations worldwide" ), ), ( "manufacturer", models.ForeignKey( help_text="Manufacturer of this ride model", on_delete=django.db.models.deletion.CASCADE, related_name="ride_models", to="entities.company", ), ), ], options={ "verbose_name": "Ride Model", "verbose_name_plural": "Ride Models", "ordering": ["manufacturer__name", "name"], }, bases=( dirtyfields.dirtyfields.DirtyFieldsMixin, django_lifecycle.mixins.LifecycleModelMixin, models.Model, ), ), migrations.CreateModel( name="Ride", fields=[ ( "created", model_utils.fields.AutoCreatedField( default=django.utils.timezone.now, editable=False, verbose_name="created", ), ), ( "modified", model_utils.fields.AutoLastModifiedField( default=django.utils.timezone.now, editable=False, verbose_name="modified", ), ), ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ( "name", models.CharField( db_index=True, help_text="Ride name", max_length=255 ), ), ( "slug", models.SlugField( help_text="URL-friendly identifier", max_length=255, unique=True ), ), ( "description", models.TextField( blank=True, help_text="Ride description and history" ), ), ( "ride_category", models.CharField( choices=[ ("roller_coaster", "Roller Coaster"), ("flat_ride", "Flat Ride"), ("water_ride", "Water Ride"), ("dark_ride", "Dark Ride"), ("transport_ride", "Transport Ride"), ("other", "Other"), ], db_index=True, help_text="Broad ride category", max_length=50, ), ), ( "ride_type", models.CharField( blank=True, db_index=True, help_text="Specific ride type (e.g., 'Inverted Coaster', 'Drop Tower')", max_length=100, ), ), ( "is_coaster", models.BooleanField( db_index=True, default=False, help_text="Is this ride a roller coaster?", ), ), ( "status", models.CharField( choices=[ ("operating", "Operating"), ("closed", "Closed"), ("sbno", "Standing But Not Operating"), ("relocated", "Relocated"), ("under_construction", "Under Construction"), ("planned", "Planned"), ], db_index=True, default="operating", help_text="Current operational status", max_length=50, ), ), ( "opening_date", models.DateField( blank=True, db_index=True, help_text="Ride opening date", null=True, ), ), ( "opening_date_precision", models.CharField( choices=[("year", "Year"), ("month", "Month"), ("day", "Day")], default="day", help_text="Precision of opening date", max_length=20, ), ), ( "closing_date", models.DateField( blank=True, help_text="Ride closing date (if closed)", null=True ), ), ( "closing_date_precision", models.CharField( choices=[("year", "Year"), ("month", "Month"), ("day", "Day")], default="day", help_text="Precision of closing date", max_length=20, ), ), ( "height", models.DecimalField( blank=True, decimal_places=1, help_text="Height in feet", max_digits=6, null=True, ), ), ( "speed", models.DecimalField( blank=True, decimal_places=1, help_text="Top speed in mph", max_digits=6, null=True, ), ), ( "length", models.DecimalField( blank=True, decimal_places=1, help_text="Track/ride length in feet", max_digits=8, null=True, ), ), ( "duration", models.IntegerField( blank=True, help_text="Ride duration in seconds", null=True ), ), ( "inversions", models.IntegerField( blank=True, help_text="Number of inversions (for coasters)", null=True, ), ), ( "capacity", models.IntegerField( blank=True, help_text="Hourly capacity (riders per hour)", null=True, ), ), ( "image_id", models.CharField( blank=True, help_text="CloudFlare image ID for main photo", max_length=255, ), ), ( "image_url", models.URLField( blank=True, help_text="CloudFlare image URL for main photo" ), ), ( "custom_fields", models.JSONField( blank=True, default=dict, help_text="Additional ride-specific data", ), ), ( "manufacturer", models.ForeignKey( blank=True, help_text="Ride manufacturer", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="manufactured_rides", to="entities.company", ), ), ( "model", models.ForeignKey( blank=True, help_text="Specific ride model", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="rides", to="entities.ridemodel", ), ), ( "park", models.ForeignKey( help_text="Park where ride is located", on_delete=django.db.models.deletion.CASCADE, related_name="rides", to="entities.park", ), ), ], options={ "verbose_name": "Ride", "verbose_name_plural": "Rides", "ordering": ["park__name", "name"], }, bases=( dirtyfields.dirtyfields.DirtyFieldsMixin, django_lifecycle.mixins.LifecycleModelMixin, models.Model, ), ), migrations.AddIndex( model_name="ridemodel", index=models.Index( fields=["manufacturer", "name"], name="entities_ri_manufac_1fe3c1_idx" ), ), migrations.AddIndex( model_name="ridemodel", index=models.Index( fields=["model_type"], name="entities_ri_model_t_610d23_idx" ), ), migrations.AlterUniqueTogether( name="ridemodel", unique_together={("manufacturer", "name")}, ), migrations.AddIndex( model_name="ride", index=models.Index( fields=["park", "name"], name="entities_ri_park_id_e73e3b_idx" ), ), migrations.AddIndex( model_name="ride", index=models.Index(fields=["slug"], name="entities_ri_slug_d2d6bb_idx"), ), migrations.AddIndex( model_name="ride", index=models.Index(fields=["status"], name="entities_ri_status_b69114_idx"), ), migrations.AddIndex( model_name="ride", index=models.Index( fields=["is_coaster"], name="entities_ri_is_coas_912a4d_idx" ), ), migrations.AddIndex( model_name="ride", index=models.Index( fields=["ride_category"], name="entities_ri_ride_ca_bc4554_idx" ), ), migrations.AddIndex( model_name="ride", index=models.Index( fields=["opening_date"], name="entities_ri_opening_c4fc53_idx" ), ), migrations.AddIndex( model_name="ride", index=models.Index( fields=["manufacturer"], name="entities_ri_manufac_0d9a25_idx" ), ), migrations.AddIndex( model_name="park", index=models.Index(fields=["name"], name="entities_pa_name_f8a746_idx"), ), migrations.AddIndex( model_name="park", index=models.Index(fields=["slug"], name="entities_pa_slug_a21c73_idx"), ), migrations.AddIndex( model_name="park", index=models.Index(fields=["status"], name="entities_pa_status_805296_idx"), ), migrations.AddIndex( model_name="park", index=models.Index( fields=["park_type"], name="entities_pa_park_ty_8eba41_idx" ), ), migrations.AddIndex( model_name="park", index=models.Index( fields=["opening_date"], name="entities_pa_opening_102a60_idx" ), ), migrations.AddIndex( model_name="park", index=models.Index( fields=["location"], name="entities_pa_locatio_20a884_idx" ), ), migrations.AddIndex( model_name="company", index=models.Index(fields=["name"], name="entities_co_name_d061e8_idx"), ), migrations.AddIndex( model_name="company", index=models.Index(fields=["slug"], name="entities_co_slug_00ae5c_idx"), ), ]