notifier/internal/app/app.go

67 lines
1.5 KiB
Go
Raw Normal View History

2024-03-31 18:23:50 +00:00
package app
2024-03-31 20:04:15 +00:00
import (
"context"
"go.uber.org/zap"
"mailnotifier/internal/clients"
"mailnotifier/internal/initialize"
2024-04-02 14:46:05 +00:00
"mailnotifier/internal/models"
2024-03-31 20:04:15 +00:00
"mailnotifier/internal/repository"
"mailnotifier/internal/workers"
)
func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) error {
2024-04-02 14:46:05 +00:00
welcomeChan := make(chan models.Message, 50)
2024-03-31 20:04:15 +00:00
mdb, err := initialize.MongoInit(ctx, config)
if err != nil {
logger.Error("Failed to initialize MongoDB", zap.Error(err))
return err
}
kafka, err := initialize.KafkaConsumerInit(ctx, config)
2024-04-02 14:46:05 +00:00
repo := repository.NewRepository(mdb.Collection("notify"), welcomeChan)
2024-03-31 20:04:15 +00:00
mailClient := clients.NewMailClient(clients.Deps{
SmtpHost: config.SmtpHost,
SmtpApiUrl: config.SmtpApiUrl,
SmtpPort: config.SmtpPort,
SmtpSender: config.SmtpSender,
Username: config.SmtpUsername,
Password: config.SmtpPassword,
ApiKey: config.SmtpApiKey,
Logger: logger,
})
consumer := workers.NewConsumerWC(workers.ConsumerDeps{
Repo: repo,
KafkaClient: kafka,
Logger: logger,
2024-03-31 20:04:15 +00:00
})
notifyer := workers.NewNotifyer(workers.NotifyerDeps{
Repo: repo,
MailClient: mailClient,
Logger: logger,
2024-03-31 20:04:15 +00:00
})
2024-04-02 14:46:05 +00:00
welcomer := workers.NewWelcomer(workers.WelcomerDeps{
Repo: repo,
MailClient: mailClient,
Logger: logger,
WelcomeChan: welcomeChan,
})
2024-03-31 20:04:15 +00:00
go consumer.Start(ctx)
2024-04-02 14:46:05 +00:00
go welcomer.Start(ctx)
2024-03-31 20:04:15 +00:00
go notifyer.Start(ctx)
//todo gracefull showtdown wc
<-ctx.Done()
return nil
}