57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
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
|
|
}
|
|
}
|