perbaikan
This commit is contained in:
100
internal/handlers/swagger/swagger.go
Normal file
100
internal/handlers/swagger/swagger.go
Normal file
@@ -0,0 +1,100 @@
|
||||
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{}{},
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user