Publication initiale de RelaisSMS : documentation et sources nettoyees

This commit is contained in:
2026-10-21 09:29:39 +02:00
commit ac186b03b1
158 changed files with 24818 additions and 0 deletions
@@ -0,0 +1,44 @@
<?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;
}
}