45 lines
1.7 KiB
PHP
45 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\SmsCampaign;
|
|
use App\Services\Sms\SmsCampaignReconciler;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
class ReconcileSmsCampaignsCommand extends Command
|
|
{
|
|
protected $signature = 'sms-campaigns:reconcile {--limit=50 : Nombre maximum de campagnes a verifier.}';
|
|
|
|
protected $description = 'Verifie les envois incertains dans l historique OVH sans renvoyer de SMS.';
|
|
|
|
public function handle(SmsCampaignReconciler $reconciler): int
|
|
{
|
|
$processed = 0;
|
|
SmsCampaign::query()
|
|
->where('provider', 'ovh')
|
|
->where(function (Builder $query): void {
|
|
$query->where('status', 'uncertain')
|
|
->orWhere(fn (Builder $query): Builder => $query->where('status', 'sending')->where('updated_at', '<', now()->subMinutes(10)));
|
|
})
|
|
->orderBy('updated_at')
|
|
->limit(max(1, (int) $this->option('limit')))
|
|
->get()
|
|
->each(function (SmsCampaign $campaign) use ($reconciler, &$processed): void {
|
|
if ($campaign->status === 'sending') {
|
|
$campaign->update([
|
|
'status' => 'uncertain',
|
|
'error_message' => 'Envoi interrompu avant confirmation. Verification OVH necessaire ; ne pas renvoyer cette campagne.',
|
|
]);
|
|
$campaign->deliveries()->where('status', 'queued')->update(['status' => 'uncertain']);
|
|
}
|
|
$reconciler->reconcile($campaign);
|
|
$processed++;
|
|
});
|
|
|
|
$this->line($processed.' campagne(s) verifiee(s), sans nouvel envoi.');
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
}
|