package main import ( "flag" "github.com/go-openapi/loads" "src.dualinventive.com/go/assets-service/config" "src.dualinventive.com/go/assets-service/internal/assets" "src.dualinventive.com/go/assets-service/internal/storage/gorm" apiServer "src.dualinventive.com/go/assets-service/rest/server" "src.dualinventive.com/go/assets-service/rest/server/operations" diConfig "src.dualinventive.com/go/lib/config" "src.dualinventive.com/go/lib/dilog" mtinfo "src.dualinventive.com/go/mtinfo-go" ) var ( // ApplicationName is the name of the application ApplicationName = "assets-service-rest" //nolint: gochecknoglobals // ApplicationVersion is the version of the application ApplicationVersion = "0.0.0-dev" //nolint: gochecknoglobals c = config.New() //nolint: gochecknoglobals ) func main() { var confFile string flag.StringVar(&confFile, "config", ApplicationName, "Configuration-file name") flag.Parse() logger, err := diConfig.Load(confFile, &c) if err != nil { panic(err) } logger = logger.WithField("protocol", "rest") logger.WithFields(dilog.Fields{ "app-name": ApplicationName, "app-version": ApplicationVersion, }).Info("starting") mtinfoClient, err := mtinfo.NewClient(mtinfo.GRPC, c.MtinfoClientConfig) if err != nil { logger.WithError(err).Fatal("error creating Mtinfo") } assetRepository, err := gorm.NewAssetRepository(logger, c.DatabaseConfig.Host, c.DatabaseConfig.Port, c.DatabaseConfig.Name, c.DatabaseConfig.User, c.DatabaseConfig.Password) if err != nil { logger.WithError(err).Fatal("error creating AssetRepository") } server, err := initRESTAPI( c.RestConfig.Port, &assets.AssetService{Logger: logger, AssetRepository: assetRepository, Mtinfo: mtinfoClient}, ) if err != nil { logger.Fatal(err) } defer server.Shutdown() //nolint:errcheck if err := server.Serve(); err != nil { logger.Fatal(err) } } func initRESTAPI( port int, assetService *assets.AssetService, ) (*apiServer.Server, error) { swaggerSpec, err := loads.Analyzed(apiServer.SwaggerJSON, "") if err != nil { return nil, err } api := operations.NewAssetAPI(swaggerSpec) server := apiServer.NewServer(api) initHandlers(api, assetService) server.ConfigureAPI() server.Port = port server.EnabledListeners = []string{"http"} // overwrite setting in swagger file return server, nil }