fe4a409480
Task 1.9 плана 2026-05-24-billing-v2-spec-c-preflight-vtb. Разовая artisan-команда для запуска при выкатке Spec C — прогоняет BalancePreflightSweepJob по всем тенантам, замораживает legacy- тенантов в минусе. Идемпотентна (sweep-job triggers только на active↔frozen переходах, стабильное состояние не трогает). TDD: 1 тест GREEN. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
38 lines
1.5 KiB
PHP
38 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Jobs\Billing\BalancePreflightSweepJob;
|
|
use Illuminate\Console\Command;
|
|
|
|
/**
|
|
* One-time: при выкатке преfflight прогнать всех тенантов и заморозить
|
|
* недофинансированных. Запускается ОДИН раз вручную после миграции.
|
|
*
|
|
* См. спек §3.9: «Клиент уже в минусовом балансе на момент запуска
|
|
* преfflight (legacy состояние) — одноразовая artisan-команда».
|
|
*
|
|
* Идемпотентна: повторный запуск не пере-замораживает уже замороженных
|
|
* (логика sweep-джоба — переход active→frozen / frozen→active, стабильное
|
|
* состояние не трогается).
|
|
*/
|
|
final class BillingPreflightInitialSweepCommand extends Command
|
|
{
|
|
/** @var string */
|
|
protected $signature = 'billing:preflight-initial-sweep';
|
|
|
|
/** @var string */
|
|
protected $description = 'Разовый преfflight при внедрении — заморозить недофинансированных тенантов';
|
|
|
|
public function handle(): int
|
|
{
|
|
$this->warn('Разовый преfflight всех тенантов. Запускать ОДИН раз после выкатки Spec C.');
|
|
(new BalancePreflightSweepJob)->handle();
|
|
$this->info('Initial sweep завершён.');
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
}
|