feat(backend): add organization slugs

This commit is contained in:
2026-01-01 23:21:35 +00:00
parent 3953fa8232
commit ebcdcf2cea
4 changed files with 124 additions and 2 deletions

View File

@@ -0,0 +1,34 @@
package organization
import (
"errors"
"regexp"
"strings"
)
const (
slugMinLength = 1
slugMaxLength = 63
)
var (
slugPattern = regexp.MustCompile(`^[a-z0-9]+(?:-[a-z0-9]+)*$`)
reservedSlug = "my"
)
var ErrInvalidSlug = errors.New("invalid organization slug")
// NormalizeSlug lowercases and validates an organization slug.
func NormalizeSlug(input string) (string, error) {
slug := strings.ToLower(strings.TrimSpace(input))
if len(slug) < slugMinLength || len(slug) > slugMaxLength {
return "", ErrInvalidSlug
}
if slug == reservedSlug {
return "", ErrInvalidSlug
}
if !slugPattern.MatchString(slug) {
return "", ErrInvalidSlug
}
return slug, nil
}