// Package user implementiert Core IAM-01: das Benutzer-Datenmodell und die // CRUD-Operationen. Tenant-Zugehoerigkeit ist ueber die Zieldatenbank // gegeben (Modell C, siehe internal/tenant) — Superadmin-Konten leben // dagegen mandantenuebergreifend in der Registry und sind ueber // SuperadminStore als eigener, First-Class-Typ modelliert, nicht als // tenant_id-NULL-Sonderfall in User. package user import ( "errors" "regexp" "time" ) type Status string const ( StatusActive Status = "active" StatusInactive Status = "inactive" ) type User struct { ID string Email string Name string Status Status CreatedAt time.Time UpdatedAt time.Time } var emailPattern = regexp.MustCompile(`^[^\s@]+@[^\s@]+\.[^\s@]+$`) var ErrInvalidEmail = errors.New("user: ungueltige E-Mail-Adresse") var ErrEmailTaken = errors.New("user: E-Mail-Adresse bereits vergeben") var ErrNotFound = errors.New("user: nicht gefunden") func ValidateEmail(email string) error { if !emailPattern.MatchString(email) { return ErrInvalidEmail } return nil }