verification/internal/app/app_verification.go

127 lines
3.7 KiB
Go
Raw Normal View History

2023-06-12 14:19:10 +00:00
package app
import (
"context"
2024-02-11 18:22:37 +00:00
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
2023-06-12 14:19:10 +00:00
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
2024-05-27 11:53:34 +00:00
"github.com/themakers/hlog"
2023-06-12 14:19:10 +00:00
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
2024-02-11 13:03:28 +00:00
mongo "penahub.gitlab.yandexcloud.net/backend/penahub_common/mongo"
"penahub.gitlab.yandexcloud.net/backend/verification/internal/client"
"penahub.gitlab.yandexcloud.net/backend/verification/internal/config"
"penahub.gitlab.yandexcloud.net/backend/verification/internal/initialize"
2024-05-27 11:53:34 +00:00
"penahub.gitlab.yandexcloud.net/backend/verification/internal/models"
"penahub.gitlab.yandexcloud.net/backend/verification/internal/server"
2024-05-27 11:53:34 +00:00
"penahub.gitlab.yandexcloud.net/external/trashlog.git/app"
"penahub.gitlab.yandexcloud.net/external/trashlog.git/wrappers/zaptrashlog"
"penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/customer_clients"
2024-02-11 13:03:28 +00:00
"time"
2023-06-12 14:19:10 +00:00
)
2024-05-27 11:53:34 +00:00
type Build struct {
Commit string
Version string
BuildTime int64
}
func Run(cfg *config.Config, build Build) {
2023-06-12 14:19:10 +00:00
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))
ctx := context.Background()
2024-05-27 11:53:34 +00:00
clickHouseLogger, err := zaptrashlog.NewCore(ctx, zap.InfoLevel, cfg.TrashLogHost, build.Version, build.Commit, build.BuildTime)
if err != nil {
panic(err)
}
loggerForHlog := logger.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return zapcore.NewTee(core, clickHouseLogger)
2024-06-08 17:58:09 +00:00
}), zap.AddCallerSkip(2))
2024-05-27 11:53:34 +00:00
loggerHlog := hlog.New(loggerForHlog).Module(cfg.ModuleLogger)
loggerHlog.With(models.AllFields{})
loggerHlog.Emit(app.InfoSvcStarted{})
2024-02-11 13:03:28 +00:00
mongoDB, err := mongo.Connect(ctx, &mongo.ConnectDeps{
Configuration: &mongo.Configuration{
Host: cfg.MongoHost,
Port: cfg.MongoPort,
User: cfg.MongoUser,
Password: cfg.MongoPassword,
Auth: cfg.MongoAuth,
DatabaseName: cfg.DatabaseName,
},
Timeout: 5 * time.Second,
})
2024-02-09 16:38:56 +00:00
2023-06-12 14:19:10 +00:00
if err != nil {
logger.Fatal("MongoClient", zap.Error(err))
}
2024-02-15 21:52:26 +00:00
minioClient, err := minio.New(cfg.S3Endpoint, &minio.Options{
2023-06-12 14:19:10 +00:00
Creds: credentials.NewStaticV4(cfg.S3AccessKeyID, cfg.S3SecretKey, ""),
Secure: true,
2023-06-12 14:19:10 +00:00
})
if err != nil {
logger.Fatal("MinioClient", zap.Error(err))
}
2024-05-17 22:44:33 +00:00
reps, err := initialize.NewRepositories(ctx, logger, mongoDB, minioClient, cfg.S3Folder, cfg.S3FileUrl)
2023-06-12 14:19:10 +00:00
if err != nil {
logger.Fatal("Repositories", zap.Error(err))
}
2024-02-11 18:22:37 +00:00
tgBot, err := tgbotapi.NewBotAPI(cfg.TelegramToken)
if err != nil {
logger.Fatal("TelegramBotApi", zap.Error(err))
}
telegram := client.NewTelegram(client.Deps{
Logger: logger,
Bot: tgBot,
ChatID: cfg.TelegramChannelID,
StagingURL: cfg.StagingURL,
})
cons := initialize.NewControllers(reps, telegram, customer_clients.NewCustomersClient(customer_clients.CustomersClientDeps{
Logger: logger,
CustomerServiceHost: cfg.CustomerRPCHost,
}))
2023-06-12 14:19:10 +00:00
userSrv := server.NewHTTP(server.ServerConfig{
Logger: logger,
Controllers: []server.Controller{cons.VerificationUser},
2024-05-27 11:53:34 +00:00
HLogger: loggerHlog,
})
2023-06-12 14:19:10 +00:00
adminSrv := server.NewHTTP(server.ServerConfig{
Logger: logger,
Controllers: []server.Controller{cons.VerificationAdmin},
HLogger: loggerHlog,
})
go func() {
if err := userSrv.Start(cfg.HttpAddressUser); err != nil {
logger.Fatal("Server startup error", zap.Error(err))
}
}()
2023-06-12 14:19:10 +00:00
go func() {
if err := adminSrv.Start(cfg.HttpAddressAdmin); err != nil {
logger.Fatal("Server startup error", zap.Error(err))
2023-06-12 14:19:10 +00:00
}
}()
gracefulShutdown(ctx, logger, []*server.Server{userSrv, adminSrv}, mongoDB)
2023-06-12 14:19:10 +00:00
}