- 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.
73 lines
4.2 KiB
PHP
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.'),
|
|
];
|
|
}
|
|
}
|