blueprint/app/app.go
Danil Solovyov 5f715016f0 basic
2023-12-19 11:45:28 +05:00

76 lines
1.4 KiB
Go

package app
import (
"flag"
"fmt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"penahub.gitlab.yandexcloud.net/pena-services/bluepint/blueprint"
"penahub.gitlab.yandexcloud.net/pena-services/bluepint/creator"
)
type App struct {
Config *Config
logger *zap.Logger
}
type Config struct {
Version string
}
func NewApp(cfg *Config) *App {
cfgLogger := zap.NewDevelopmentConfig()
cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
cfgLogger.EncoderConfig.ConsoleSeparator = " "
logger, err := cfgLogger.Build()
if err != nil {
panic(err)
}
return &App{
Config: cfg,
logger: logger,
}
}
// Execute - Любой вызов приложения.
func (r *App) Execute() {
versionFlag := flag.Bool("v", false, "Show current version")
flag.Parse()
if *versionFlag {
if err := r.Version(); err != nil {
r.logger.Fatal("app.Version", zap.Error(err))
return
}
return
}
r.Run()
}
// Run - Запуск приложения.
func (r *App) Run() {
file, err := blueprint.FileToStruct("")
if err != nil {
r.logger.Fatal("blueprint.FileToStruct", zap.Error(err))
}
creator := creator.NewCreator(creator.Deps{Blueprint: file})
if err = creator.CreateApp(); err != nil {
r.logger.Fatal("creator.CreateApp", zap.Error(err))
}
}
// Version - Вывод версии приложения.
func (r *App) Version() error {
_, err := fmt.Println("Version: ", r.Config.Version)
return err
}