# 📋 Tâches Cron (Scheduled Tasks) — Fluxio

## Configuration requise

**Une seule entrée cron** est nécessaire pour activer toutes les tâches ci-dessous.

### Via `crontab -e` (SSH)

```bash
* * * * * cd /home/u561866931/domains/mayimavastore.com/public_html/api && php artisan schedule:run >> /dev/null 2>&1
```

### Via cPanel / Panel d'hébergement

- **Tâches Cron → Ajouter une nouvelle tâche**
- Fréquence : `* * * * *` (chaque minute)
- Commande : `/usr/local/bin/php /home/u561866931/domains/mayimavastore.com/public_html/api/artisan schedule:run >> /dev/null 2>&1`

> ⚠️ Le chemin absolu détecté sur votre serveur est : `/home/u561866931/domains/mayimavastore.com/public_html/api`

---

## Fonctionnement

Laravel exécute `schedule:run` chaque minute. À chaque exécution, il vérifie dans `app/Console/Kernel.php` quelles commandes doivent être lancées à cet instant. Vous n'avez **jamais besoin** d'ajouter une entrée cron par tâche.

---

## Liste des tâches planifiées

### Tâches à haute fréquence

| Commande | Fréquence | Description | Fichier source |
|----------|-----------|-------------|----------------|
| `orders:release-escrows` | Toutes les **5 min** | Libère les paiements en escrow des commandes éligibles | `app/Console/Commands/ReleaseEscrows.php` |
| `pi:fetch-exchange-rate` | Toutes les **15 min** | Récupère le taux de change PI ↔ XOF depuis CoinGecko, stocke en base (max 200 enregistrements) | `app/Console/Commands/FetchPiExchangeRate.php` |
| `stock:release-expired` | Toutes les **heures** | Libère le stock réservé pour les commandes non payées depuis 24h | `app/Console/Commands/ReleaseExpiredStock.php` |

### Tâches quotidiennes (la nuit)

| Commande | Heure | Description | Fichier source |
|----------|-------|-------------|----------------|
| `CleanupExpiredFingerprints` (Job) | 00h00 | Supprime les empreintes digitales expirées (conformité RGPD) | `app/Jobs/CleanupExpiredFingerprints.php` |
| `sponsoring:check-expiration` | 01h00 | Vérifie et désactive les sponsorings de produits expirés | `app/Console/Commands/CheckSponsoringExpiration.php` |
| `subscriptions:check-expired` | 02h00 | Vérifie et désactive les abonnements vendeurs expirés | `app/Console/Commands/CheckExpiredSubscriptions.php` |
| `sponsoring:update-priority-scores` | 02h30 | Recalcule les scores de priorité des produits sponsorisés | `app/Console/Commands/UpdatePriorityScores.php` |
| `sellers:reset-usage` | 03h00 | Reset les compteurs d'utilisation des vendeurs pour les nouvelles périodes | `app/Console/Commands/ResetSellerUsage.php` |
| Nettoyage tokens | 04h00 | Supprime les tokens de vérification expirés et les tokens utilisés depuis +7 jours | Closure dans `Kernel.php` |
| `UpdateUserTrustLevels` (Job) | 04h30 | Met à jour les niveaux de confiance des utilisateurs (système de parrainage) | `app/Jobs/UpdateUserTrustLevels.php` |
| `pi-network:send-reminders` | 05h00 | Envoie les rappels automatiques pour les invitations PI Network en attente | `app/Console/Commands/SendPiNetworkReminders.php` |
| `sponsoring:send-renewal-reminders` | 06h00 | Envoie les notifications de renouvellement de sponsoring aux vendeurs | `app/Console/Commands/SendRenewalReminders.php` |
| `sponsoring:cleanup-pending` | 07h00 | Nettoie les sponsorings en attente depuis plus de 24h | `app/Console/Commands/CleanupPendingSponsorings.php` |

---

## Commandes utiles

```bash
# Vérifier que le scheduler est bien configuré
php artisan schedule:list

# Exécuter le scheduler manuellement (une seule fois)
php artisan schedule:run

# Tester une commande individuellement
php artisan pi:fetch-exchange-rate
php artisan subscriptions:check-expired
php artisan orders:release-escrows
php artisan sponsoring:check-expiration

# Voir les logs du scheduler
tail -f storage/logs/laravel.log
```

---

## Référence

Fichier de configuration : [`app/Console/Kernel.php`](app/Console/Kernel.php)
