Allow partial event updates
This commit is contained in:
@@ -389,13 +389,21 @@ class EventController extends Controller
|
||||
TenantMemberPermissions::ensureEventPermission($request, $event, 'events:manage');
|
||||
|
||||
$validated = $request->validated();
|
||||
$nameProvided = array_key_exists('name', $validated);
|
||||
|
||||
$validated = array_merge([
|
||||
'name' => $event->name,
|
||||
'event_type_id' => $event->event_type_id,
|
||||
'event_date' => $event->date?->toDateString(),
|
||||
'status' => $event->status,
|
||||
], $validated);
|
||||
|
||||
if (isset($validated['event_date'])) {
|
||||
$validated['date'] = $validated['event_date'];
|
||||
unset($validated['event_date']);
|
||||
}
|
||||
|
||||
if ($validated['name'] !== $event->name) {
|
||||
if ($nameProvided && $validated['name'] !== $event->name) {
|
||||
$validated['slug'] = $this->generateUniqueSlug($validated['name'], $tenantId, $event->id);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,13 +23,14 @@ class EventStoreRequest extends FormRequest
|
||||
public function rules(): array
|
||||
{
|
||||
$tenantId = request()->attributes->get('tenant_id');
|
||||
$creating = $this->isMethod('post');
|
||||
|
||||
return [
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'name' => [$creating ? 'required' : 'sometimes', 'string', 'max:255'],
|
||||
'description' => ['nullable', 'string'],
|
||||
'event_date' => ['required', 'date', 'after_or_equal:today'],
|
||||
'event_date' => $creating ? ['required', 'date', 'after_or_equal:today'] : ['sometimes', 'date'],
|
||||
'location' => ['nullable', 'string', 'max:255'],
|
||||
'event_type_id' => ['required', 'exists:event_types,id'],
|
||||
'event_type_id' => [$creating ? 'required' : 'sometimes', 'exists:event_types,id'],
|
||||
'package_id' => ['nullable', 'integer', 'exists:packages,id'],
|
||||
'service_package_slug' => [
|
||||
'nullable',
|
||||
|
||||
@@ -199,6 +199,29 @@ class EventControllerTest extends TenantTestCase
|
||||
->assertJsonPath('error.code', 'event_limit_exceeded');
|
||||
}
|
||||
|
||||
public function test_update_event_settings_without_required_fields_succeeds(): void
|
||||
{
|
||||
$tenant = $this->tenant;
|
||||
$eventType = EventType::factory()->create();
|
||||
$event = Event::factory()->create([
|
||||
'tenant_id' => $tenant->id,
|
||||
'event_type_id' => $eventType->id,
|
||||
'date' => Carbon::now()->subDays(2),
|
||||
'name' => ['de' => 'Test Event', 'en' => 'Test Event'],
|
||||
'settings' => [],
|
||||
]);
|
||||
|
||||
$response = $this->authenticatedRequest('PUT', "/api/v1/tenant/events/{$event->slug}", [
|
||||
'settings' => [
|
||||
'engagement_mode' => 'photo_only',
|
||||
],
|
||||
]);
|
||||
|
||||
$response->assertOk();
|
||||
$event->refresh();
|
||||
$this->assertSame('photo_only', data_get($event->settings, 'engagement_mode'));
|
||||
}
|
||||
|
||||
public function test_create_event_rejects_unavailable_service_tier_for_partner_kontingent(): void
|
||||
{
|
||||
$tenant = $this->tenant;
|
||||
|
||||
Reference in New Issue
Block a user