30 lines
730 B
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)
|
|
}
|