Files

51 lines
1.3 KiB
Go

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 Kickoff(logger *slog.Logger, env bootstrap.Environment, db *gorm.DB) {
gin.SetMode(gin.ReleaseMode)
// For a nice looking logger:
// r := gin.Default() // default, this makes a nice looking log-trace but I want JSON
r := gin.New()
r.Use(middleware.SlogMiddleware(logger))
r.Use(gin.Recovery())
if env.Authentication {
slog.Debug("injecting authentication middleware") // only log when actually doign the thing it logs to do
r.Use(middleware.AuthMiddleware(db))
}
api := r.Group("/api")
routes.RegisterApiRoutes(api, env)
// also register the 2 api subroutes
routes.RegisterKeyRoutes(api, db)
routes.RegisterCtrlRoutes(api, 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)
}
}