Files
InvoiceShelf/app/Platform/Modules/Marketplace/MarketplaceOperationLease.php
T
Darko Gjorgjijoski 5ef7804e60 refactor: adopt modular domain architecture (#747)
* refactor: stabilize model identities for domain migration

* refactor: extract module platform context

* refactor: assign models to domain contexts

* refactor: extract ai platform context

* refactor: extract storage platform context

* refactor: extract mail platform context

* refactor: extract pdf platform context

* refactor: extract operations platform context

* refactor: move installation into operations platform

* refactor: extract money domain context

* refactor: extract taxation domain context

* refactor: extract catalog domain context

* refactor: extract metadata domain context

* refactor: extract reporting domain context

* refactor: extract purchases domain context

* refactor: extract receivables domain context

* refactor: extract accounts domain context

* refactor: complete reporting statement boundary

* refactor: extract contacts domain context

* refactor: extract sales domain context

* refactor: remove legacy application layers

* fix: migrate legacy bouncer role identities
2026-08-05 17:40:03 +02:00

47 lines
1.4 KiB
PHP

<?php
namespace App\Platform\Modules\Marketplace;
use App\Platform\Modules\Models\MarketplaceOperation;
use Throwable;
class MarketplaceOperationLease
{
public function acquire(?string $slug, ?string $version, ?string $channel): ?MarketplaceOperation
{
$lock = 'marketplace-install';
MarketplaceOperation::query()->where('lock_name', $lock)->where('expires_at', '<', now())->update([
'lock_name' => null,
'status' => 'failed',
'error' => 'Marketplace operation lease expired.',
'finished_at' => now(),
]);
try {
return MarketplaceOperation::query()->create([
'lock_name' => $lock,
'slug' => $slug,
'version' => $version,
'channel' => $channel,
'status' => 'running',
'started_at' => now(),
'expires_at' => now()->addSeconds((int) config('invoiceshelf.marketplace.lease_seconds')),
]);
} catch (Throwable) {
return null;
}
}
public function finish(MarketplaceOperation $operation, string $status, ?string $error = null): void
{
$operation->update([
'lock_name' => null,
'status' => $status,
'error' => $error,
'finished_at' => now(),
'expires_at' => now(),
]);
}
}