chore: update
ci-api / test (push) Successful in 22m30s
ci-web / test (push) Successful in 13m15s

This commit is contained in:
Nuxgrid
2026-08-01 23:33:11 +02:00
parent cb966fcaf0
commit fb10d25ee2
21 changed files with 612 additions and 81 deletions
+15 -2
View File
@@ -2,21 +2,24 @@ package sub
import (
"crypto/rand"
"log"
"net/http"
"strings"
"github.com/gin-gonic/gin"
"github.com/omnex/control-plane/api/internal/auth"
"github.com/omnex/control-plane/api/internal/demos"
)
// Handler gère les requêtes HTTP pour les codes de souscription.
type Handler struct {
store Store
demos *demos.Service // optionnel : nil => pas de transfert démo automatique
}
// NewHandler crée un nouveau Handler.
func NewHandler(store Store) *Handler {
return &Handler{store: store}
func NewHandler(store Store, demoSvc *demos.Service) *Handler {
return &Handler{store: store, demos: demoSvc}
}
// createCodeRequest représente la requête pour créer un code.
@@ -122,5 +125,15 @@ func (h *Handler) AddCode(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"error": "code invalide"})
return
}
// Transfert de la démo active (si elle existe) vers la version payante :
// n'expire plus + bascule stockage persistant en tâche de fond. Ne fait
// jamais échouer la validation du code — le client est déjà premium
// même si sa démo (optionnelle) pose problème.
if h.demos != nil {
if err := h.demos.TransferToPaid(p.Username); err != nil {
log.Printf("Transfert démo vers payant échoué pour %s: %v", p.Username, err)
}
}
c.JSON(http.StatusOK, gin.H{"success": "vous passez en abonnement premium"})
}