diff --git a/notification/service.go b/notification/service.go new file mode 100644 index 0000000..cc413ec --- /dev/null +++ b/notification/service.go @@ -0,0 +1,4 @@ +package notification + +type NotificationService interface { +} diff --git a/notification/service_telegram.go b/notification/service_telegram.go new file mode 100644 index 0000000..3be3379 --- /dev/null +++ b/notification/service_telegram.go @@ -0,0 +1,18 @@ +package notification + +import ( + "git.ctrlz.es/mgdelacroix/birthdaybot/model" + "github.com/charmbracelet/log" +) + +type TelegramNotificationService struct { + logger *log.Logger + config *model.TelegramNotificationsConfig +} + +func NewTelegramNotificationService(logger *log.Logger, config *model.TelegramNotificationsConfig) *TelegramNotificationService { + return &TelegramNotificationService{ + logger: logger, + config: config, + } +} diff --git a/server/server.go b/server/server.go index 7d26a37..174c479 100644 --- a/server/server.go +++ b/server/server.go @@ -1,25 +1,45 @@ package server import ( + "errors" "fmt" "os" "git.ctrlz.es/mgdelacroix/birthdaybot/model" + "git.ctrlz.es/mgdelacroix/birthdaybot/notification" "git.ctrlz.es/mgdelacroix/birthdaybot/parser" "github.com/charmbracelet/log" ) +var ErrNoNotificationServices = errors.New("there are no notification services configured") + type Server struct { - Logger *log.Logger - config *model.Config - workers []*Worker - birthdays []*model.Birthday + Logger *log.Logger + config *model.Config + workers []*Worker + birthdays []*model.Birthday + notificationServices []notification.NotificationService +} + +func createNotificationServices(logger *log.Logger, config *model.Config) ([]notification.NotificationService, error) { + notificationServices := []notification.NotificationService{} + + if config.TelegramNotifications != nil { + telegramNotificationService := notification.NewTelegramNotificationService(logger, config.TelegramNotifications) + notificationServices = append(notificationServices, telegramNotificationService) + } + + if len(notificationServices) == 0 { + return nil, ErrNoNotificationServices + } + + return notificationServices, nil } func New(config *model.Config) (*Server, error) { logger := log.New(os.Stderr) - logger.Info("Parsing CSV file", "birthdayFile", config.BirthdayFile) + logger.Debug("parsing CSV file", "birthdayFile", config.BirthdayFile) birthdays, err := parser.ParseCSV(config.BirthdayFile) if err != nil { @@ -27,13 +47,22 @@ func New(config *model.Config) (*Server, error) { return nil, fmt.Errorf("cannot parse CSV file %s: %w", config.BirthdayFile, err) } + logger.Debug("creating notification services from config") + + notificationServices, err := createNotificationServices(logger, config) + if err != nil { + logger.Error("error creating notification services", "error", err) + return nil, err + } + logger.Info("creating server") server := &Server{ - Logger: logger, - config: config, - birthdays: birthdays, - workers: []*Worker{NewWorker(logger)}, + Logger: logger, + config: config, + birthdays: birthdays, + workers: []*Worker{NewWorker(logger)}, + notificationServices: notificationServices, } return server, nil