feat: docs api design
This commit is contained in:
82
internal/router/debug.go
Normal file
82
internal/router/debug.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"octopus/statics"
|
||||
"sort"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/basicauth"
|
||||
"github.com/neo-f/soda"
|
||||
)
|
||||
|
||||
func RegisterDebuggerRouter(app *soda.Soda) {
|
||||
app.App.Get("/debugger", basicAuth, func(c *fiber.Ctx) error {
|
||||
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
|
||||
return c.SendString(statics.DebuggerHTML)
|
||||
})
|
||||
app.App.Get("/debugger/functions", basicAuth, func(c *fiber.Ctx) error {
|
||||
sort.Slice(debugFunctions, func(i, j int) bool {
|
||||
return debugFunctions[i].Title < debugFunctions[j].Title
|
||||
})
|
||||
return c.JSON(debugFunctions)
|
||||
})
|
||||
app.App.Post("/debugger/execute", basicAuth, func(c *fiber.Ctx) error {
|
||||
var params struct {
|
||||
Func string `json:"func"`
|
||||
Params map[string]string `json:"params"`
|
||||
}
|
||||
if err := c.BodyParser(¶ms); err != nil {
|
||||
return err
|
||||
}
|
||||
var fn *DebugFunction
|
||||
for _, f := range debugFunctions {
|
||||
if f.Name == params.Func {
|
||||
fn = &f
|
||||
break
|
||||
}
|
||||
}
|
||||
if fn == nil {
|
||||
return fmt.Errorf("function not found")
|
||||
}
|
||||
resp, err := fn.Do(c.UserContext(), params.Params)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(resp)
|
||||
})
|
||||
}
|
||||
|
||||
var basicAuth = basicauth.New(basicauth.Config{
|
||||
Users: map[string]string{"neo": "whosyourdaddy"},
|
||||
})
|
||||
|
||||
type DebugFunctionParameter struct {
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Required bool `json:"required"`
|
||||
}
|
||||
|
||||
type DebugFunction struct {
|
||||
Name string `json:"name"`
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
Parameters []DebugFunctionParameter `json:"parameters"`
|
||||
Do func(context.Context, map[string]string) (interface{}, error) `json:"-"`
|
||||
}
|
||||
|
||||
var debugFunctions = []DebugFunction{
|
||||
{
|
||||
Name: "echo",
|
||||
Title: "demo debugger",
|
||||
Description: "echo the parameters",
|
||||
Parameters: []DebugFunctionParameter{
|
||||
{Name: "param-a", Description: "param-a", Required: true},
|
||||
{Name: "param-b", Description: "param-b", Required: true},
|
||||
},
|
||||
Do: func(ctx context.Context, params map[string]string) (interface{}, error) {
|
||||
return params, nil
|
||||
},
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user