Files
sentinela-go/internal/api/swagger.go
Rainbow 3080a60711 feat: Swagger UI + OpenAPI 3.0 spec at /docs
- Full OpenAPI 3.0 spec covering all 20 endpoints
- Swagger UI served at /docs via CDN (zero deps)
- Spec at /docs/openapi.yaml (go:embed)
- Real data examples (Selic 15%, USD/BRL 5.19, etc.)
- Publicly accessible (no API key needed for docs)
2026-02-10 12:49:47 -03:00

47 lines
1.1 KiB
Go

package api
import (
_ "embed"
"github.com/gofiber/fiber/v2"
)
//go:embed docs/openapi.yaml
var openapiSpec []byte
func RegisterSwagger(app *fiber.App) {
app.Get("/docs/openapi.yaml", func(c *fiber.Ctx) error {
c.Set("Content-Type", "application/yaml")
return c.Send(openapiSpec)
})
app.Get("/docs", func(c *fiber.Ctx) error {
c.Set("Content-Type", "text/html")
return c.SendString(swaggerHTML)
})
}
const swaggerHTML = `<!DOCTYPE html>
<html>
<head>
<title>Sentinela API</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css">
<style>body { margin: 0; }</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
<script>
SwaggerUIBundle({
url: '/docs/openapi.yaml',
dom_id: '#swagger-ui',
deepLinking: true,
presets: [SwaggerUIBundle.presets.apis, SwaggerUIBundle.SwaggerUIStandalonePreset],
layout: "BaseLayout"
})
</script>
</body>
</html>`