*/ public function rules(): array { return [ 'title' => ['required', 'string', 'max:255'], 'description' => ['nullable', 'string'], 'collection_id' => ['nullable', 'exists:task_collections,id', function ($attribute, $value, $fail) { $tenantId = request()->tenant?->id; if ($tenantId && !\App\Models\TaskCollection::where('id', $value)->where('tenant_id', $tenantId)->exists()) { $fail('Die TaskCollection gehört nicht zu diesem Tenant.'); } }], 'priority' => ['nullable', Rule::in(['low', 'medium', 'high', 'urgent'])], 'due_date' => ['nullable', 'date', 'after:now'], 'is_completed' => ['nullable', 'boolean'], 'assigned_to' => ['nullable', 'exists:users,id', function ($attribute, $value, $fail) { $tenantId = request()->tenant?->id; if ($tenantId && !\App\Models\User::where('id', $value)->where('tenant_id', $tenantId)->exists()) { $fail('Der Benutzer gehört nicht zu diesem Tenant.'); } }], ]; } /** * Get custom messages for validator errors. */ public function messages(): array { return [ 'title.required' => 'Der Task-Titel ist erforderlich.', 'title.max' => 'Der Task-Titel darf maximal 255 Zeichen haben.', 'collection_id.exists' => 'Die ausgewählte TaskCollection existiert nicht.', 'priority.in' => 'Die Priorität muss low, medium, high oder urgent sein.', 'due_date.after' => 'Das Fälligkeitsdatum muss in der Zukunft liegen.', 'assigned_to.exists' => 'Der zugewiesene Benutzer existiert nicht.', ]; } }