105 lines
3.3 KiB
Go
105 lines
3.3 KiB
Go
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",
|
|
})
|
|
}
|