package service import ( "context" "fmt" "gitea.dwysokinski.me/Kichiyaki/notificationarr/internal/domain" ) type Radarr struct { publisher Publisher } func NewRadarr(publisher Publisher) *Radarr { return &Radarr{ publisher: publisher, } } func (s *Radarr) Process(ctx context.Context, payload domain.RadarrWebhookPayload) error { title, err := s.buildTitle(payload.EventType, payload.Movie) if err != nil { return fmt.Errorf("buildTitle: %w", err) } msg, err := s.buildMessage(payload.EventType, payload.Movie) 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 *Radarr) buildTitle(evType domain.RadarrEventType, _ domain.RadarrMovie) (string, error) { switch evType { case domain.RadarrEventTypeDownload, domain.RadarrEventTypeTest: return "New movie available (Radarr)", nil default: return "", domain.ErrUnsupportedRadarrEventType } } func (s *Radarr) buildMessage(evType domain.RadarrEventType, movie domain.RadarrMovie) (string, error) { switch evType { case domain.RadarrEventTypeDownload, domain.RadarrEventTypeTest: return movie.Title, nil default: return "", domain.ErrUnsupportedRadarrEventType } }