fix(canvas): 资源引用 - 校验递归素材并修复断链

This commit is contained in:
ddCat
2026-09-24 00:04:43 +08:00
parent f98184519d
commit 5b38272654
24 changed files with 697 additions and 218 deletions

View File

@@ -67,7 +67,14 @@ func writeAppError(c *gin.Context, appErr *service.AppError) {
}
logHandlerError(c, appErr.Status, diagnosticErr)
}
writeFailure(c, appErr.Status, code, reason, message)
body := gin.H{"code": code, "data": nil, "msg": message}
if reason != "" {
body["reason"] = reason
}
if len(appErr.Details) > 0 {
body["details"] = appErr.Details
}
c.JSON(appErr.Status, body)
}
// failInternal 保留真实 HTTP 状态,但绝不把未分类错误原文写入响应。

View File

@@ -606,7 +606,8 @@ func RegisterUserDataRoutes(r *gin.RouterGroup, svc *service.Service) {
}
c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, 5<<20)
var req struct {
Project json.RawMessage `json:"project"`
Project json.RawMessage `json:"project"`
RepairMissingResources bool `json:"repairMissingResources"`
}
if err := c.ShouldBindJSON(&req); err != nil {
fail(c, http.StatusBadRequest, err)
@@ -629,7 +630,12 @@ func RegisterUserDataRoutes(r *gin.RouterGroup, svc *service.Service) {
if audit.Revision != nil {
baseRevision = *audit.Revision
}
project, err := svc.UpsertUserCanvasProject(user.ID, req.Project)
var project service.UserDataSummary
if req.RepairMissingResources {
project, err = svc.RepairUserCanvasProject(user.ID, req.Project)
} else {
project, err = svc.UpsertUserCanvasProject(user.ID, req.Project)
}
defer func() {
nodesBefore, nodesAfter := -1, len(audit.Nodes)
if project.SaveAudit != nil {