package channels import ( "context" "fmt" "gitea.perlbach24.de/scripte/nexarch/internal/notify" ) // Router waehlt anhand von Notification.Channel den zustaendigen Kanal aus // — ein neuer Kanal wird per Register() ergaenzt, ohne den Dispatcher // (CFG-02) oder Router selbst umzubauen (Unleash-artiger Strategie-Gedanke, // siehe Ticket-DNA). type Router struct { channels map[string]notify.Sender } func NewRouter() *Router { return &Router{channels: make(map[string]notify.Sender)} } func (r *Router) Register(channel string, sender notify.Sender) { r.channels[channel] = sender } func (r *Router) Send(ctx context.Context, n notify.Notification) error { sender, ok := r.channels[n.Channel] if !ok { return fmt.Errorf("channels: unbekannter kanal %q", n.Channel) } return sender.Send(ctx, n) }