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 (
"net/http"
"reflect"
"slices"
"github.com/gin-gonic/gin"
"github.com/maruel/natural"
"github.com/synctv-org/synctv/internal/bootstrap"
"github.com/synctv-org/synctv/internal/db"
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/vendor"
"github.com/synctv-org/synctv/server/model"
"golang.org/x/exp/maps"
"gorm.io/gorm"
)
@ -705,15 +708,42 @@ func AdminGetVendorBackends(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User)
conns := vendor.LoadConns()
resp := make([]*model.GetVendorBackendResp, 0, len(conns))
for _, conn := range conns {
resp = append(resp, &model.GetVendorBackendResp{
Status: conn.Conn.GetState(),
Info: conn.Info,
page, size, err := GetPageAndPageSize(ctx)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
}
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) {

Loading…
Cancel
Save