package server import ( "database/sql" "log" "net/http" "xcpq_editor/internal/handlers" "xcpq_editor/internal/repositories" "xcpq_editor/internal/services" "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 *handlers.ImportHandler importRepository *repositories.Import_Repository valueRepository *repositories.Value_Repository propertyRepository *repositories.Property_Repository propertyTypeRepository *repositories.Property_Type_Repository propertyTypeGroupRepository *repositories.Property_Types_Group_Repository } 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 := handlers.NewImportHandler(importService) propertyTypesHandler := handlers.NewPropertyTypesHandler(propertyTypesService) // Service API router := gin.Default() router.Use(cors.Default()) // static content router.Static("/static", "../static") router.GET("/", handlers.Home) router.GET("/properties", handlers.PropertiesHandler) // properties router.GET("/properties/rootnodes", propertyTypesHandler.GetRootPropertyTypesGroups) /* 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", }) }