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