mirror of
https://github.com/pacnpal/thrillwiki_laravel.git
synced 2025-12-20 12:11:14 -05:00
Add enums for ReviewStatus, TrackMaterial, LaunchType, RideCategory, and RollerCoasterType; implement Designer and RideModel models; create migrations for ride_models and helpful_votes tables; enhance RideGalleryComponent documentation
This commit is contained in:
107
memory-bank/models/RidesSchema.md
Normal file
107
memory-bank/models/RidesSchema.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Rides System Database Schema
|
||||
|
||||
## Overview
|
||||
The rides system uses three primary tables to manage ride data:
|
||||
1. `ride_models` - Templates for specific ride types/models
|
||||
2. `rides` - Individual ride installations at parks
|
||||
3. `roller_coaster_stats` - Extended statistics for roller coasters
|
||||
|
||||
## Implementation Details
|
||||
|
||||
### Migration Files
|
||||
- `2024_02_25_194500_create_ride_models_table.php`
|
||||
- `2024_02_25_194600_create_rides_table.php`
|
||||
- `2024_02_25_194700_create_roller_coaster_stats_table.php`
|
||||
|
||||
### RideModels Table
|
||||
- Primary key: `id`
|
||||
- Base information:
|
||||
- `name`: string, required
|
||||
- `description`: text, default empty
|
||||
- `category`: string(2), using RideCategory enum
|
||||
- Relationships:
|
||||
- `manufacturer_id`: nullable foreign key to manufacturers
|
||||
- Constraints:
|
||||
- Unique combination of manufacturer_id and name
|
||||
- Manufacturer can be null (for generic models)
|
||||
|
||||
### Rides Table
|
||||
- Primary key: `id`
|
||||
- Base information:
|
||||
- `name`: string, required
|
||||
- `slug`: string, required
|
||||
- `description`: text, default empty
|
||||
- Relationships:
|
||||
- `park_id`: required foreign key to parks
|
||||
- `park_area_id`: nullable foreign key to park_areas
|
||||
- `manufacturer_id`: nullable foreign key to manufacturers
|
||||
- `designer_id`: nullable foreign key to designers
|
||||
- `ride_model_id`: nullable foreign key to ride_models
|
||||
- Status fields:
|
||||
- `category`: string(2), RideCategory enum
|
||||
- `status`: string(20), RideStatus enum
|
||||
- `post_closing_status`: string(20), nullable
|
||||
- `status_since`: date, nullable
|
||||
- Operational dates:
|
||||
- `opening_date`: date, nullable
|
||||
- `closing_date`: date, nullable
|
||||
- Physical characteristics:
|
||||
- `min_height_in`: unsigned integer, nullable
|
||||
- `max_height_in`: unsigned integer, nullable
|
||||
- `capacity_per_hour`: unsigned integer, nullable
|
||||
- `ride_duration_seconds`: unsigned integer, nullable
|
||||
- User interaction:
|
||||
- `average_rating`: decimal(3,2), nullable
|
||||
- Timestamps: `created_at`, `updated_at`
|
||||
- Indexes:
|
||||
- Unique: [park_id, slug]
|
||||
- Regular: category, status, manufacturer_id, designer_id, ride_model_id
|
||||
|
||||
### RollerCoasterStats Table
|
||||
- Primary key: `id`
|
||||
- Relationship:
|
||||
- `ride_id`: unique foreign key to rides (one-to-one)
|
||||
- Physical measurements:
|
||||
- `height_ft`: decimal(6,2), nullable
|
||||
- `length_ft`: decimal(7,2), nullable
|
||||
- `speed_mph`: decimal(5,2), nullable
|
||||
- `max_drop_height_ft`: decimal(6,2), nullable
|
||||
- Track details:
|
||||
- `inversions`: unsigned integer, default 0
|
||||
- `ride_time_seconds`: unsigned integer, nullable
|
||||
- `track_type`: string, default empty
|
||||
- `track_material`: string(20), using TrackMaterial enum
|
||||
- `roller_coaster_type`: string(20), using RollerCoasterType enum
|
||||
- Train configuration:
|
||||
- `launch_type`: string(20), using LaunchType enum
|
||||
- `train_style`: string, default empty
|
||||
- `trains_count`: unsigned integer, nullable
|
||||
- `cars_per_train`: unsigned integer, nullable
|
||||
- `seats_per_car`: unsigned integer, nullable
|
||||
- Indexes:
|
||||
- track_material
|
||||
- roller_coaster_type
|
||||
- launch_type
|
||||
|
||||
## Design Decisions
|
||||
1. Used one-to-one relationship for roller_coaster_stats to ensure data integrity
|
||||
2. Added proper indexes for common query patterns
|
||||
3. Implemented nullable relationships where appropriate
|
||||
4. Used appropriate data types for numeric values:
|
||||
- decimals for measurements that need precision
|
||||
- integers for whole number counts
|
||||
5. Added proper cascading rules:
|
||||
- rides cascade delete with park
|
||||
- roller_coaster_stats cascade with ride
|
||||
- other relationships set to nullOnDelete for safety
|
||||
|
||||
## Migration Order
|
||||
The migrations are ordered to respect foreign key constraints:
|
||||
1. ride_models (depends on manufacturers)
|
||||
2. rides (depends on parks, park_areas, manufacturers, designers, ride_models)
|
||||
3. roller_coaster_stats (depends on rides)
|
||||
|
||||
## Related Files
|
||||
- Enum classes in app/Enums/
|
||||
- Model classes (to be implemented)
|
||||
- Feature documentation in memory-bank/features/RidesManagement.md
|
||||
Reference in New Issue
Block a user