package main
import (
"embed"
"flag"
"fmt"
"log"
"os"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/logger"
)
//go:embed openapi.json
var openapiSpec embed.FS
func main() {
port := flag.Int("port", 8081, "port to listen on")
apiURL := flag.String("api-url", "http://localhost:8080", "base URL of the API server")
flag.Parse()
app := fiber.New(fiber.Config{
AppName: "Drexa API Documentation",
})
app.Use(logger.New())
app.Use(cors.New())
// Serve Scalar UI
app.Get("/", func(c *fiber.Ctx) error {
html := fmt.Sprintf(`
Drexa API Documentation
`, *apiURL)
c.Set("Content-Type", "text/html; charset=utf-8")
return c.SendString(html)
})
// Serve OpenAPI spec
app.Get("/openapi.json", func(c *fiber.Ctx) error {
c.Set("Content-Type", "application/json")
c.Set("Access-Control-Allow-Origin", "*")
doc, err := openapiSpec.ReadFile("openapi.json")
if err != nil {
return c.Status(fiber.StatusInternalServerError).SendString(err.Error())
}
return c.Send(doc)
})
// Health check
app.Get("/health", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"status": "ok"})
})
fmt.Fprintf(os.Stderr, "📚 Drexa API Documentation server starting on http://localhost:%d\n", *port)
fmt.Fprintf(os.Stderr, " API server configured at: %s\n", *apiURL)
log.Fatal(app.Listen(fmt.Sprintf(":%d", *port)))
}