功能:完善渠道模型批量操作

支持模型管理批量删除,并在拉取模型时提供全选、取消全选和选择数量提示。

同时保持首屏品牌中立,补充后端原子删除与管理员界面回归测试。
This commit is contained in:
Ray
2026-09-07 10:18:06 +08:00
parent df94c3bdf1
commit 2ce443731d
9 changed files with 361 additions and 39 deletions

View File

@@ -269,6 +269,27 @@ func RegisterFinanceRoutes(r *gin.RouterGroup, svc *service.Service) {
r.POST("/admin/channels/:id/models", func(c *gin.Context) {
saveChannelModel(c, svc, "")
})
r.POST("/admin/channels/:id/models/batch-delete", func(c *gin.Context) {
user, err := currentUser(c, svc)
if err != nil {
failService(c, err)
return
}
c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, 32<<10)
var req struct {
ModelIDs []string `json:"modelIds"`
}
if err := c.ShouldBindJSON(&req); err != nil {
fail(c, http.StatusBadRequest, err)
return
}
deleted, err := svc.DeleteAdminChannelModels(user, c.Param("id"), req.ModelIDs)
if err != nil {
failService(c, err)
return
}
ok(c, gin.H{"deleted": deleted})
})
r.PATCH("/admin/channels/:id/models/:modelId", func(c *gin.Context) {
saveChannelModel(c, svc, c.Param("modelId"))
})

View File

@@ -0,0 +1,23 @@
package handler
import (
"testing"
"infinite-canvas/backend/internal/service"
"github.com/gin-gonic/gin"
)
func TestFinanceRoutesExposeChannelModelBatchDelete(t *testing.T) {
gin.SetMode(gin.TestMode)
router := gin.New()
RegisterFinanceRoutes(router.Group("/api"), &service.Service{})
const wanted = "POST /api/admin/channels/:id/models/batch-delete"
for _, route := range router.Routes() {
if route.Method+" "+route.Path == wanted {
return
}
}
t.Fatalf("route %s is not registered", wanted)
}