package server import ( handler "SimplyCPQ2/internal/handler" "SimplyCPQ2/internal/repositories" "SimplyCPQ2/internal/services" "database/sql" "log" "net/http" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "github.com/spf13/viper" ) type HttpServer struct { config *viper.Viper router *gin.Engine dbHandler *sql.DB importHandler *handler.ImportHandler importRepository *repositories.ImportRepository valueRepository *repositories.ValueRepository propertyRepository *repositories.PropertyRepository propertyTypeRepository *repositories.PropertyTypeRepository propertyTypeGroupRepository *repositories.PropertyTypeGroupRepository } func InitHttpServer(config *viper.Viper, dbHandler *sql.DB) HttpServer { // db initialization can be done here if needed // repository initialisation: valueRepository := repositories.NewValueRepository(dbHandler) propertyRepository := repositories.NewPropertyRepository(dbHandler, valueRepository) propertyTypeRepository := repositories.NewPropertyTypeRepository(dbHandler, propertyRepository) propertyTypeGroupRepository := repositories.NewPropertyTypesGroupRepository(dbHandler, propertyTypeRepository) importRepository := repositories.NewImportRepository(dbHandler, valueRepository, propertyTypeRepository, propertyTypeGroupRepository, propertyRepository) // service initialisation: importService := services.NewImportService(importRepository) propertyTypesService := services.NewPropertyTypeService(propertyTypeRepository, propertyTypeGroupRepository) // handler initialisation: importHandler := handler.NewImportHandler(importService) mainHandler := handler.NewMainHandler(propertyTypesService) propertyTypeHandler := handler.NewPropertyTypeHandler(propertyTypesService) // Service API router := gin.Default() // initialize templates //router.LoadHTMLGlob("../templates/**/*.html") router.Use(cors.Default()) // static content router.Static("/static", "../static") router.GET("/", mainHandler.Home) router.GET("/properties/rootnodes", propertyTypeHandler.GetRootPropertyTypeGroups) //router.GET("/properties", handler.PropertiesHandler) /* old routes // properties router.GET("/properties/:id/childs", PropertyTypeHandler.GetPropertyTypesGroupDirectChildsById) */ /* router.GET("/products", handlers.ProductsHandler) router.GET("/conditions", handlers.ConditionsHandler) router.GET("/translations", handlers.TranslationsHandler) */ // import router.POST("/importPropertyTypes", importHandler.ImportPropertyTypeGroups) // test endpoint router.GET("/test", Test) // server return HttpServer{ config: config, router: router, dbHandler: dbHandler, importHandler: importHandler, importRepository: importRepository, valueRepository: valueRepository, propertyRepository: propertyRepository, propertyTypeRepository: propertyTypeRepository, propertyTypeGroupRepository: propertyTypeGroupRepository, } } func (hs HttpServer) Start() { err := hs.router.Run(hs.config.GetString("http.server_address")) if err != nil { log.Fatalf("Error while starting HTTP server: %v", err) } } func Test(ctx *gin.Context) { ctx.JSON(http.StatusOK, gin.H{ "message": "Test", }) }