diff --git a/routers/controllers/admin.go b/routers/controllers/admin.go index 9d103678..4c2cdaf1 100644 --- a/routers/controllers/admin.go +++ b/routers/controllers/admin.go @@ -425,3 +425,14 @@ func AdminListFolders(c *gin.Context) { c.JSON(200, ErrorResponse(err)) } } + +// AdminListNodes 列出从机节点 +func AdminListNodes(c *gin.Context) { + var service admin.AdminListService + if err := c.ShouldBindJSON(&service); err == nil { + res := service.Nodes() + c.JSON(200, res) + } else { + c.JSON(200, ErrorResponse(err)) + } +} diff --git a/routers/router.go b/routers/router.go index 78bd96a2..b1dd9c32 100644 --- a/routers/router.go +++ b/routers/router.go @@ -442,6 +442,12 @@ func InitMasterRouter() *gin.Engine { task.POST("import", controllers.AdminCreateImportTask) } + node := admin.Group("node") + { + // 列出从机节点 + node.POST("list", controllers.AdminListNodes) + } + } // 用户 diff --git a/service/admin/node.go b/service/admin/node.go new file mode 100644 index 00000000..17084fbf --- /dev/null +++ b/service/admin/node.go @@ -0,0 +1,42 @@ +package admin + +import ( + model "github.com/cloudreve/Cloudreve/v3/models" + "github.com/cloudreve/Cloudreve/v3/pkg/serializer" + "strings" +) + +// Nodes 列出从机节点 +func (service *AdminListService) Nodes() serializer.Response { + var res []model.Node + total := 0 + + tx := model.DB.Model(&model.Node{}) + if service.OrderBy != "" { + tx = tx.Order(service.OrderBy) + } + + for k, v := range service.Conditions { + tx = tx.Where(k+" = ?", v) + } + + if len(service.Searches) > 0 { + search := "" + for k, v := range service.Searches { + search += k + " like '%" + v + "%' OR " + } + search = strings.TrimSuffix(search, " OR ") + tx = tx.Where(search) + } + + // 计算总数用于分页 + tx.Count(&total) + + // 查询记录 + tx.Limit(service.PageSize).Offset((service.Page - 1) * service.PageSize).Find(&res) + + return serializer.Response{Data: map[string]interface{}{ + "total": total, + "items": res, + }} +}