wms-be/cmd/main.go

170 lines
4.7 KiB
Go

package main
import (
"io"
"log"
"os"
"runtime/debug"
"github.com/Caknoooo/go-gin-clean-starter/config"
"github.com/Caknoooo/go-gin-clean-starter/docs"
"github.com/Caknoooo/go-gin-clean-starter/middlewares"
"github.com/Caknoooo/go-gin-clean-starter/modules/aisle"
"github.com/Caknoooo/go-gin-clean-starter/modules/auth"
"github.com/Caknoooo/go-gin-clean-starter/modules/category"
"github.com/Caknoooo/go-gin-clean-starter/modules/client"
maintenancegroup "github.com/Caknoooo/go-gin-clean-starter/modules/maintenance_group"
"github.com/Caknoooo/go-gin-clean-starter/modules/menu"
"github.com/Caknoooo/go-gin-clean-starter/modules/monitoring"
"github.com/Caknoooo/go-gin-clean-starter/modules/mvendor"
"github.com/Caknoooo/go-gin-clean-starter/modules/permissions"
"github.com/Caknoooo/go-gin-clean-starter/modules/product"
"github.com/Caknoooo/go-gin-clean-starter/modules/role"
"github.com/Caknoooo/go-gin-clean-starter/modules/uom"
"github.com/Caknoooo/go-gin-clean-starter/modules/warehouse"
"github.com/Caknoooo/go-gin-clean-starter/modules/zona"
"github.com/sirupsen/logrus"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
"github.com/Caknoooo/go-gin-clean-starter/modules/logs"
"github.com/Caknoooo/go-gin-clean-starter/modules/user"
"github.com/Caknoooo/go-gin-clean-starter/providers"
"github.com/Caknoooo/go-gin-clean-starter/script"
"github.com/samber/do"
// "github.com/common-nighthawk/go-figure"
"github.com/gin-gonic/gin"
)
func args(injector *do.Injector) bool {
if len(os.Args) > 1 {
flag := script.Commands(injector)
return flag
}
return true
}
func run(server *gin.Engine) {
server.Static("/assets", "./assets")
port := os.Getenv("GOLANG_PORT")
if port == "" {
port = "8888"
}
var serve string
if os.Getenv("APP_ENV") == "localhost" {
serve = "0.0.0.0:" + port
} else {
serve = ":" + port
}
// myFigure := figure.NewColorFigure("Hafaro", "", "green", true)
// myFigure.Print()
if err := server.Run(serve); err != nil {
log.Fatalf("error running server: %v", err)
}
}
// @title WMS Wareify API Docs
// @version 1.0
// @description This is a sample server celler server.
// @termsOfService http://swagger.io/terms/
// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host localhost:8888
// @BasePath /api/v1
// @securityDefinitions.apikey BearerAuth
// @in header
// @name Authorization
// @description Bearer token for authentication
// @tokenUrl http://localhost:3000/auth/login
// @externalDocs.description OpenAPI
// @externalDocs.url https://swagger.io/resources/open-api/
func main() {
logger := config.SetupLoggerLogrus()
// 🔹 Tangkap panic global di luar Gin (worker, cron, dsb.)
defer func() {
if r := recover(); r != nil {
logger.WithFields(logrus.Fields{
"panic": r,
"stack": string(debug.Stack()),
}).Error("Uncaught panic at main")
}
}()
var (
injector = do.New()
)
providers.RegisterDependencies(injector)
// set Swagger info (opsional)
docs.SwaggerInfo.Title = "WMS Wareify API"
docs.SwaggerInfo.Version = "1.0"
docs.SwaggerInfo.Host = "localhost:8888"
docs.SwaggerInfo.BasePath = "/api/v1"
if !args(injector) {
return
}
// Logging to a file.
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)
gin.SetMode(gin.DebugMode)
server := gin.Default()
//db := do.MustInvokeNamed[*gorm.DB](injector, constants.DB)
//scheduler.Start(db)
// Load template dari root
server.LoadHTMLFiles("logs.html")
// Atur trusted proxies, misal hanya localhost dan IP proxy tertentu
// server.SetTrustedProxies([]string{"127.0.0.1"})
server.SetTrustedProxies(nil) // disable trusted proxies
server.RedirectTrailingSlash = false
// Enable middleware
server.Use(middlewares.CORSMiddleware())
server.Use(middlewares.GinRecoveryWithLogrus(logger))
// Register module routes
monitoring.RegisterRoutes(server)
user.RegisterRoutes(server, injector)
auth.RegisterRoutes(server, injector)
role.RegisterRoutes(server, injector)
logs.RegisterRoutes(server, injector)
menu.RegisterRoutes(server, injector)
maintenancegroup.RegisterRoutes(server, injector)
client.RegisterRoutes(server, injector)
permissions.RegisterRoutes(server, injector)
product.RegisterRoutes(server, injector)
category.RegisterRoutes(server, injector)
uom.RegisterRoutes(server, injector)
mvendor.RegisterRoutes(server, injector)
warehouse.RegisterRoutes(server, injector)
zona.RegisterRoutes(server, injector)
aisle.RegisterRoutes(server, injector)
// register swagger route
server.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
run(server)
}