feat(workbench): 初始化内置工具目录

This commit is contained in:
ddcat666
2026-10-13 22:44:31 +08:00
parent 1f2f4da42b
commit f6b60a3855
7 changed files with 440 additions and 0 deletions

View File

@@ -101,6 +101,9 @@ func run(ctx context.Context) error {
if err := svc.EnsureBuiltinTools(); err != nil {
return err
}
if err := ensureBuiltinWorkbenchCatalog(svc); err != nil {
return err
}
if summary, err := svc.MigrateLegacyStorage(); err != nil {
slog.Warn("storage migration skipped after error", "error", err)
} else if summary.Backup != "" {
@@ -173,6 +176,10 @@ func run(ctx context.Context) error {
return nil
}
func ensureBuiltinWorkbenchCatalog(svc *service.Service) error {
return svc.EnsureBuiltinWorkbenchCatalog()
}
func redactCanvasSharePath(path string) string {
const prefix = "/api/public/canvas-shares/"
if !strings.HasPrefix(path, prefix) {

View File

@@ -5,9 +5,34 @@ import (
"testing"
"time"
"yingce/backend/internal/database"
"yingce/backend/internal/repository"
"yingce/backend/internal/service"
"github.com/gin-gonic/gin"
)
func TestEnsureBuiltinWorkbenchCatalogStartupWiring(t *testing.T) {
db, err := database.Open(database.Config{Driver: "sqlite", DSN: "file:workbench-startup?mode=memory&cache=shared"})
if err != nil {
t.Fatal(err)
}
if err := database.MigrateSchema(db); err != nil {
t.Fatal(err)
}
svc := service.New(repository.New(db), t.TempDir())
if err := ensureBuiltinWorkbenchCatalog(svc); err != nil {
t.Fatal(err)
}
tools, err := repository.New(db).WorkbenchTools("image", true)
if err != nil {
t.Fatal(err)
}
if len(tools) == 0 {
t.Fatal("startup initializer did not publish image workbench tools")
}
}
func TestAllowedOriginWildcard(t *testing.T) {
t.Setenv("CANVAS_CORS_ORIGINS", "*")
context, _ := gin.CreateTestContext(httptest.NewRecorder())