// Package tenant implements Core TEN-01: die Control-Plane-Registry und die // Provisioning-Routine fuer physisch getrennte Mandanten-Datenbanken (Modell C). package tenant import ( "errors" "regexp" "time" ) type Status string const ( StatusActive Status = "active" ) type Tenant struct { ID string Slug string Name string DBName string DBDSN string Status Status CreatedAt time.Time } // slugPattern erzwingt sichere, als SQL-Identifier verwendbare Slugs, damit // der Datenbankname niemals aus unkontrolliertem Nutzereingabe-Text gebaut wird. var slugPattern = regexp.MustCompile(`^[a-z][a-z0-9_]{1,48}$`) var ErrInvalidSlug = errors.New("tenant: slug muss mit Kleinbuchstaben beginnen und darf nur [a-z0-9_] enthalten (2-49 Zeichen)") func ValidateSlug(slug string) error { if !slugPattern.MatchString(slug) { return ErrInvalidSlug } return nil } func dbNameForSlug(slug string) string { return "tenant_" + slug }