Files
voltcerto/app/Http/Requests/LeadRequest.php
Luis Medon e488ae3342 Add feature tests, unit tests, and configuration for Laravel application
- Created ExampleTest and RoutesTest for basic application response and route testing.
- Implemented IsolatedDatabaseTestCase for isolated database testing.
- Added unit tests for various models and services including Contract, CPE, and LeadDetail.
- Developed request validation tests for CreateClientRequest, UpdateClientRequest, and ContractRequest.
- Introduced Vite configuration for asset management in the Laravel application.
2026-10-29 11:30:06 +00:00

73 lines
4.2 KiB
PHP

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LeadRequest extends FormRequest
{
protected function localizedMessage(string $key, string $fallback): string
{
if (function_exists('app') && app()->bound('translator')) {
return __($key, [], app()->getLocale()) ?: $fallback;
}
return $fallback;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'name' => 'required|string|max:255',
'email' => 'nullable|email|max:255',
'phone' => 'nullable|string|max:20',
'lead_status_id' => 'nullable|exists:lead_status,id',
'notes' => 'nullable|string',
'contact_info' => 'nullable|string',
'address' => 'nullable|string|max:255',
'contact_date' => 'nullable|date_format:d/m/Y',
'contract_end_date' => 'nullable|date_format:d/m/Y|after_or_equal:contact_date',
'contract_type' => 'nullable|in:CPE,CUI',
'delivery_point_code' => 'nullable'
];
}
public function messages(): array
{
return [
'name.required' => $this->localizedMessage('validation.custom.name.required', 'O nome é obrigatório.'),
'name.string' => $this->localizedMessage('validation.custom.name.string', 'O nome deve ser texto.'),
'name.max' => $this->localizedMessage('validation.custom.name.max', 'O nome não pode ter mais de 255 caracteres.'),
'email.email' => $this->localizedMessage('validation.custom.email.email', 'O e-mail deve ser válido.'),
'email.max' => $this->localizedMessage('validation.custom.email.max', 'O e-mail não pode ter mais de 255 caracteres.'),
'phone.string' => $this->localizedMessage('validation.custom.phone.string', 'O telefone deve ser texto.'),
'phone.max' => $this->localizedMessage('validation.custom.phone.max', 'O telefone não pode ter mais de 20 caracteres.'),
'lead_status_id.exists' => $this->localizedMessage('validation.custom.lead_status_id.exists', 'O estado do lead selecionado não é válido.'),
'notes.string' => $this->localizedMessage('validation.custom.notes.string', 'As notas devem ser texto.'),
'contact_info.string' => $this->localizedMessage('validation.custom.contact_info.string', 'As informações de contacto devem ser texto.'),
'contact_info.max' => $this->localizedMessage('validation.custom.contact_info.max', 'As informações de contacto não podem exceder 255 caracteres.'),
'address.string' => $this->localizedMessage('validation.custom.address.string', 'A morada deve ser texto.'),
'address.max' => $this->localizedMessage('validation.custom.address.max', 'A morada não pode ter mais de 255 caracteres.'),
'contact_date.date' => $this->localizedMessage('validation.custom.contact_date.date', 'A data de contacto deve ser válida.'),
'contact_date.date_format' => $this->localizedMessage('validation.custom.contact_date.date_format', 'A data de contacto deve estar no formato DD/MM/AAAA.'),
'contract_end_date.date' => $this->localizedMessage('validation.custom.contract_end_date.date', 'A data de fim do contrato deve ser válida.'),
'contract_end_date.after_or_equal' => $this->localizedMessage('validation.custom.contract_end_date.after_or_equal', 'A data de fim de contrato deve ser igual ou posterior à data de contacto.'),
'contract_end_date.date_format' => $this->localizedMessage('validation.custom.contract_end_date.date_format', 'A data de fim de contrato deve estar no formato DD/MM/AAAA.'),
'contract_type.in' => $this->localizedMessage('validation.custom.contract_type.in', 'O tipo de contrato deve ser CPE ou CUI.'),
];
}
}