Edit File: ReviewController.php
<?php namespace App\Http\Controllers\Api; use App\Enums\UserTypes; use App\Http\Controllers\Controller; use App\Http\Resources\UserCollection; use App\Http\Resources\ReviewsResource; use App\Http\Resources\UserResource; use App\Http\Requests\Api\Review\ReviewUserRequest; use App\Http\Requests\Api\Review\ReviewStoreRequest; use App\Http\Requests\Api\Review\ReportRequest; use App\Rules\CheckCodeRule; use App\Models\User; use App\Models\Order; use App\Models\Review; use App\Models\ReviewReport; use App\Models\Store; use App\Traits\ApiTrait; use App\Traits\Uploadable; use App\Traits\GeneralTrait; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use App\Jobs\NewReviewNotify; class ReviewController extends Controller { use ApiTrait; // public function reviewUser( ReviewUserRequest $request ) { // $delegate = auth( 'api' )->user(); // $user = User::where( [ 'id'=>$request[ 'rateable_id' ], 'type'=>UserTypes::USER ] )->first(); // $order = Order::where( 'id', $request[ 'order_id' ] )->where( 'user_id', $user->id )->orwhere( 'id', $request[ 'order_id' ] )->where( 'delegate_id', $delegate->id )->first(); // if ( !$order ) { // $msg = trans( 'order.not_available' ); // return $this->failMsg( $msg ); // } // Review::where( [ 'rateable_id'=>$request[ 'rateable_id' ], 'order_id'=>$order->id, 'reviewable_id'=>$delegate->id ] )->delete(); // $rateableuser = User::where( 'id', '!=', $delegate->id )->where( 'id', $request[ 'rateable_id' ] )->first(); // if ( !$rateableuser ) { // $msg = trans( 'user.not_available' ); // return $this->failMsg( $msg ); // } // // dd( $rateableuser, $delegate, $user, $order ); // $rate = $rateableuser->ratings()->create( [ // 'rate' => $request->rate, // 'comment' => $request->comment, // 'order_id' => $request->order_id, // 'rateable_type' => get_class( $delegate ), // 'rateable_id' => $delegate->id, // ] ); // $rateableuser->num_rating = $rateableuser->ratings()->count(); // $rateableuser->rate = $rateableuser->ratings(); // $rateableuser->update(); // // dispatch( new NewReviewNotify( $rateableuser ) ); // $msg = trans( 'review.successfully_sent' ); // return $this->successMsg( $msg ); // } public function reviewUser(ReviewUserRequest $request) { $delegate = auth('api')->user(); // dd($delegate); $user = User::where([ 'id' => $request['rateable_id'], 'type' => UserTypes::USER ])->firstOrFail(); $order = Order::where('id', $request['order_id']) ->where(function ($query) use ($user, $delegate) { $query->where('user_id', $user->id) ->orWhere('delegate_id', $delegate->id); }) ->firstOrFail(); // delete old review at the same order Review::where(['rateable_id'=>$request['rateable_id'],'order_id'=>$order->id,'reviewable_id'=>$user->id])->delete(); $rateableUser = User::where('id','!=',$delegate->id)->where('id',$request['rateable_id'])->first(); if(!$rateableUser){ $msg = trans('user.not_available'); return $this->failMsg($msg); } $rateableUser = User::where('id', '!=', $delegate->id) ->where('id', $request['rateable_id']) ->firstOrFail(); Review::create([ 'rate' => $request->rate, 'comment' => $request->comment, 'order_id' => $request->order_id, 'rateable_type' => get_class($user), 'rateable_id' => $user->id, 'reviewable_type' => get_class($delegate), 'reviewable_id' => $delegate->id ]); $rateableUser->num_rating = $rateableUser->ratings()->count(); $rateableUserRates = $rateableUser->ratings(); $rateableUser->save(); dispatch(new NewReviewNotify($rateableUser,$request->order_id)); return $this->successMsg(trans('review.successfully_sent')); } public function reviewStore( ReviewStoreRequest $request ) { $user = auth( 'api' )->user(); $order = Order::where( 'id', $request[ 'order_id' ] )->where( 'user_id', $user->id )->first(); if ( !$order ) { $msg = trans( 'order.not_available' ); return $this->failMsg( $msg ); } Review::where( [ 'store_id'=>$request[ 'store_id' ], 'order_id'=>$order->id, 'user_id'=>$user->id ] )->delete(); $store = Store::find( $request[ 'store_id' ] ); if ( !$store ) { $msg = trans( 'stores.not_available' ); return $this->failMsg( $msg ); } Review::create( $request->validated() + [ 'user_id' => $user->id ] ); // update second user rating $store->num_rating = $store->reviews()->count(); $store->rate = $store->rating(); $store->update(); // notify //order finally succeeded $msg = trans( 'review.successfully_sent' ); return $this->successMsg( $msg ); } public function reviewDelegate( ReviewUserRequest $request ) { $user = auth( 'api' )->user(); $delegate = User::where('id',$request['rateable_id'])->first(); // dd($user->id,$delegate->id,$request->order_id); $order = Order::where( 'id', $request[ 'order_id' ] )->first(); if ( !$order ) { $msg = trans( 'order.not_available' ); return $this->failMsg( $msg ); } // delete old review at the same order Review::where(['rateable_id'=>$request['rateable_id'],'order_id'=>$order->id,'reviewable_id'=>$user->id])->delete(); // $rateableUser = User::where('id', '!=', $user->id) // ->where('id', $request['rateable_id']) // ->firstOrFail(); if ( !$delegate ) { $msg = trans( 'order.not_available' ); return $this->failMsg( $msg ); } Review::create([ 'rate' => $request->rate, 'comment' => $request->comment, 'order_id' => $request->order_id, 'reviewable_type' => get_class($user), 'reviewable_id' => $user->id, 'rateable_type' => get_class($delegate), 'rateable_id' => $delegate->id, ]); $num_rating = $delegate->ratings()->where('type','order')->orderBy( 'created_at', 'desc' )->count(); $sum=$delegate->ratings()->where('type','order')->orderBy( 'created_at', 'desc' )->sum('rate'); $delegate->rate = number_format($sum/$num_rating,2); $delegate->num_rating = $delegate->ratings()->where('type','order')->orderBy( 'created_at', 'desc' )->count(); $delegate->save(); dispatch(new NewReviewNotify($delegate,$request->order_id)); return $this->successMsg(trans('review.successfully_sent')); // insert review } public function reviewApp(Request $request ) { $user = auth( 'api' )->user(); // $delegate = User::where('id',$request['rateable_id'])->first(); // // dd($user->id,$delegate->id,$request->order_id); // $order = Order::where( 'id', $request[ 'order_id' ] )->first(); // if ( !$order ) { // $msg = trans( 'order.not_available' ); // return $this->failMsg( $msg ); // } // // delete old review at the same order // Review::where(['rateable_id'=>$request['rateable_id'],'order_id'=>$order->id,'reviewable_id'=>$user->id])->delete(); // // $rateableUser = User::where('id', '!=', $user->id) // // ->where('id', $request['rateable_id']) // // ->firstOrFail(); // if ( !$delegate ) { // $msg = trans( 'order.not_available' ); // return $this->failMsg( $msg ); // } Review::create([ 'rate' => $request->rate??1, 'comment' => $request->comment??"", 'reviewable_type' => get_class($user), 'reviewable_id' => $user->id, 'type'=>'app' ]); // $num_rating = $delegate->ratings()->orderBy( 'created_at', 'desc' )->count(); // $sum=$delegate->ratings()->orderBy( 'created_at', 'desc' )->sum('rate'); // $delegate->rate = number_format($sum/$num_rating,2); // $delegate->num_rating = $delegate->ratings()->orderBy( 'created_at', 'desc' )->count(); // $delegate->save(); // dispatch(new NewReviewNotify($delegate,$request->order_id)); return $this->successMsg(trans('review.successfully_sent')); // insert review } // public function storeReviews( Request $request ) { // $store = auth( 'api' )->user(); // if ( !$store ) { // $msg = trans( 'stores.not_available' ); // return $this->failMsg( $msg ); // } // $reviews = $store->reviews()->orderBy( 'created_at', 'desc' )->get(); // $data[ 'reviews' ] = ReviewsResource::collection( $reviews ); // return $this->dataReturn( $data ); // } public function delegateReviews( Request $request ) { if($request['delegate_id']){ $delegate = User::find($request['delegate_id']); }else{ $delegate = auth( 'api' )->user(); } // dd( $delegate ); if ( !$delegate ) { $msg = trans( 'stores.not_available' ); return $this->failMsg( $msg ); } $reviews = $delegate->ratings()->where('type','order')->orderBy( 'created_at', 'desc' )->get(); $data['avg']=$delegate->rate; $data[ 'reviews' ] = ReviewsResource::collection( $reviews ); return $this->dataReturn( $data ); } public function userReviews( Request $request ) { $user = auth( 'api' )->user(); $reviews = $user->ratings()->where('type','order')->orderBy( 'created_at', 'desc' )->get(); $data[ 'reviews' ] = ReviewsResource::collection( $reviews ); return $this->dataReturn( $data ); } public function reportReview( ReportRequest $request ) { $user = auth( 'api' )->user(); $review = $user->myReviews()->where( 'id', $request[ 'review_id' ] )->first(); if ( !$review ) { $msg = trans( 'review.not_available' ); return $this->failMsg( $msg ); } // insert report ReviewReport::create( $request->validated() + [ 'user_id' => $user->id, 'review_id'=>$review ] ); //succeeded $msg = trans( 'review.successfully_reported' ); return $this->successMsg( $msg ); } }
Back to File Manager