feedback/internal/app/app_feedback.go

79 lines
2.0 KiB
Go
Raw Normal View History

2023-04-20 02:03:21 +00:00
package app
import (
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"go.etcd.io/bbolt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"log"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/config"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/initialize"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/server"
)
func Run(cfg *config.Config) {
cfgLogger := zap.NewDevelopmentConfig()
cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
cfgLogger.EncoderConfig.ConsoleSeparator = " "
logger, err := cfgLogger.Build()
if err != nil {
panic(err)
}
logger.Info("RUN", zap.Any("ENV", cfg))
db, err := bbolt.Open("bolt.db", 0666, nil)
if err != nil {
logger.Fatal("BoltDB", zap.Error(err))
}
bot, err := tgbotapi.NewBotAPI(cfg.TelegramToken)
if err != nil {
logger.Fatal("TelegramBotApi", zap.Error(err))
}
repositories, err := initialize.NewRepositories(logger, db)
if err != nil {
logger.Fatal("BoltDB", zap.Error(err))
}
clients := initialize.NewClients(logger, bot, cfg.TelegramChannelID, cfg.TemplatePath)
bot.GetUpdatesChan(tgbotapi.UpdateConfig{
Offset: 0,
Limit: 0,
Timeout: 0,
AllowedUpdates: nil,
})
//err = clients.Telegram.SendMessage("Bot started")
if err != nil {
logger.Fatal("TelegramBot", zap.Error(err))
}
controllers := initialize.NewControllers(logger, repositories.Feedback, clients.Telegram)
if err = controllers.Feedback.WarmUpService(); err != nil {
log.Fatal("Controllers.Feedback", zap.Error(err))
}
logger.Info("Feedback service", zap.String("status", "warmed up"))
go controllers.Feedback.RunService()
logger.Info("Feedback service", zap.String("status", "started"))
httpSrv := server.NewHTTP(cfg, logger).Register(controllers.List()...)
go func() {
err := httpSrv.Start()
if err != nil {
logger.Fatal("CanNotServe", zap.Error(err))
}
}()
gracefulShutdown(logger, httpSrv, db, controllers)
}