Files
History_Api/cmd/history-api/server.go
AzenKain 79199f627d
Some checks failed
Build and Release / release (push) Failing after 51s
init
2026-03-25 22:29:43 +07:00

81 lines
2.0 KiB
Go

package main
import (
"database/sql"
_ "embed"
"history-api/docs"
"history-api/internal/controllers"
"history-api/internal/gen/sqlc"
"history-api/internal/repositories"
"history-api/internal/routes"
"history-api/internal/services"
"history-api/pkg/cache"
"os"
swagger "github.com/gofiber/contrib/v3/swaggerui"
middleware "github.com/gofiber/contrib/v3/zerolog"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/cors"
"github.com/rs/zerolog"
)
var (
Singleton *FiberServer
)
type FiberServer struct {
App *fiber.App
}
func NewHttpServer() *FiberServer {
server := &FiberServer{
App: fiber.New(fiber.Config{
ServerHeader: "http-server",
AppName: "http-server",
}),
}
cfg := swagger.Config{
BasePath: "/",
FileContent: docs.SwaggerJSON,
Path: "swagger",
Title: "Swagger API Docs",
}
server.App.Use(swagger.New(cfg))
logger := zerolog.New(os.Stderr).With().Timestamp().Logger()
server.App.Use(middleware.New(middleware.Config{
Logger: &logger,
}))
return server
}
func (s *FiberServer) SetupServer(sqlPg sqlc.DBTX, sqlTile *sql.DB, redis cache.Cache) {
// Apply CORS middleware
s.App.Use(cors.New(cors.Config{
AllowOrigins: []string{"*"},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"},
AllowHeaders: []string{"Accept", "Authorization", "Content-Type", "Origin"},
AllowCredentials: false,
MaxAge: 300,
}))
// repo setup
userRepo := repositories.NewUserRepository(sqlPg, redis)
roleRepo := repositories.NewRoleRepository(sqlPg, redis)
tileRepo := repositories.NewTileRepository(sqlTile, redis)
// service setup
authService := services.NewAuthService(userRepo, roleRepo)
tileService := services.NewTileService(tileRepo)
// controller setup
authController := controllers.NewAuthController(authService)
tileController := controllers.NewTileController(tileService)
// route setup
routes.AuthRoutes(s.App, authController)
routes.TileRoutes(s.App, tileController)
routes.NotFoundRoute(s.App)
}