mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-09-01 21:00:58 +00:00
* 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
47 lines
1.4 KiB
PHP
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(),
|
|
]);
|
|
}
|
|
}
|