2024-01-07 18:44:15 +00:00
|
|
|
// Package server is the part of the service that serves it.
|
|
|
|
package server
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
|
2024-03-01 09:13:53 +00:00
|
|
|
"git.foobar.vip/benni347/novum-portfolio/pkg/sites"
|
2024-01-16 10:55:07 +00:00
|
|
|
"github.com/a-h/templ"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
"github.com/gofiber/fiber/v2/middleware/adaptor"
|
2024-01-16 10:58:05 +00:00
|
|
|
"github.com/gofiber/fiber/v2/middleware/healthcheck"
|
2024-01-07 18:44:15 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var serverAddr string
|
|
|
|
|
|
|
|
const appName = "novum-portfolio-server"
|
|
|
|
|
|
|
|
// ErrorResponse is a struct for error responses
|
|
|
|
type ErrorResponse struct {
|
|
|
|
Error string `json:"error"`
|
|
|
|
Message string `json:"message"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewServer creates the new server and sets up the listener
|
2024-01-16 10:55:07 +00:00
|
|
|
func NewServer(app *fiber.App) *fiber.App {
|
|
|
|
app.Get("/", func(c *fiber.Ctx) error {
|
2024-01-16 12:14:06 +00:00
|
|
|
return Render(c, sites.IndexComponent("test"))
|
2024-01-16 10:55:07 +00:00
|
|
|
})
|
2024-01-16 10:58:05 +00:00
|
|
|
|
|
|
|
app.Use(healthcheck.New())
|
2024-01-16 10:55:07 +00:00
|
|
|
app.Use(NotFoundMiddleware)
|
|
|
|
return app
|
|
|
|
}
|
|
|
|
|
|
|
|
func NotFoundMiddleware(c *fiber.Ctx) error {
|
2024-01-16 12:14:06 +00:00
|
|
|
return Render(c, sites.NotFound(), templ.WithStatus(http.StatusNotFound))
|
2024-01-16 10:55:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func Render(c *fiber.Ctx, component templ.Component, options ...func(*templ.ComponentHandler)) error {
|
|
|
|
componentHandler := templ.Handler(component)
|
|
|
|
for _, o := range options {
|
|
|
|
o(componentHandler)
|
|
|
|
}
|
|
|
|
return adaptor.HTTPHandler(componentHandler)(c)
|
2024-01-07 18:44:15 +00:00
|
|
|
}
|