package service import ( "context" "fmt" "gitea.dwysokinski.me/Kichiyaki/notificationarr/internal/domain" ) type Sonarr struct { publisher Publisher } func NewSonaar(publisher Publisher) *Sonarr { return &Sonarr{ publisher: publisher, } } func (s *Sonarr) Process(ctx context.Context, payload domain.SonarrWebhookPayload) error { for _, ep := range payload.Episodes { title, err := s.buildTitle(payload.EventType, payload.Series, ep) if err != nil { return fmt.Errorf("buildTitle: %w", err) } msg, err := s.buildMessage(payload.EventType, payload.Series, ep) if err != nil { return fmt.Errorf("buildMessage: %w", err) } if err := s.publisher.Publish(ctx, title, msg); err != nil { return fmt.Errorf("Publisher.Publish: %w", err) } } return nil } func (s *Sonarr) buildTitle(evType domain.SonarrEventType, series domain.SonarrSeries, _ domain.SonarrEpisode) (string, error) { switch evType { case domain.SonarrEventTypeDownload, domain.SonarrEventTypeTest: return series.Title + " - New episode (Sonarr)", nil default: return "", domain.ErrUnsupportedSonarrEventType } } func (s *Sonarr) buildMessage(evType domain.SonarrEventType, _ domain.SonarrSeries, ep domain.SonarrEpisode) (string, error) { switch evType { case domain.SonarrEventTypeDownload, domain.SonarrEventTypeTest: return fmt.Sprintf("S%d.E%d %s", ep.SeasonNumber, ep.EpisodeNumber, ep.Title), nil default: return "", domain.ErrUnsupportedSonarrEventType } }