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,
|
|
|
|
})
|
|
|
|
|
2023-04-20 02:26:47 +00:00
|
|
|
err = clients.Telegram.SendMessage("Bot started")
|
2023-04-20 02:03:21 +00:00
|
|
|
|
|
|
|
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)
|
|
|
|
}
|