template-monorepo/internal/model/notification/domain/template/registry.go

30 lines
730 B
Go

package template
import (
"fmt"
"gateway/internal/model/notification/domain/enum"
)
// Registry maps NotifyKind and locale to template specs.
type Registry map[enum.NotifyKind]map[string]Spec
// Lookup returns the spec for kind and locale, with locale fallback.
func (r Registry) Lookup(kind enum.NotifyKind, locale string, fallbacks ...string) (Spec, error) {
byLocale, ok := r[kind]
if !ok {
return Spec{}, fmt.Errorf("template: unknown kind %q", kind)
}
try := append([]string{locale}, fallbacks...)
for _, loc := range try {
if loc == "" {
continue
}
if spec, ok := byLocale[loc]; ok {
return spec, nil
}
}
return Spec{}, fmt.Errorf("template: no locale for kind %q (locale=%q)", kind, locale)
}