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/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) // register swagger route server.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) run(server) }