Allow partial event updates
This commit is contained in:
@@ -389,13 +389,21 @@ class EventController extends Controller
|
|||||||
TenantMemberPermissions::ensureEventPermission($request, $event, 'events:manage');
|
TenantMemberPermissions::ensureEventPermission($request, $event, 'events:manage');
|
||||||
|
|
||||||
$validated = $request->validated();
|
$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'])) {
|
if (isset($validated['event_date'])) {
|
||||||
$validated['date'] = $validated['event_date'];
|
$validated['date'] = $validated['event_date'];
|
||||||
unset($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);
|
$validated['slug'] = $this->generateUniqueSlug($validated['name'], $tenantId, $event->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,14 @@ class EventStoreRequest extends FormRequest
|
|||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$tenantId = request()->attributes->get('tenant_id');
|
$tenantId = request()->attributes->get('tenant_id');
|
||||||
|
$creating = $this->isMethod('post');
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => [$creating ? 'required' : 'sometimes', 'string', 'max:255'],
|
||||||
'description' => ['nullable', 'string'],
|
'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'],
|
'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'],
|
'package_id' => ['nullable', 'integer', 'exists:packages,id'],
|
||||||
'service_package_slug' => [
|
'service_package_slug' => [
|
||||||
'nullable',
|
'nullable',
|
||||||
|
|||||||
@@ -199,6 +199,29 @@ class EventControllerTest extends TenantTestCase
|
|||||||
->assertJsonPath('error.code', 'event_limit_exceeded');
|
->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
|
public function test_create_event_rejects_unavailable_service_tier_for_partner_kontingent(): void
|
||||||
{
|
{
|
||||||
$tenant = $this->tenant;
|
$tenant = $this->tenant;
|
||||||
|
|||||||
Reference in New Issue
Block a user