Files
portal-api/app/Http/Requests/Api/Client/ClientUpdateCccdRequest.php
baodev0andClaude Sonnet 5.5 55a834a2f8 feat: nhắc gia hạn QR theo dịch vụ, failover server hosting, CCCD admin, log cấp phát dịch vụ
- Mail campaign: mẫu nhắc gia hạn thanh toán QR, chọn dịch vụ + chu kỳ từng dòng (renewal_services)
- Hosting: nhiều server Plesk cho một gói (service_plan_servers), chuyển server khi server chết
- Admin xem/sửa giấy tờ định danh khách, tuỳ chọn gia hạn cho khách, nhật ký cấp phát dịch vụ
- Đánh dấu mẫu email dịch vụ là non-marketing

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-30 18:36:41 +07:00

41 lines
1.7 KiB
PHP

<?php
namespace App\Http\Requests\Api\Client;
use Illuminate\Foundation\Http\FormRequest;
class ClientUpdateCccdRequest extends FormRequest
{
public function authorize(): bool
{
return auth('client')->check();
}
public function rules(): array
{
return [
'cmnd' => 'required|string|regex:/^\d{9}(\d{3})?$/',
'cmnd_before' => 'required|file|mimetypes:image/webp|mimes:webp|max:5120|dimensions:min_width=300,min_height=300,max_width=2000,max_height=2000',
'cmnd_after' => 'required|file|mimetypes:image/webp|mimes:webp|max:5120|dimensions:min_width=300,min_height=300,max_width=2000,max_height=2000',
];
}
public function messages(): array
{
return [
'cmnd.required' => 'Số CMT/CCCD là bắt buộc',
'cmnd.regex' => 'Số CMT/CCCD phải gồm 9 hoặc 12 chữ số',
'cmnd_before.required' => 'Ảnh mặt trước là bắt buộc',
'cmnd_before.mimetypes' => 'Ảnh mặt trước phải là ảnh WebP',
'cmnd_before.mimes' => 'Ảnh mặt trước phải là ảnh WebP',
'cmnd_before.max' => 'Ảnh mặt trước tối đa 5MB',
'cmnd_before.dimensions' => 'Ảnh mặt trước phải từ 300px đến 2000px mỗi cạnh',
'cmnd_after.required' => 'Ảnh mặt sau là bắt buộc',
'cmnd_after.mimetypes' => 'Ảnh mặt sau phải là ảnh WebP',
'cmnd_after.mimes' => 'Ảnh mặt sau phải là ảnh WebP',
'cmnd_after.max' => 'Ảnh mặt sau tối đa 5MB',
'cmnd_after.dimensions' => 'Ảnh mặt sau phải từ 300px đến 2000px mỗi cạnh',
];
}
}