Edit File: RateRequest.php
<?php namespace App\Http\Requests\Api\Provider; use App\Models\Order; use App\Models\Delegate; use App\Models\Provider; use App\Enums\OrderStatusEnum; use App\Enums\ProductDeliveryTypesEnum; use App\Http\Requests\Api\BaseApiRequest; class RateRequest extends BaseApiRequest { public function rules() { return [ 'delegate_rate' => 'required|numeric|min:1|max:5', 'order_id' => 'required|exists:orders,id', 'order' => 'nullable', ]; } public function prepareForValidation() { $order = Order::where([ 'receiving_method' => ProductDeliveryTypesEnum::Home->value, 'provider_id' => auth()->id(), 'status' => OrderStatusEnum::Client_delivered->value ])->find($this->order_id); if ($order) { $rates = [ [ 'ratedable_type' => Delegate::class, 'ratedable_id' => $order->delegate_id, 'rate' => $this->delegate_rate, 'order_id' => $this->order_id, 'ratingable_type' => Provider::class, 'ratingable_id' => auth('provider')->id(), ] ]; $this->merge([ 'rates' => $rates, 'ratedUsers' => ['delegate'], 'order' => $order ]); } } public function withValidator($validator) { $validator->after(function ($validator) { if (!$this->order) { $validator->errors()->add('order_id', __('apis.order_not_fount_or_not_for_you')); } else { if ($this->order->rates()->where([ 'ratingable_id' => auth()->id(), 'ratingable_type' => Provider::class ])->exists()) { $validator->errors()->add('order_id', __('apis.already_rated')); } } }); } }
Back to File Manager