gruene-seele/app/Repositories/PackagingItemRepository.php

70 lines
1.7 KiB
PHP

<?php
namespace App\Repositories;
use App\Models\PackagingItem;
class PackagingItemRepository
{
/**
* @param array<string, mixed> $data
*/
public function create(array $data): PackagingItem
{
$attrs = $this->extractAttributes($data);
\DB::enableQueryLog();
try {
$item = PackagingItem::create($attrs);
} catch (\Throwable $e) {
$queries = \DB::getQueryLog();
$lastQ = end($queries);
\Log::error('PackagingItem CREATE FAILED', [
'error' => $e->getMessage(),
'sql' => $lastQ['query'] ?? 'unknown',
'bindings' => $lastQ['bindings'] ?? [],
'binding_types' => array_map(fn($v) => gettype($v) . ':' . json_encode($v), $lastQ['bindings'] ?? []),
'attributes_passed' => $attrs,
]);
throw $e;
}
\DB::disableQueryLog();
return $item;
}
/**
* @param array<string, mixed> $data
*/
public function update(PackagingItem $packagingItem, array $data): PackagingItem
{
$packagingItem->update($this->extractAttributes($data));
return $packagingItem->fresh();
}
/**
* @param array<string, mixed> $data
* @return array<string, mixed>
*/
protected function extractAttributes(array $data): array
{
$attrs = collect($data)->only([
'packaging_material_id',
'supplier_id',
'name',
'category',
'weight_grams',
'min_stock_alert',
'url',
'product_id',
'active',
])->all();
$attrs['weight_grams'] = $attrs['weight_grams'] ?? 0;
return $attrs;
}
}