package main import ( "context" "converter/internal/app" "converter/internal/config" "converter/internal/lib/logger/handlers/slogpretty" "fmt" "github.com/redis/go-redis/v9" "log/slog" "os" "os/signal" "syscall" ) const ( envlocal = "local" envdev = "dev" envprod = "prod" ) func main() { cfg := config.MustLoad() fmt.Println(cfg) log := setupLogger(cfg.Env) log.Info("starting application", slog.Any("cfg", cfg)) applicaton := app.New(log, cfg.GRPC.Port, cfg.TokenTTL) go applicaton.GRPCSrv.MustRun() // TODO: инициализировать приложение app //TODO:redis client := redis.NewClient(&redis.Options{ Addr: cfg.Redis.Addr, Password: cfg.Redis.Password, DB: cfg.Redis.DB, }) ctx := context.Background() err := client.Set(ctx, "key", "value1", 0).Err() if err != nil { log.Info("err") } val, err := client.Get(ctx, "key").Result() if err != nil { log.Info("err") } log.Info("key", slog.Any("val", val)) // TODO: запустить gRPC сервер приложения // Graceful shutdown stop := make(chan os.Signal, 1) signal.Notify(stop, syscall.SIGTERM, syscall.SIGINT) sign := <-stop log.Info("stoping application", slog.String("signal", sign.String())) applicaton.GRPCSrv.Stop() log.Info("application stopped") } func setupLogger(env string) *slog.Logger { var log *slog.Logger switch env { case envlocal: log = setupPrettySlog() case envdev: log = slog.New( slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug}), ) case envprod: log = slog.New( slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}), ) } return log } func setupPrettySlog() *slog.Logger { opts := slogpretty.PrettyHandlerOptions{ SlogOpts: &slog.HandlerOptions{ Level: slog.LevelDebug, }, } handler := opts.NewPrettyHandler(os.Stdout) return slog.New(handler) }