gis/internal/domain/category.go

31 lines
954 B
Go

package domain
import (
"regexp"
"time"
"github.com/google/uuid"
)
// Category is a hierarchical grouping for datasets. A category may have a parent
// category (nil for a root) and many child categories.
type Category struct {
ID uuid.UUID `json:"id"`
ParentID *uuid.UUID `json:"parent_id"`
Code string `json:"code"`
Name string `json:"name"`
Description string `json:"description"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// slugPattern matches a slug: lowercase latin letters and digits in
// dash-separated groups, e.g. "population", "land-use-2024".
var slugPattern = regexp.MustCompile(`^[a-z0-9]+(?:-[a-z0-9]+)*$`)
// ValidSlug reports whether s is a valid slug (lowercase latin letters, digits,
// and single dashes between groups; no leading, trailing, or repeated dashes).
func ValidSlug(s string) bool {
return slugPattern.MatchString(s)
}