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