chore: add crypto payment
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package workers
|
||||
|
||||
import (
|
||||
"gestion/db"
|
||||
"gestion/services"
|
||||
"log"
|
||||
"time"
|
||||
)
|
||||
|
||||
func StartPaymentChecker(database *db.Database, np *services.NowPaymentsClient, interval time.Duration) {
|
||||
go func() {
|
||||
for {
|
||||
time.Sleep(interval)
|
||||
checkPendingCryptoPayments(database, np)
|
||||
}
|
||||
}()
|
||||
log.Printf("[CRON] payment checker démarré (toutes les %s)", interval)
|
||||
}
|
||||
|
||||
func checkPendingCryptoPayments(database *db.Database, np *services.NowPaymentsClient) {
|
||||
payments, err := database.GetPendingCryptoPayments()
|
||||
if err != nil {
|
||||
log.Printf("[CRON] erreur récupération paiements en attente: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, payment := range payments {
|
||||
status, err := np.GetPaymentStatus(payment.NowPaymentID)
|
||||
if err != nil {
|
||||
log.Printf("[CRON] erreur vérification paiement %d: %v", payment.ID, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if status.PaymentStatus == payment.Status {
|
||||
continue
|
||||
}
|
||||
|
||||
log.Printf("[CRON] paiement %d (cmd %d): %s → %s", payment.ID, payment.CommandID, payment.Status, status.PaymentStatus)
|
||||
|
||||
payAmount, _ := status.PayAmount.Float64()
|
||||
if err := database.UpdateCryptoPaymentStatus(payment.ID, status.PaymentStatus, payAmount); err != nil {
|
||||
log.Printf("[CRON] erreur mise à jour paiement %d: %v", payment.ID, err)
|
||||
continue
|
||||
}
|
||||
|
||||
switch status.PaymentStatus {
|
||||
case "finished", "confirmed":
|
||||
if err := database.ActivateCryptoCommand(payment.CommandID); err != nil {
|
||||
log.Printf("[CRON] erreur activation commande %d: %v", payment.CommandID, err)
|
||||
} else {
|
||||
log.Printf("[CRON] commande %d activée après paiement crypto", payment.CommandID)
|
||||
}
|
||||
case "failed", "expired":
|
||||
if err := database.CancelCryptoCommand(payment.CommandID); err != nil {
|
||||
log.Printf("[CRON] erreur annulation commande %d: %v", payment.CommandID, err)
|
||||
} else {
|
||||
log.Printf("[CRON] commande %d annulée (paiement %s)", payment.CommandID, status.PaymentStatus)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user