25 lines
820 B
PHP
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);
|
|
}
|
|
}
|