package demos import "context" // Provisioner : abstraction du worker qui déploie/détruit la stack dans le cluster. // L'implémentation réelle (Helm + client-go) sera branchée plus tard ; l'API se // contente d'enfiler les intentions. type Provisioner interface { // Provision demande le déploiement d'une démo (asynchrone). Provision(d Demo, resources []ExternalResource, cfg ProvisionConfig) error // Teardown demande la destruction d'une démo. Teardown(d Demo) error // MigrateToPremiumNamespace reconstruit la démo dans newNamespace // (Kubernetes ne permet pas de renommer un namespace) en préservant les // données postgres, puis supprime l'ancien namespace une fois le // nouveau opérationnel. No-op si d.Namespace == newNamespace. MigrateToPremiumNamespace(d Demo, newNamespace, newURL string) error GetResourceState(ctx context.Context, namespace string) (ResourceState, error) } // NoopProvisioner : implémentation neutre (aucun déploiement réel). // Sert au scaffolding et aux tests tant que le worker n'existe pas. type NoopProvisioner struct{} func (NoopProvisioner) Provision(Demo, []ExternalResource, ProvisionConfig) error { return nil } func (NoopProvisioner) Teardown(Demo) error { return nil } func (NoopProvisioner) MigrateToPremiumNamespace(Demo, string, string) error { return nil } func (NoopProvisioner) GetResourceState(ctx context.Context, namespace string) (ResourceState, error) { return ResourceState{}, nil }