2023-06-12 14:19:10 +00:00
|
|
|
package app
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2024-12-09 13:54:52 +00:00
|
|
|
"fmt"
|
2024-11-21 07:29:18 +00:00
|
|
|
mongo "gitea.pena/PenaSide/common/mongo"
|
2024-11-29 07:19:26 +00:00
|
|
|
"gitea.pena/PenaSide/customer/pkg/customer_clients"
|
|
|
|
"gitea.pena/PenaSide/trashlog/app"
|
|
|
|
"gitea.pena/PenaSide/trashlog/wrappers/zaptrashlog"
|
2024-11-21 07:29:18 +00:00
|
|
|
"gitea.pena/PenaSide/verification/internal/client"
|
|
|
|
"gitea.pena/PenaSide/verification/internal/config"
|
|
|
|
"gitea.pena/PenaSide/verification/internal/initialize"
|
|
|
|
"gitea.pena/PenaSide/verification/internal/models"
|
|
|
|
"gitea.pena/PenaSide/verification/internal/server"
|
2024-11-29 07:19:26 +00:00
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
|
|
|
"github.com/minio/minio-go/v7"
|
|
|
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
2024-12-10 18:47:19 +00:00
|
|
|
"gitea.pena/PenaSide/hlog"
|
2024-11-29 07:19:26 +00:00
|
|
|
"go.uber.org/zap"
|
|
|
|
"go.uber.org/zap/zapcore"
|
2024-02-11 13:03:28 +00:00
|
|
|
"time"
|
2024-12-29 22:46:06 +00:00
|
|
|
"os"
|
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)
|
|
|
|
}
|
|
|
|
|
2024-12-29 22:46:06 +00:00
|
|
|
logger.Info("RUN", zap.Any("ENV", cfg), zap.String("JWT_SECRET", os.Getenv("JWT_SECRET")))
|
2023-06-12 14:19:10 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
2024-12-09 12:18:56 +00:00
|
|
|
loggerHlog := hlog.New(loggerForHlog).Module(config.ModuleLogger)
|
2024-05-27 11:53:34 +00:00
|
|
|
loggerHlog.With(models.AllFields{})
|
|
|
|
loggerHlog.Emit(app.InfoSvcStarted{})
|
|
|
|
|
2024-02-11 13:03:28 +00:00
|
|
|
mongoDB, err := mongo.Connect(ctx, &mongo.ConnectDeps{
|
2024-12-09 13:54:52 +00:00
|
|
|
Configuration: &cfg.ExternalCfg.Database,
|
2024-11-29 07:19:26 +00:00
|
|
|
Timeout: 5 * time.Second,
|
2024-02-11 13:03:28 +00:00
|
|
|
})
|
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{
|
2024-12-09 12:18:56 +00:00
|
|
|
Creds: credentials.NewStaticV4(cfg.S3AccessKey, cfg.S3SecretKey, ""),
|
2023-07-03 16:55:26 +00:00
|
|
|
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))
|
|
|
|
}
|
|
|
|
|
2024-12-09 13:54:52 +00:00
|
|
|
_, err = tgBot.Send(tgbotapi.NewMessage(cfg.TelegramChannelID, fmt.Sprintf("PING MSG from %s", config.ModuleLogger)))
|
|
|
|
if err != nil {
|
|
|
|
logger.Fatal("Send TG ping", zap.Error(err))
|
|
|
|
}
|
|
|
|
|
2024-02-11 18:22:37 +00:00
|
|
|
telegram := client.NewTelegram(client.Deps{
|
|
|
|
Logger: logger,
|
|
|
|
Bot: tgBot,
|
|
|
|
ChatID: cfg.TelegramChannelID,
|
2024-12-09 12:18:56 +00:00
|
|
|
StagingURL: cfg.VerificationMicroserviceURL,
|
2024-02-11 18:22:37 +00:00
|
|
|
})
|
2024-05-26 13:50:52 +00:00
|
|
|
cons := initialize.NewControllers(reps, telegram, customer_clients.NewCustomersClient(customer_clients.CustomersClientDeps{
|
|
|
|
Logger: logger,
|
2024-12-09 12:18:56 +00:00
|
|
|
CustomerServiceHost: cfg.CustomerMicroserviceRPCURL,
|
2024-05-26 13:50:52 +00:00
|
|
|
}))
|
2023-06-12 14:19:10 +00:00
|
|
|
|
2024-05-29 08:28:25 +00:00
|
|
|
userSrv := server.NewHTTP(server.ServerConfig{
|
2024-05-26 15:32:07 +00:00
|
|
|
Logger: logger,
|
2024-05-29 08:28:25 +00:00
|
|
|
Controllers: []server.Controller{cons.VerificationUser},
|
2024-05-27 11:53:34 +00:00
|
|
|
HLogger: loggerHlog,
|
2024-05-26 15:32:07 +00:00
|
|
|
})
|
2023-06-12 14:19:10 +00:00
|
|
|
|
2024-05-29 08:28:25 +00:00
|
|
|
adminSrv := server.NewHTTP(server.ServerConfig{
|
|
|
|
Logger: logger,
|
|
|
|
Controllers: []server.Controller{cons.VerificationAdmin},
|
|
|
|
HLogger: loggerHlog,
|
|
|
|
})
|
|
|
|
|
|
|
|
go func() {
|
2024-12-09 12:18:56 +00:00
|
|
|
if err := userSrv.Start(cfg.ClientHttpURL); err != nil {
|
2024-05-29 08:28:25 +00:00
|
|
|
logger.Fatal("Server startup error", zap.Error(err))
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2023-06-12 14:19:10 +00:00
|
|
|
go func() {
|
2024-12-09 12:18:56 +00:00
|
|
|
if err := adminSrv.Start(cfg.AdminHttpURL); err != nil {
|
2024-05-26 15:32:07 +00:00
|
|
|
logger.Fatal("Server startup error", zap.Error(err))
|
2023-06-12 14:19:10 +00:00
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2024-05-29 08:28:25 +00:00
|
|
|
gracefulShutdown(ctx, logger, []*server.Server{userSrv, adminSrv}, mongoDB)
|
2023-06-12 14:19:10 +00:00
|
|
|
}
|