user(); if (!$user) { return []; } $svc = app(CallLogFieldSettingsService::class); // Built-in field rules from service (already flat, no custom_data wrapper) $rules = $svc->getValidationRules($user); unset($rules['custom_data']); // Add individual flat rules for each visible custom field foreach ($svc->getEffectiveFields($user) as $field) { if (!($field['is_custom'] ?? false) || !($field['visible'] ?? false)) { continue; } $rule = ($field['required'] ?? false) ? ['required'] : ['nullable']; $type = $field['type'] ?? 'text'; if ($type === 'number') { $rule[] = 'numeric'; } elseif ($type === 'email') { $rule[] = 'email'; } elseif ($type === 'date') { $rule[] = 'date'; } elseif ($type === 'datetime') { $rule[] = 'date'; } elseif (is_int($field['max_length'] ?? null)) { $rule[] = 'string'; $rule[] = 'max:' . $field['max_length']; } $rules[$field['key']] = $rule; } $rules['linkedid'] = ['nullable', 'string', 'max:255']; $rules['user_id'] = ['nullable', 'integer', 'exists:users,id']; return $rules; } protected function failedValidation(Validator $validator): void { throw new HttpResponseException(response()->json([ 'status' => false, 'errors' => $validator->errors(), 'message' => 'Validation failed', ], 422)); } }