Edit File: AddItemToCartRequest.php
<?php namespace App\Http\Requests\Api\User\Cart; use App\Http\Requests\Api\BaseApiRequest; use App\Models\Product; use App\Models\ProductClassification; use Illuminate\Validation\Rule; class AddItemToCartRequest extends BaseApiRequest { public function rules() { return [ 'product_id' => ['required', Rule::exists('products', 'id')->where('deleted_at', null)], 'quantity' => 'required|numeric', 'user_id' => 'required|exists:users,id', 'classification.*' => 'nullable|array', 'classification.*.id' => 'nullable|exists:product_classifications,id', 'classification.*.addon_id' => 'nullable|exists:product_addons,id', ]; } public function prepareForValidation() { $this->merge([ 'user_id' => auth()->id(), 'classification' => isset($this?->classification) && !empty($this->classification) ? json_decode($this->classification, true) : null, ]); } public function messages() { return [ 'product_id.exists' => trans('apis.product_id_exists'), ]; } public function withValidator($validator) { $validator->after(function ($validator) { $product = Product::find($this->product_id); $productHasRequiredClassifications = $product?->productClassifications()->where('is_required', true)->exists(); if ($productHasRequiredClassifications && empty($this->classification)) { $validator->errors()->add('product_id', trans('apis.product_has_required_classifications')); } if (!empty($this->classification)) { // Retrieve the IDs of required classifications for the product $classificationIds = array_column($this->classification, 'id'); foreach ($classificationIds as $classificationId) { // Retrieve the classification from the database $classification = ProductClassification::find($classificationId); if ($classification && isset($classification->number_of_choices)) { $currentCount = count(array_filter($this->classification, function ($item) use ($classificationId) { return $item['id'] == $classificationId; })); // Check if the current count exceeds the max_chooses if ($currentCount > $classification->number_of_choices) { $validator->errors()->add('classification', trans('apis.classification_limit', [ 'number_of_choices' => $classification->number_of_choices, 'classification_name' => $classification->name, ])); } } } } }); } }
Back to File Manager