block-accounting/backend/cmd/main.go
2024-05-29 01:57:31 +03:00

141 lines
2.7 KiB
Go

package main
import (
"context"
"os"
"os/signal"
"syscall"
"github.com/emochka2007/block-accounting/cmd/commands"
"github.com/emochka2007/block-accounting/internal/factory"
"github.com/emochka2007/block-accounting/internal/pkg/config"
cli "github.com/urfave/cli/v2"
)
func main() {
app := &cli.App{
Name: "blockd",
Version: "0.1.0",
Commands: commands.Commands(),
Flags: []cli.Flag{
// common
&cli.StringFlag{
Name: "log-level",
Value: "debug",
},
&cli.BoolFlag{
Name: "log-local",
},
&cli.StringFlag{
Name: "log-file",
},
&cli.BoolFlag{
Name: "log-add-source",
Value: true,
},
&cli.StringFlag{
Name: "jwt-secret",
},
&cli.StringFlag{
Name: "chain-api-url",
Value: "http://localhost:3000",
},
// rest
&cli.StringFlag{
Name: "rest-address",
Value: "localhost:8080",
},
&cli.BoolFlag{
Name: "rest-enable-tls",
},
&cli.StringFlag{
Name: "rest-cert-path",
},
&cli.StringFlag{
Name: "rest-key-path",
},
// database
&cli.StringFlag{
Name: "db-host",
},
&cli.StringFlag{
Name: "db-database",
},
&cli.StringFlag{
Name: "db-user",
},
&cli.StringFlag{
Name: "db-secret",
},
&cli.BoolFlag{
Name: "db-enable-tls",
},
&cli.StringFlag{
Name: "cache-host",
},
&cli.StringFlag{
Name: "cache-user",
},
&cli.StringFlag{
Name: "cache-secret",
},
},
Action: func(c *cli.Context) error {
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
config := config.Config{
Common: config.CommonConfig{
LogLevel: c.String("log-level"),
LogLocal: c.Bool("log-local"),
LogFile: c.String("log-file"),
LogAddSource: c.Bool("log-add-source"),
JWTSecret: []byte(c.String("jwt-secret")),
},
Rest: config.RestConfig{
Address: c.String("rest-address"),
TLS: c.Bool("rest-enable-tls"),
},
DB: config.DBConfig{
Host: c.String("db-host"),
EnableSSL: c.Bool("db-enable-ssl"),
Database: c.String("db-database"),
User: c.String("db-user"),
Secret: c.String("db-secret"),
CacheHost: c.String("cache-host"),
CacheUser: c.String("cache-user"),
CacheSecret: c.String("cache-secret"),
},
ChainAPI: config.ChainAPIConfig{
Host: c.String("chain-api-url"),
},
}
service, cleanup, err := factory.ProvideService(config)
if err != nil {
panic(err)
}
defer func() {
cleanup()
service.Stop()
}()
if err = service.Run(ctx); err != nil {
return err
}
return nil
},
}
if err := app.Run(os.Args); err != nil {
panic(err)
}
}