Files
History_Api/cmd/api/server.go
AzenKain f127e2f029
All checks were successful
Build and Release / release (push) Successful in 1m6s
fix bug
2026-04-19 19:57:09 +07:00

116 lines
3.6 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"
"history-api/pkg/storage"
"os"
"time"
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"
"golang.org/x/oauth2"
)
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(zerolog.ConsoleWriter{
Out: os.Stderr,
TimeFormat: time.RFC3339,
}).With().Timestamp().Logger()
server.App.Use(middleware.New(middleware.Config{
Logger: &logger,
}))
return server
}
func (s *FiberServer) SetupServer(
sqlPg sqlc.DBTX,
sqlTile *sql.DB,
sqlRasterTile *sql.DB,
redis cache.Cache,
sclient storage.Storage,
oauth *oauth2.Config,
) {
// Apply CORS middleware
s.App.Use(cors.New(cors.Config{
AllowOrigins: []string{
"http://localhost:3000",
"http://localhost:3001",
"https://history-admin.kain.id.vn",
},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"},
AllowHeaders: []string{"Accept", "Authorization", "Content-Type", "Origin"},
AllowCredentials: true,
}))
// repo setup
userRepo := repositories.NewUserRepository(sqlPg, redis)
roleRepo := repositories.NewRoleRepository(sqlPg, redis)
tileRepo := repositories.NewTileRepository(sqlTile, redis)
rasterTileRepo := repositories.NewRasterTileRepository(sqlRasterTile, redis)
tokenRepo := repositories.NewTokenRepository(redis)
mediaRepo := repositories.NewMediaRepository(sqlPg, redis)
verificationRepo := repositories.NewVerificationRepository(sqlPg, redis)
// service setup
authService := services.NewAuthService(userRepo, roleRepo, tokenRepo, redis)
userService := services.NewUserService(userRepo, roleRepo, redis)
roleService := services.NewRoleService(roleRepo)
tileService := services.NewTileService(tileRepo)
rasterTileService := services.NewRasterTileService(rasterTileRepo)
mediaService := services.NewMediaService(mediaRepo, tokenRepo, sclient, redis)
verificationService := services.NewVerificationService(verificationRepo, mediaRepo, userRepo, roleRepo, redis)
// controller setup
authController := controllers.NewAuthController(authService, oauth)
userController := controllers.NewUserController(userService, mediaService, verificationService)
tileController := controllers.NewTileController(tileService)
rasterTileController := controllers.NewRasterTileController(rasterTileService)
roleController := controllers.NewRoleController(roleService)
mediaController := controllers.NewMediaController(mediaService)
verificationController := controllers.NewVerificationController(verificationService)
// route setup
routes.AuthRoutes(s.App, authController, userRepo)
routes.UserRoutes(s.App, userController, userRepo)
routes.MediaRoutes(s.App, mediaController, userRepo)
routes.RoleRoutes(s.App, roleController, userRepo)
routes.VerificationRoutes(s.App, verificationController, userRepo)
routes.TileRoutes(s.App, tileController)
routes.RasterTileRoutes(s.App, rasterTileController)
routes.NotFoundRoute(s.App)
}