package main import ( "flag" "github.com/go-openapi/loads" "src.dualinventive.com/go/companies-service/config" "src.dualinventive.com/go/companies-service/internal/companies" "src.dualinventive.com/go/companies-service/internal/storage/gorm" apiServer "src.dualinventive.com/go/companies-service/rest/server" "src.dualinventive.com/go/companies-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 = "companies-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.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") } companyRepository, err := gorm.NewCompanyRepository(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 CompanyRepository") } server, err := initRESTAPI( c.RestConfig.Port, &companies.CompanyService{Logger: logger, CompanyRepository: companyRepository, 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, companyService *companies.CompanyService, ) (*apiServer.Server, error) { swaggerSpec, err := loads.Analyzed(apiServer.SwaggerJSON, "") if err != nil { return nil, err } api := operations.NewCompaniesAPI(swaggerSpec) server := apiServer.NewServer(api) initHandlers(api, companyService) server.ConfigureAPI() server.Port = port server.EnabledListeners = []string{"http"} // overwrite setting in swagger file return server, nil }