79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
![]() |
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)
|
||
|
}
|