chore: build
ci-api / test (push) Failing after 14m25s
ci-web / test (push) Failing after 8m17s

This commit is contained in:
Xor290
2026-09-20 16:14:29 +02:00
parent 76b1412968
commit 9e11f01c2c
15 changed files with 65 additions and 359 deletions
+8 -13
View File
@@ -1,11 +1,11 @@
// Package projects : cycle de vie des projets vitrine déployés pour un client
// sur abonnement de 1 à 12 mois (un projet = un namespace isolé).
//
// Contrairement aux démos (TTL fixe de 30 jours, détruites à l'échéance), un
// projet payé est suspendu à l'échéance puis supprimé seulement après un
// délai de grâce : un renouvellement en retard ne détruit pas les données du
// client. Le paiement est hors périmètre : l'admin Omnex saisit la durée
// souscrite au déploiement puis à chaque renouvellement.
// Contrairement aux démos (TTL fixe de 30 jours), la durée d'un projet payé est
// choisie au déploiement puis prolongée à chaque renouvellement ; à l'échéance
// il est supprimé, sans délai de grâce. Le paiement est hors périmètre :
// l'admin Omnex saisit la durée souscrite au déploiement puis à chaque
// renouvellement.
package projects
import "time"
@@ -26,16 +26,15 @@ const (
StatusPending Status = "pending" // créé, pas encore pris par le worker
StatusProvisioning Status = "provisioning" // déploiement en cours
StatusReady Status = "ready" // en ligne
StatusSuspended Status = "suspended" // abonnement échu : arrêté, données conservées jusqu'à DeleteAt
StatusDeleting Status = "deleting" // suppression en cours
StatusDeleted Status = "deleted" // supprimé
StatusFailed Status = "failed" // échec du déploiement
)
// Extendable : un abonnement peut être prolongé (et un projet suspendu relancé).
// Extendable : un abonnement peut être prolongé.
func (s Status) Extendable() bool {
switch s {
case StatusProvisioning, StatusReady, StatusSuspended:
case StatusProvisioning, StatusReady:
return true
}
return false
@@ -58,12 +57,8 @@ type Project struct {
MonthsPurchased int `json:"months_purchased"`
CreatedAt time.Time `json:"created_at"`
// ExpiresAt : fin de l'abonnement (le projet est alors suspendu).
// ExpiresAt : fin de l'abonnement (le projet est alors supprimé).
ExpiresAt time.Time `json:"expires_at"`
// DeleteAt : suppression définitive si l'abonnement n'est pas renouvelé
// (ExpiresAt + délai de grâce).
DeleteAt time.Time `json:"delete_at"`
SuspendedAt *time.Time `json:"suspended_at,omitempty"`
}
func (Project) TableName() string { return "projects" }