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))) }