From c177bdbb227c4f596e1e0f9a1dadfc442f949299 Mon Sep 17 00:00:00 2001 From: adonis Date: Mon, 29 Jun 2026 19:58:06 +0330 Subject: [PATCH] fix pictures --- app/Http/Controllers/Admin/FileController.php | 27 ++++++------ .../Controllers/Admin/GiftCardController.php | 2 +- .../Controllers/Customer/CartController.php | 24 +++++++---- .../Customer/ProductController.php | 2 +- app/Models/File.php | 42 ++++++++++++++++--- app/Services/AssetSummaryService.php | 6 +-- 6 files changed, 72 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/Admin/FileController.php b/app/Http/Controllers/Admin/FileController.php index 2e0088b..e3952ab 100644 --- a/app/Http/Controllers/Admin/FileController.php +++ b/app/Http/Controllers/Admin/FileController.php @@ -30,27 +30,30 @@ class FileController extends Controller public function store(Request $request) { -// Store FIle in Public Storage By Date -// Date Sample is : // of today - - $data = $request->all(); - $path = $this->createDir(); $uploaded = $request->file('file'); + if (! $uploaded || ! $uploaded->isValid()) { + return response()->json(['message' => 'فایل بارگذاری نشد یا خالی است'], 422); + } + + $path = $this->createDir(); + $data = $request->all(); $data['original_name'] = $uploaded->getClientOriginalName(); - $data['ext'] = $uploaded->getClientOriginalExtension(); - if (!isset($data['title']) || is_null($data['title'])) { + $data['ext'] = $uploaded->getClientOriginalExtension() + ?: $uploaded->extension() + ?: 'jpg'; + if (! isset($data['title']) || is_null($data['title'])) { $data['title'] = $data['original_name']; } - $file_name_src = md5(time() . $data['original_name']); - $file_name = $file_name_src . '.' . $data['ext']; + $file_name_src = md5(time().$data['original_name']); + $file_name = $file_name_src.'.'.$data['ext']; $data['has_thumb'] = false; $data['size'] = $uploaded->getSize(); Storage::disk('public')->putFileAs($path, $uploaded, $file_name); - $data['src'] = 'storage/' . $path . '/' . $file_name; -// $data['size'] = $file->getSize(); + $data['src'] = 'storage/'.$path.'/'.$file_name; $data['user_id'] = auth()->id(); $data['sts'] = 1; $file_create = File::create($data); - return response()->json($file_create); + + return response()->json($file_create->fresh()); } } diff --git a/app/Http/Controllers/Admin/GiftCardController.php b/app/Http/Controllers/Admin/GiftCardController.php index b3ca3f6..d53fb14 100644 --- a/app/Http/Controllers/Admin/GiftCardController.php +++ b/app/Http/Controllers/Admin/GiftCardController.php @@ -295,7 +295,7 @@ class GiftCardController extends Controller ]); } - private function applyDiscount(string $code, $customerId): array + public function applyDiscount(string $code, $customerId): array { $giftcode = $this->verifyDiscount($code); if (! empty($giftcode['message'])) { diff --git a/app/Http/Controllers/Customer/CartController.php b/app/Http/Controllers/Customer/CartController.php index d96a541..9a4f42f 100644 --- a/app/Http/Controllers/Customer/CartController.php +++ b/app/Http/Controllers/Customer/CartController.php @@ -276,12 +276,15 @@ class CartController extends Controller $data['total_price'] = $total_price; //مقدار قابل پرداخت $data['payment_amount'] = $data['total_price']; - if(!empty($data[0]['discount_code'])){ - $discount = new GiftCardController(); - $discount = $discount->useDiscount($data[0]['discount_code'], $data['customer_id']); + if (!empty($data[0]['discount_code'])) { + $discountCtrl = app(GiftCardController::class); + $discountResult = $discountCtrl->applyDiscount((string) $data[0]['discount_code'], $data['customer_id']); + if (!empty($discountResult['message'])) { + throw new UnprocessableEntityHttpException($discountResult['message']); + } $data['discount'] = true; - if(!empty($discount['amount'])){ - $data['payment_amount'] = $data['total_price'] = $data['total_price'] - ($data['total_price'] * (float)$discount['amount']); + if (!empty($discountResult['amount'])) { + $data['payment_amount'] = $data['total_price'] = $data['total_price'] - ($data['total_price'] * (float) $discountResult['amount']); } } $data['cart_id'] = (int)$cart->id; @@ -407,11 +410,14 @@ class CartController extends Controller ]; if (!empty($payload[0]['discount_code'])) { - $discount = new GiftCardController(); - $discount = $discount->useDiscount($payload[0]['discount_code'], $customerId); - if (!empty($discount['amount'])) { + $discountCtrl = app(GiftCardController::class); + $discountResult = $discountCtrl->applyDiscount((string) $payload[0]['discount_code'], $customerId); + if (!empty($discountResult['message'])) { + throw new UnprocessableEntityHttpException($discountResult['message']); + } + if (!empty($discountResult['amount'])) { $orderData['payment_amount'] = $orderData['total_price'] = - $orderData['total_price'] - ($orderData['total_price'] * (float) $discount['amount']); + $orderData['total_price'] - ($orderData['total_price'] * (float) $discountResult['amount']); } } diff --git a/app/Http/Controllers/Customer/ProductController.php b/app/Http/Controllers/Customer/ProductController.php index 42c695d..310446c 100644 --- a/app/Http/Controllers/Customer/ProductController.php +++ b/app/Http/Controllers/Customer/ProductController.php @@ -78,7 +78,7 @@ class ProductController extends SuperController ]); if ($product->relationLoaded('file') && $product->file) { - $product->file->setAttribute('full_src', $product->file->src); + $product->file->setAttribute('full_src', File::publicUrl($product->file->getAttributes()['src'] ?? null)); } if ($representativeId !== null && (int) $product->id === $representativeId) { diff --git a/app/Models/File.php b/app/Models/File.php index 16efe76..3cc16f1 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -5,12 +5,12 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; -use App\Models\Setting; class File extends Model { use HasFactory; use Selector; + protected $fillable = [ 'original_name', 'title', @@ -22,11 +22,43 @@ class File extends Model 'has_thumb', 'url', ]; + protected $casts = [ - "has_thumb"=>"boolean" + 'has_thumb' => 'boolean', ]; - public function getSrcAttribute(){ - return env('domain').$this->attributes['src']; -// return url($this->attributes['src']); + + protected $appends = [ + 'full_src', + ]; + + /** + * مسیر نسبی ذخیره‌شده در DB — بدون پیشوند دامنه. + */ + public function getSrcAttribute(): ?string + { + return $this->attributes['src'] ?? null; + } + + /** + * URL کامل قابل نمایش در مرورگر (بر اساس APP_URL و symlink storage). + */ + public function getFullSrcAttribute(): ?string + { + return self::publicUrl($this->attributes['src'] ?? null); + } + + public static function publicUrl(?string $path): ?string + { + if ($path === null || trim($path) === '') { + return null; + } + + $trimmed = trim($path); + + if (preg_match('/^https?:\/\//i', $trimmed)) { + return $trimmed; + } + + return asset(ltrim($trimmed, '/')); } } diff --git a/app/Services/AssetSummaryService.php b/app/Services/AssetSummaryService.php index db2074a..d8192db 100644 --- a/app/Services/AssetSummaryService.php +++ b/app/Services/AssetSummaryService.php @@ -646,12 +646,12 @@ class AssetSummaryService } $fileModel = $product->file; - $src = (string) ($fileModel->src ?? ''); + $relativeSrc = (string) ($fileModel->getAttributes()['src'] ?? ''); return [ 'id' => $fileModel->id, - 'src' => $src, - 'full_src' => $src, + 'src' => $relativeSrc, + 'full_src' => \App\Models\File::publicUrl($relativeSrc), 'url' => $fileModel->url ?? null, ]; }