src.dualinventive.com/go/assets-service/cmd/assets-service-rest/main.go

88 lines
2.3 KiB
Go

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
}