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)
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) {
return movie.Title, nil