notifier/internal/app/app.go

78 lines
2.0 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"
2024-11-25 08:14:01 +00:00
"gitea.pena/PenaSide/notifier/internal/clients"
"gitea.pena/PenaSide/notifier/internal/initialize"
"gitea.pena/PenaSide/notifier/internal/repository"
"gitea.pena/PenaSide/notifier/internal/workers"
2024-11-29 07:38:24 +00:00
"go.uber.org/zap"
2024-03-31 20:04:15 +00:00
)
func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) error {
2024-04-02 16:16:32 +00:00
defer func() {
if r := recover(); r != nil {
logger.Error("Recovered from a panic", zap.Any("error", r))
}
}()
ctx, cancel := context.WithCancel(ctx)
defer cancel()
2024-04-02 15:11:02 +00:00
// todo обдумать буфер чтобы не было блокировок, хотя это не предугадать но оптимально подстроить можно
2024-04-07 17:54:54 +00:00
//welcomeChan := make(chan models.Message, 10)
2024-04-02 14:46:05 +00:00
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-04 07:10:09 +00:00
if err != nil {
logger.Error("Failed to initialize kafka", zap.Error(err))
return err
}
2024-03-31 20:04:15 +00:00
2024-04-07 17:54:54 +00:00
repo := repository.NewRepository(mdb.Collection("notify"))
2024-03-31 20:04:15 +00:00
2024-12-16 11:17:25 +00:00
mailClient := clients.NewMailClient(config.External.MailClientCfg)
2024-03-31 20:04:15 +00:00
2024-12-16 11:17:25 +00:00
quizClient := clients.NewQuizClient(config.QuizCoreMicroserviceGRPC, logger)
2024-04-04 07:10:09 +00:00
customerClient := clients.NewCustomerClient(clients.CustomerDeps{
2024-12-16 11:17:25 +00:00
Url: config.CustomerMicroserviceGRPC,
Logger: logger,
})
2024-03-31 20:04:15 +00:00
consumer := workers.NewConsumerWC(workers.ConsumerDeps{
Repo: repo,
KafkaClient: kafka,
2024-04-07 17:54:54 +00:00
MailClient: mailClient,
Logger: logger,
2024-03-31 20:04:15 +00:00
})
notifyer := workers.NewNotifyer(workers.NotifyerDeps{
Repo: repo,
MailClient: mailClient,
CustomerClient: customerClient,
2024-04-04 07:10:09 +00:00
QuizClient: quizClient,
Logger: logger,
2024-03-31 20:04:15 +00:00
})
2024-04-07 17:54:54 +00:00
//welcomer := workers.NewWelcomer(workers.WelcomerDeps{
// Repo: repo,
// MailClient: mailClient,
// Logger: logger,
// WelcomeChan: welcomeChan,
//})
2024-04-02 14:46:05 +00:00
2024-03-31 20:04:15 +00:00
go consumer.Start(ctx)
2024-04-07 17:54:54 +00:00
//go welcomer.Start(ctx)
2024-03-31 20:04:15 +00:00
go notifyer.Start(ctx)
<-ctx.Done()
return nil
}