Edit File: RateService.php
<?php namespace App\Services; use App\Models\Order; use App\Services\Provider\ProviderService; class RateService extends BaseService { public function getMyGivenRates($user) { return $user->givenRates()->orderByDesc('created_at')->get()->load('ratingable'); } public function getUserByType($type, $id) { return match ($type) { 'user' => (new ClientService())->find($id), 'provider' => (new ProviderService())->find($id), 'delegate' => (new DelegateService())->find($id), default => null }; } public function getUserRevicedRates($type, $id, $paginateNum = 10) { $user = $this->getUserByType($type, $id); abort_if(!isset($user), 404); $rates = $user->givenRates()->with('ratingable')->paginate($paginateNum); return $rates; } public function createOrderRate($request) { $userClass = get_class(auth()->user()); $order = Order::with(['user', 'provider', 'delegate', 'rates' => function ($q) use ($userClass) { $q->where([ 'ratingable_id' => auth()->id(), 'ratingable_type' => $userClass]); }])->find($request->order_id); $result = $this->storeRateForOrder($order, $request); return [ 'key' => $result['key'], 'msg' => $result['msg'], ]; } protected function storeRateForOrder($order, $request) { if(!isset($order) || $order->rates->isNotEmpty()) { return [ 'key' => 'fail', 'msg' => __('apis.order_already_rated'), ]; } $order->rates()->createMany($request->rates); foreach ($request->ratedUsers as $ratedUser) { $order->$ratedUser->update(['avg_rate' => $order->$ratedUser->givenRates->avg('rate')]); } return [ 'key' => 'success', 'msg' => __('apis.order_rated_successfully'), ]; } }
Back to File Manager