52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package controller
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/loveuer/nf-disk/internal/api"
|
|
"github.com/loveuer/nf-disk/internal/opt"
|
|
"github.com/loveuer/nf-disk/internal/tool"
|
|
"github.com/loveuer/nf-disk/ndh"
|
|
"github.com/loveuer/nf/nft/log"
|
|
"strings"
|
|
)
|
|
|
|
func handleError(err error) string {
|
|
bs, _ := json.Marshal(map[string]any{
|
|
"err": err.Error(),
|
|
"msg": opt.Msg500,
|
|
"status": 500,
|
|
})
|
|
|
|
return string(bs)
|
|
}
|
|
|
|
func handleNotFound(path string) string {
|
|
bs, _ := json.Marshal(map[string]any{
|
|
"err": fmt.Sprintf("path not found, path: %s", path),
|
|
"msg": opt.Msg500,
|
|
"status": 404,
|
|
})
|
|
|
|
return string(bs)
|
|
}
|
|
|
|
func (a *App) Invoke(path string, req string) (res string) {
|
|
log.Info("app invoke: path = %s, req = %s", path, req)
|
|
handler, ok := api.Resolve(path)
|
|
if !ok {
|
|
log.Warn("app invoke: path not found, path = %s", path)
|
|
return handleNotFound(path)
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
ctx := ndh.NewCtx(tool.TimeoutCtx(a.ctx), strings.NewReader(req), &buf)
|
|
|
|
if err := handler(ctx); err != nil {
|
|
return handleError(err)
|
|
}
|
|
|
|
return buf.String()
|
|
}
|