mirror of
https://github.com/pacnpal/thrillwiki_laravel.git
synced 2025-12-20 10:11:11 -05:00
feat: Implement rides management with CRUD functionality
- Added rides index view with search and filter options. - Created rides show view to display ride details. - Implemented API routes for rides. - Developed authentication routes for user registration, login, and email verification. - Created tests for authentication, email verification, password reset, and user profile management. - Added feature tests for rides and operators, including creation, updating, deletion, and searching. - Implemented soft deletes and caching for rides and operators. - Enhanced manufacturer and operator model tests for various functionalities.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
<div class="space-y-6 sm:space-y-5">
|
||||
<div class="sm:grid sm:grid-cols-2 sm:gap-4">
|
||||
<div>
|
||||
<label for="height_ft" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="height_ft" class="block text-sm font-medium text-gray-700">
|
||||
Height (feet)
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
@@ -10,12 +10,12 @@
|
||||
step="0.01"
|
||||
id="height_ft"
|
||||
wire:model="coasterStats.height_ft"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.height_ft') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="length_ft" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="length_ft" class="block text-sm font-medium text-gray-700">
|
||||
Length (feet)
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
@@ -23,7 +23,7 @@
|
||||
step="0.01"
|
||||
id="length_ft"
|
||||
wire:model="coasterStats.length_ft"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.length_ft') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
<div class="sm:grid sm:grid-cols-2 sm:gap-4">
|
||||
<div>
|
||||
<label for="speed_mph" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="speed_mph" class="block text-sm font-medium text-gray-700">
|
||||
Speed (mph)
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
@@ -39,12 +39,12 @@
|
||||
step="0.01"
|
||||
id="speed_mph"
|
||||
wire:model="coasterStats.speed_mph"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.speed_mph') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="max_drop_height_ft" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="max_drop_height_ft" class="block text-sm font-medium text-gray-700">
|
||||
Max Drop Height (feet)
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
@@ -52,7 +52,7 @@
|
||||
step="0.01"
|
||||
id="max_drop_height_ft"
|
||||
wire:model="coasterStats.max_drop_height_ft"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.max_drop_height_ft') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
@@ -63,13 +63,13 @@
|
||||
<div class="space-y-6 sm:space-y-5 mt-6">
|
||||
<div class="sm:grid sm:grid-cols-2 sm:gap-4">
|
||||
<div>
|
||||
<label for="track_material" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="track_material" class="block text-sm font-medium text-gray-700">
|
||||
Track Material
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<select id="track_material"
|
||||
wire:model="coasterStats.track_material"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@foreach(App\Enums\TrackMaterial::cases() as $material)
|
||||
<option value="{{ $material->value }}">{{ $material->label() }}</option>
|
||||
@endforeach
|
||||
@@ -78,13 +78,13 @@
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="roller_coaster_type" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="roller_coaster_type" class="block text-sm font-medium text-gray-700">
|
||||
Coaster Type
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<select id="roller_coaster_type"
|
||||
wire:model="coasterStats.roller_coaster_type"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@foreach(App\Enums\RollerCoasterType::cases() as $type)
|
||||
<option value="{{ $type->value }}">{{ $type->label() }}</option>
|
||||
@endforeach
|
||||
@@ -96,25 +96,25 @@
|
||||
|
||||
<div class="sm:grid sm:grid-cols-2 sm:gap-4">
|
||||
<div>
|
||||
<label for="inversions" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="inversions" class="block text-sm font-medium text-gray-700">
|
||||
Number of Inversions
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<input type="number"
|
||||
id="inversions"
|
||||
wire:model="coasterStats.inversions"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.inversions') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="launch_type" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="launch_type" class="block text-sm font-medium text-gray-700">
|
||||
Launch Type
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<select id="launch_type"
|
||||
wire:model="coasterStats.launch_type"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@foreach(App\Enums\LaunchType::cases() as $type)
|
||||
<option value="{{ $type->value }}">{{ $type->label() }}</option>
|
||||
@endforeach
|
||||
@@ -128,52 +128,52 @@
|
||||
{{-- Train Configuration --}}
|
||||
<div class="space-y-6 sm:space-y-5 mt-6">
|
||||
<div>
|
||||
<label for="train_style" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="train_style" class="block text-sm font-medium text-gray-700">
|
||||
Train Style
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<input type="text"
|
||||
id="train_style"
|
||||
wire:model="coasterStats.train_style"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.train_style') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sm:grid sm:grid-cols-3 sm:gap-4">
|
||||
<div>
|
||||
<label for="trains_count" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="trains_count" class="block text-sm font-medium text-gray-700">
|
||||
Number of Trains
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<input type="number"
|
||||
id="trains_count"
|
||||
wire:model="coasterStats.trains_count"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.trains_count') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="cars_per_train" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="cars_per_train" class="block text-sm font-medium text-gray-700">
|
||||
Cars per Train
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<input type="number"
|
||||
id="cars_per_train"
|
||||
wire:model="coasterStats.cars_per_train"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.cars_per_train') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="seats_per_car" class="block text-sm font-medium text-gray-700 dark:text-gray-300">
|
||||
<label for="seats_per_car" class="block text-sm font-medium text-gray-700">
|
||||
Seats per Car
|
||||
</label>
|
||||
<div class="mt-1">
|
||||
<input type="number"
|
||||
id="seats_per_car"
|
||||
wire:model="coasterStats.seats_per_car"
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md dark:bg-gray-700 dark:border-gray-600 dark:text-white">
|
||||
class="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md">
|
||||
@error('coasterStats.seats_per_car') <span class="text-red-500 text-sm">{{ $message }}</span> @enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user