Edit File: ProductService.php
<?php namespace App\Services\Provider; use App\Enums\NegotiationOrderStatusEnum; use App\Enums\OrderStatusEnum; use App\Models\Product; use App\Models\ProductImage; use App\Services\BaseService; class ProductService extends BaseService { public function __construct() { parent::__construct(Product::class); } public function all($paginateNum = 15) { return Product::with('productImages')->where('provider_id', auth('provider')->id())->paginate($paginateNum); } public function create($request) { $product = Product::create($request); if (isset($request['images'])) { $imagesData = []; foreach ($request['images'] as $image) { $imagesData[] = [ 'image' => $image ]; } $product->productImages()->createMany($imagesData); } return $product; } public function find($id) { return Product::with('productImages', 'category', 'category.parent', 'provider', 'productClassifications.productAddons')->find($id); } public function update($request, $id) { $product = $this->find($id); if (isset($request['images'])) { $imagesData = []; foreach ($request['images'] as $image) { $imagesData[] = [ 'image' => $image ]; } $product->productImages()->createMany($imagesData); } $product->update($request); return $product->refresh(); } public function delete($id) { $product = $this->find($id); if (!$product) { return ['key' => 'fail', 'status' => false, 'msg' => __('apis.not_found')]; } if ( $product->orderItems()->whereHas('order', function ($q) { $q->whereNotIn('status', [ OrderStatusEnum::Cancelled->value, OrderStatusEnum::Client_delivered->value ]); })->exists() || $product->negotationOrder()->whereNotIn('status', [ NegotiationOrderStatusEnum::Invoice_paid->value ])->exists() ) { return ['key' => 'fail', 'status' => false, 'msg' => __('admin.product_related_with_orders')]; } $this->find($id)->productImages()->delete(); $this->find($id)->delete(); return ['key' => 'success', 'status' => false, 'msg' => __('admin.deleted_successfully')]; } public function deleteImage($id) { $image = ProductImage::whereHas('product', function ($q) { $q->where('provider_id', auth('provider')->id()); })->find($id); $productImagesCount = ProductImage::where('product_id', $image->product_id)->count(); if ($productImagesCount <= 1) { return ['key' => 'fail', 'msg' => __('apis.at_least_one_image_must_remain')]; } $image->delete(); return ['key' => 'success', 'msg' => __('apis.deleted')]; } public function deleteAllProductImages($id) { return ProductImage::whereHas('product', function ($q) { $q->where('provider_id', auth('provider')->id()); })->where('product_id', $id)->delete(); } }
Back to File Manager