feat: festival/series model with sub-events, cross-event sections, tab navigation, SectionsShiftsPanel extraction
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,9 +17,8 @@ final class ReorderFestivalSectionsRequest extends FormRequest
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'sections' => ['required', 'array'],
|
||||
'sections.*.id' => ['required', 'ulid'],
|
||||
'sections.*.sort_order' => ['required', 'integer', 'min:0'],
|
||||
'sections' => ['required', 'array', 'min:1'],
|
||||
'sections.*' => ['required', 'ulid'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Requests\Api\V1;
|
||||
|
||||
use App\Models\Event;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
final class StoreFestivalSectionRequest extends FormRequest
|
||||
@@ -18,10 +19,26 @@ final class StoreFestivalSectionRequest extends FormRequest
|
||||
{
|
||||
return [
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'category' => ['nullable', 'string', 'max:50'],
|
||||
'icon' => ['nullable', 'string', 'max:50'],
|
||||
'sort_order' => ['nullable', 'integer', 'min:0'],
|
||||
'type' => ['nullable', 'in:standard,cross_event'],
|
||||
'crew_need' => ['nullable', 'integer', 'min:0'],
|
||||
'crew_auto_accepts' => ['nullable', 'boolean'],
|
||||
'crew_invited_to_events' => ['nullable', 'boolean'],
|
||||
'added_to_timeline' => ['nullable', 'boolean'],
|
||||
'responder_self_checkin' => ['nullable', 'boolean'],
|
||||
'crew_accreditation_level' => ['nullable', 'string', 'max:50'],
|
||||
'public_form_accreditation_level' => ['nullable', 'string', 'max:50'],
|
||||
'timed_accreditations' => ['nullable', 'boolean'],
|
||||
];
|
||||
}
|
||||
|
||||
/** @return array<string, string> */
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'type.in' => 'Type moet standard of cross_event zijn.',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,12 +17,12 @@ final class UpdateEventRequest extends FormRequest
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
// Status changes must go through POST /events/{event}/transition
|
||||
'name' => ['sometimes', 'string', 'max:255'],
|
||||
'slug' => ['sometimes', 'string', 'max:255', 'regex:/^[a-z0-9-]+$/'],
|
||||
'start_date' => ['sometimes', 'date'],
|
||||
'end_date' => ['sometimes', 'date', 'after_or_equal:start_date'],
|
||||
'timezone' => ['sometimes', 'string', 'max:50'],
|
||||
'status' => ['sometimes', 'string', 'in:draft,published,registration_open,buildup,showday,teardown,closed'],
|
||||
'parent_event_id' => ['nullable', 'ulid', 'exists:events,id'],
|
||||
'event_type' => ['sometimes', 'in:event,festival,series'],
|
||||
'event_type_label' => ['nullable', 'string', 'max:50'],
|
||||
|
||||
@@ -18,6 +18,8 @@ final class UpdateFestivalSectionRequest extends FormRequest
|
||||
{
|
||||
return [
|
||||
'name' => ['sometimes', 'string', 'max:255'],
|
||||
'category' => ['sometimes', 'nullable', 'string', 'max:50'],
|
||||
'icon' => ['sometimes', 'nullable', 'string', 'max:50'],
|
||||
'sort_order' => ['sometimes', 'integer', 'min:0'],
|
||||
'type' => ['sometimes', 'in:standard,cross_event'],
|
||||
'crew_auto_accepts' => ['sometimes', 'boolean'],
|
||||
|
||||
Reference in New Issue
Block a user