Files
reloading-manager/backend/main.go
2025-04-17 17:28:50 -04:00

120 lines
3.1 KiB
Go

package main
import (
"context"
"fmt"
"git.siteworxpro.com/packages/go/utilities/Env"
"git.siteworxpro.com/reloading-manager/backend/database"
"git.siteworxpro.com/reloading-manager/backend/handlers/bullets"
"git.siteworxpro.com/reloading-manager/backend/handlers/cartridge"
"git.siteworxpro.com/reloading-manager/backend/handlers/loads"
"git.siteworxpro.com/reloading-manager/backend/handlers/manufacturer"
"git.siteworxpro.com/reloading-manager/backend/handlers/powder"
"git.siteworxpro.com/reloading-manager/backend/handlers/primers"
"github.com/go-playground/validator"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/labstack/gommon/log"
"net/http"
"strings"
)
const (
Port Env.EnvironmentVariable = "PORT"
CorsOrigin Env.EnvironmentVariable = "CORS_ORIGIN"
)
type (
CustomValidator struct {
validator *validator.Validate
}
)
func (cv *CustomValidator) Validate(i interface{}) error {
if err := cv.validator.Struct(i); err != nil {
return echo.NewHTTPError(http.StatusBadRequest, err.Error())
}
return nil
}
func main() {
e := echo.New()
e.Validator = &CustomValidator{validator: validator.New()}
e.HideBanner = true
e.HidePort = true
e.Logger.SetLevel(log.DEBUG)
corsOriginS := CorsOrigin.GetEnvString("http://localhost:5173,http://127.0.0.1:5173")
corsOrigin := strings.Split(corsOriginS, ",")
e.Use(database.CreateDatabaseMiddleware())
e.Use(middleware.Recover())
e.Use(middleware.Logger())
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: corsOrigin,
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE"},
}))
migrate(e)
// Bullets
e.GET("/bullet", bullets.Get)
e.GET("/bullet/:id", bullets.Get)
e.GET("/bullet/:id/photo", bullets.Photo)
e.POST("/bullet", bullets.Post)
e.POST("/bullet/:id", bullets.Put)
e.DELETE("/bullet/:id", bullets.Delete)
// Manufacturers
e.GET("/manufacturer", manufacturer.Get)
e.GET("/manufacturer/:id", manufacturer.Get)
e.POST("/manufacturer", manufacturer.Post)
e.POST("/manufacturer/:id", manufacturer.Post)
e.DELETE("/manufacturer/:id", manufacturer.Delete)
// Powders
e.GET("/powder", powder.Get)
e.GET("/powder/:id", powder.Get)
e.GET("/powder/:id/photo", powder.Photo)
e.POST("/powder", powder.Post)
e.POST("/powder/:id", powder.Post)
e.DELETE("/powder/:id", powder.Delete)
// Primers
e.GET("/primer", primers.Get)
e.GET("/primer/:id", primers.Get)
e.GET("/primer/:id/photo", primers.Photo)
e.POST("/primer", primers.Post)
e.POST("/primer/:id", primers.Post)
e.DELETE("/primer/:id", primers.Delete)
// cartridge
e.GET("/cartridge", cartridge.Get)
e.POST("/cartridge", cartridge.Post)
e.DELETE("/cartridge/:id", cartridge.Delete)
// loads
e.GET("/load", loads.Get)
e.POST("/load", loads.Post)
addr := fmt.Sprintf("0.0.0.0:%s", Port.GetEnvString("8080"))
e.Logger.Info("🚀 Starting Server...")
e.Logger.Infof("🎧 Listening on %v", addr)
e.Logger.Fatal(e.Start(addr))
}
func migrate(e *echo.Echo) {
e.Logger.Info("🛠️ Starting migrations...")
db := database.GetNewDatabase()
defer db.Db.Close(context.Background())
db.Migrate()
e.Logger.Info("🛠️ Starting migrations...")
}