['required', Rule::exists('products', 'uuid')->whereNull('deleted_at')], 'billing_cycle'=> ['required', Rule::enum(ProductBillingCycle::class)], 'server_name' => 'nullable|string|max:255', 'os_id' => 'nullable|integer', 'addons' => 'array', 'addons.*.addon_id' => 'nullable|exists:product_addon,id', 'addons.*.qty' => 'nullable|integer|min:0', ]; } public function messages(): array { return [ 'product_id.required' => 'Vui lòng chọn sản phẩm', 'product_id.exists' => 'Sản phẩm không tồn tại', 'billing_cycle.required' => 'Vui lòng chọn chu kỳ thanh toán', 'billing_cycle.enum' => 'Chu kỳ thanh toán không hợp lệ', 'billing_cycle.exists' => 'Chu kỳ thanh toán không áp dụng cho sản phẩm này', 'os_id.exists' => 'Hệ điều hành không hợp lệ', 'addons.*.addon_id.exists' => 'Addon không tồn tại', 'addons.*.qty.min' => 'Số lượng addon phải lớn hơn 0', ]; } }