205 lines
6.4 KiB
Go
205 lines
6.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"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/assignment"
|
|
"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"
|
|
inventoryissue "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_issue"
|
|
inventorymovement "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_movement"
|
|
inventoryreceipt "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_receipt"
|
|
inventoryrequest "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_request"
|
|
inventoryreturn "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_return"
|
|
inventorystorage "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_storage"
|
|
inventorytransaction "github.com/Caknoooo/go-gin-clean-starter/modules/inventory_transaction"
|
|
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/quarantine"
|
|
"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/Caknoooo/go-gin-clean-starter/pkg/constants"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/viper"
|
|
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 := viper.GetString("GOLANG_PORT")
|
|
if port == "" {
|
|
port = "8888"
|
|
}
|
|
|
|
var serve string
|
|
if viper.GetString("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() {
|
|
viper.SetConfigFile(".env")
|
|
|
|
err := viper.ReadInConfig()
|
|
if err != nil {
|
|
log.Fatal("Error loading .env file")
|
|
}
|
|
viper.AutomaticEnv()
|
|
|
|
var (
|
|
injector = do.New()
|
|
)
|
|
|
|
// Inisialisasi RabbitMQ
|
|
config.InitRabbitMQ()
|
|
|
|
// Register dependencies (termasuk logger)
|
|
providers.RegisterDependencies(injector)
|
|
|
|
// Ambil logger dari injector
|
|
logger := do.MustInvokeNamed[*logrus.Logger](injector, constants.LOGGER)
|
|
|
|
// 🔹 Tangkap panic global di luar Gin (worker, cron, dsb.)
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
// Convert panic value ke string untuk menghindari serialization error
|
|
panicMsg := fmt.Sprintf("%v", r)
|
|
logger.WithFields(logrus.Fields{
|
|
"panic": panicMsg,
|
|
"stack": string(debug.Stack()),
|
|
}).Error("Uncaught panic at main")
|
|
}
|
|
}()
|
|
|
|
// 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)
|
|
inventoryreceipt.RegisterRoutes(server, injector)
|
|
assignment.RegisterRoutes(server, injector)
|
|
inventoryrequest.RegisterRoutes(server, injector)
|
|
inventoryissue.RegisterRoutes(server, injector)
|
|
inventoryreturn.RegisterRoutes(server, injector)
|
|
inventorymovement.RegisterRoutes(server, injector)
|
|
inventorystorage.RegisterRoutes(server, injector)
|
|
inventorytransaction.RegisterRoutes(server, injector)
|
|
quarantine.RegisterRoutes(server, injector)
|
|
|
|
// register swagger route
|
|
server.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
|
|
run(server)
|
|
}
|