101 lines
2.9 KiB
Go
101 lines
2.9 KiB
Go
package swagger
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
swaggerFiles "github.com/swaggo/files"
|
|
ginSwagger "github.com/swaggo/gin-swagger"
|
|
|
|
"api-service/internal/config"
|
|
)
|
|
|
|
// Handler handles Swagger documentation
|
|
type Handler struct {
|
|
config *config.Config
|
|
}
|
|
|
|
// NewHandler creates a new Swagger handler
|
|
func NewHandler(cfg *config.Config) *Handler {
|
|
return &Handler{
|
|
config: cfg,
|
|
}
|
|
}
|
|
|
|
// RegisterRoutes registers Swagger routes
|
|
func (h *Handler) RegisterRoutes(router *gin.Engine) {
|
|
// Serve Swagger UI
|
|
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
|
|
// Serve OpenAPI spec
|
|
router.GET("/openapi.json", h.serveOpenAPISpec)
|
|
router.GET("/openapi.yaml", h.serveOpenAPISpecYAML)
|
|
}
|
|
|
|
// serveOpenAPISpec serves the OpenAPI JSON specification
|
|
func (h *Handler) serveOpenAPISpec(c *gin.Context) {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"openapi": "3.0.0",
|
|
"info": map[string]interface{}{
|
|
"title": h.config.Swagger.Title,
|
|
"description": h.config.Swagger.Description,
|
|
"version": h.config.Swagger.Version,
|
|
"termsOfService": h.config.Swagger.TermsOfService,
|
|
"contact": map[string]interface{}{
|
|
"name": h.config.Swagger.ContactName,
|
|
"url": h.config.Swagger.ContactURL,
|
|
"email": h.config.Swagger.ContactEmail,
|
|
},
|
|
"license": map[string]interface{}{
|
|
"name": h.config.Swagger.LicenseName,
|
|
"url": h.config.Swagger.LicenseURL,
|
|
},
|
|
},
|
|
"servers": []map[string]interface{}{
|
|
{
|
|
"url": strings.Join([]string{strings.ToLower(h.config.Swagger.Schemes[0]), "://", h.config.Swagger.Host, h.config.Swagger.BasePath}, ""),
|
|
"description": "API Server",
|
|
},
|
|
},
|
|
"paths": map[string]interface{}{},
|
|
"components": map[string]interface{}{
|
|
"schemas": map[string]interface{}{},
|
|
"securitySchemes": map[string]interface{}{},
|
|
},
|
|
})
|
|
}
|
|
|
|
// serveOpenAPISpecYAML serves the OpenAPI YAML specification
|
|
func (h *Handler) serveOpenAPISpecYAML(c *gin.Context) {
|
|
c.YAML(http.StatusOK, map[string]interface{}{
|
|
"openapi": "3.0.0",
|
|
"info": map[string]interface{}{
|
|
"title": h.config.Swagger.Title,
|
|
"description": h.config.Swagger.Description,
|
|
"version": h.config.Swagger.Version,
|
|
"termsOfService": h.config.Swagger.TermsOfService,
|
|
"contact": map[string]interface{}{
|
|
"name": h.config.Swagger.ContactName,
|
|
"url": h.config.Swagger.ContactURL,
|
|
"email": h.config.Swagger.ContactEmail,
|
|
},
|
|
"license": map[string]interface{}{
|
|
"name": h.config.Swagger.LicenseName,
|
|
"url": h.config.Swagger.LicenseURL,
|
|
},
|
|
},
|
|
"servers": []map[string]interface{}{
|
|
{
|
|
"url": strings.Join([]string{strings.ToLower(h.config.Swagger.Schemes[0]), "://", h.config.Swagger.Host, h.config.Swagger.BasePath}, ""),
|
|
"description": "API Server",
|
|
},
|
|
},
|
|
"paths": map[string]interface{}{},
|
|
"components": map[string]interface{}{
|
|
"schemas": map[string]interface{}{},
|
|
"securitySchemes": map[string]interface{}{},
|
|
},
|
|
})
|
|
}
|