package channels import ( "context" "gitea.perlbach24.de/scripte/nexarch/internal/notify" ) // InAppSender implementiert notify.Sender fuer den In-App-Kanal // (Akzeptanzkriterium 2). Nutzt eine Vorlage, falls payload["template_key"] // gesetzt ist, sonst direkt payload["title"]/["body"]. type InAppSender struct { store *InAppStore templates *TemplateStore } func NewInAppSender(store *InAppStore, templates *TemplateStore) *InAppSender { return &InAppSender{store: store, templates: templates} } func (s *InAppSender) Send(ctx context.Context, n notify.Notification) error { tenantSlug, _ := n.Payload["tenant_slug"].(string) var title, body string if templateKey, ok := n.Payload["template_key"].(string); ok && templateKey != "" { tmpl, err := s.templates.Resolve(ctx, tenantSlug, templateKey) if err != nil { return err } title, body, err = Render(tmpl, n.Payload) if err != nil { return err } } else { title, _ = n.Payload["title"].(string) body, _ = n.Payload["body"].(string) } _, err := s.store.Create(ctx, tenantSlug, n.Recipient, title, body) return err }