package api import ( "fmt" "log/slog" "orbits-server/internal/server/api/middleware" "orbits-server/internal/server/api/routes" "orbits-server/internal/server/bootstrap" "github.com/gin-gonic/gin" "gorm.io/gorm" ) // All error messages from slog must have an error field with the golang error // See bottom the the kickoff function for details func KickoffApi(logger *slog.Logger, env bootstrap.Environment, db *gorm.DB) { gin.SetMode(gin.ReleaseMode) // For a nice looking logger: // r := gin.Default() // JSON logger: https://gin-gonic.com/en/docs/logging/structured-logging/ r := gin.New() r.Use(middleware.SlogMiddleware(logger)) r.Use(gin.Recovery()) api := r.Group("/api") routes.RegisterApiRoutes(api /*env,*/, db) file := r.Group("/file") routes.RegisterFileRoutes(file, env, db) r.Static("/assets", "./web/frontend/dist/assets") r.NoRoute(func(c *gin.Context) { c.File("./web/frontend/dist/index.html") }) err := r.Run(fmt.Sprintf("%s:%d", env.Hostname, env.Port)) if err != nil { slog.Error("failed to start the Gin server", "error", err) } }