Feat: get vendor backend support page and size

pull/44/head
zijiren233 3 years ago
parent f01eb00194
commit a54996aca5

@ -3,8 +3,10 @@ package handlers
import ( import (
"net/http" "net/http"
"reflect" "reflect"
"slices"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/maruel/natural"
"github.com/synctv-org/synctv/internal/bootstrap" "github.com/synctv-org/synctv/internal/bootstrap"
"github.com/synctv-org/synctv/internal/db" "github.com/synctv-org/synctv/internal/db"
dbModel "github.com/synctv-org/synctv/internal/model" dbModel "github.com/synctv-org/synctv/internal/model"
@ -12,6 +14,7 @@ import (
"github.com/synctv-org/synctv/internal/settings" "github.com/synctv-org/synctv/internal/settings"
"github.com/synctv-org/synctv/internal/vendor" "github.com/synctv-org/synctv/internal/vendor"
"github.com/synctv-org/synctv/server/model" "github.com/synctv-org/synctv/server/model"
"golang.org/x/exp/maps"
"gorm.io/gorm" "gorm.io/gorm"
) )
@ -705,15 +708,42 @@ func AdminGetVendorBackends(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User) // user := ctx.MustGet("user").(*op.User)
conns := vendor.LoadConns() conns := vendor.LoadConns()
resp := make([]*model.GetVendorBackendResp, 0, len(conns)) page, size, err := GetPageAndPageSize(ctx)
for _, conn := range conns { if err != nil {
resp = append(resp, &model.GetVendorBackendResp{ ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
Status: conn.Conn.GetState(), return
Info: conn.Info, }
s := maps.Keys(conns)
l := len(s)
var resp []*model.GetVendorBackendResp
if (page-1)*size <= l {
slices.SortStableFunc(s, func(a, b string) int {
if a == b {
return 0
}
if natural.Less(a, b) {
return -1
} else {
return 1
}
}) })
if l > size {
l = size
}
resp = make([]*model.GetVendorBackendResp, 0, l)
for _, v := range s[(page-1)*size : (page-1)*size+l] {
resp = append(resp, &model.GetVendorBackendResp{
Info: conns[v].Info,
Status: conns[v].Conn.GetState(),
})
}
} }
ctx.JSON(http.StatusOK, model.NewApiDataResp(resp)) ctx.JSON(http.StatusOK, model.NewApiDataResp(gin.H{
"total": l,
"list": resp,
}))
} }
func AdminAddVendorBackend(ctx *gin.Context) { func AdminAddVendorBackend(ctx *gin.Context) {

Loading…
Cancel
Save