Files
ABSDEV/Modules/Commerce/Services/DatabaseInventoryProvider.php
2026-07-24 14:59:44 +01:00

25 lines
820 B
PHP

<?php
namespace Modules\Commerce\Services;
use Illuminate\Support\Facades\DB;
use Modules\Commerce\Contracts\InventoryProvider;
use Modules\Commerce\Models\InventoryMovement;
use Modules\Commerce\Models\Product;
final class DatabaseInventoryProvider implements InventoryProvider
{
public function adjust(Product $product, int $quantity, string $reason, ?int $userId = null): void
{
DB::transaction(function () use ($product, $quantity, $reason, $userId) {
$product->increment('stock_quantity', $quantity);
InventoryMovement::create(['product_id' => $product->id, 'quantity' => $quantity, 'reason' => $reason, 'created_by' => $userId]);
});
}
public function available(Product $product): int
{
return max(0, (int) $product->stock_quantity);
}
}