Genel ağırlıkla fonksiyonlarım da dönüş tiplerine ve tiplere çok önem vermiyordum.
Sinan abi ile bir iş görüşmesi yapmıştık bu konuda beni uyarmıştı bu şekilde kullanmam konusunda, onun yönlendirmesi ile vaktim kısıtlı da olsa elimden geldiğince dönüş tiplerini vermeye çalışıyorum.
AI'ın da etkisi oluyor tabi 😃
@sineld Sinan abiye beni bu konuda uyardığı kendimi geliştirmeme daha da katkı sağladığı için teşekkürü borç bilirim.
Şuanda ki kod yapısında da bir eksiğim var ise düzeltmek isterim. Bir eticaret sitesi kodluyoruz o yüzden sizin de önerilerinizi dikkate alacağım.
<?php
namespace App\Repositories;
use App\Models\{Product, Brand, ProductDetail, ProductEcommarceDetail, ProductListPhoto};
use Illuminate\Support\Collection;
class ProductRepository
{
public function getFilteredProducts(array $productIds, int $saleRegionId): Collection
{
return Product::whereIn('id', $productIds)
->select('id', 'name', 'slug', 'brand_id', 'category_id')
->whereJsonContains('active_sale_region_ids', (string) $saleRegionId)
->orderBy('sort_order', 'asc')
->get()
->map(function ($product) {
return $this->enrichProductData($product);
});
}
public function getProductsByGroupAndCategory(string $group, int $categoryId): Collection
{
return Product::whereJsonContains('product_group_ids', $group)
->where('category_id', $categoryId)
->get();
}
public function getBrandsByProducts(Collection $products): Collection
{
$brandIds = $products->pluck('product.brand_id')->unique()->values();
return Brand::select('id', 'name', 'url', 'seo_title')
->whereIn('id', $brandIds)
->get();
}
private function enrichProductData($product): array
{
return [
'product' => $product,
'listImages' => $this->getProductListImages($product->id),
'detail' => $this->getProductDetail($product->id),
'ecommerceDetail' => $this->getProductEcommerceDetail($product->id)
];
}
private function getProductListImages(int $productId): array
{
return ProductListPhoto::where('product_id', $productId)
->orderBy('sort', 'asc')
->get()
->map(function ($image) {
return [
'type' => $image->photo_type ?? null,
'imagePath' => asset($image->image)
];
})
->toArray();
}
private function getProductDetail(int $productId)
{
return ProductDetail::select(
'sale_price',
'discount_total_price',
'stock_status',
'allow_out_of_stock_purchase'
)
->where('product_id', $productId)
->first();
}
private function getProductEcommerceDetail(int $productId)
{
return ProductEcommarceDetail::select(
'new_product',
'selected_product',
'free_delivery',
'same_day_delivery',
'best_seller',
'new_comer',
'on_sale'
)
->where('product_id', $productId)
->first();
}
}