feat(assets): 素材库与画布 - 新增可交互通用文件夹

This commit is contained in:
echoD886
2026-08-20 15:16:45 +08:00
parent 9ee71d4650
commit 935108edca
35 changed files with 2010 additions and 155 deletions

View File

@@ -308,6 +308,85 @@ func RegisterProjectRoutes(r *gin.RouterGroup, svc *service.Service) {
}
ok(c, gin.H{"assets": assets})
})
r.GET("/projects/:id/asset-folders", func(c *gin.Context) {
user, err := currentUser(c, svc)
if err != nil {
failService(c, err)
return
}
folders, err := svc.ProjectAssetFolders(user.ID, c.Param("id"))
if err != nil {
if service.IsProjectNotFound(err) {
fail(c, http.StatusNotFound, err)
return
}
failService(c, err)
return
}
ok(c, gin.H{"folders": folders})
})
r.POST("/projects/:id/asset-folders", 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 service.CreateProjectAssetFolderRequest
if err := c.ShouldBindJSON(&req); err != nil {
fail(c, http.StatusBadRequest, err)
return
}
folder, err := svc.CreateProjectAssetFolder(user.ID, c.Param("id"), req)
if err != nil {
if service.IsProjectNotFound(err) {
fail(c, http.StatusNotFound, err)
return
}
failService(c, err)
return
}
ok(c, gin.H{"folder": folder})
})
r.PATCH("/projects/:id/asset-folders/:folderId", 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 service.UpdateProjectAssetFolderRequest
if err := c.ShouldBindJSON(&req); err != nil {
fail(c, http.StatusBadRequest, err)
return
}
folder, err := svc.UpdateProjectAssetFolder(user.ID, c.Param("id"), c.Param("folderId"), req)
if err != nil {
if service.IsProjectNotFound(err) {
fail(c, http.StatusNotFound, err)
return
}
failService(c, err)
return
}
ok(c, gin.H{"folder": folder})
})
r.DELETE("/projects/:id/asset-folders/:folderId", func(c *gin.Context) {
user, err := currentUser(c, svc)
if err != nil {
failService(c, err)
return
}
if err := svc.DeleteProjectAssetFolder(user.ID, c.Param("id"), c.Param("folderId")); err != nil {
if service.IsProjectNotFound(err) {
fail(c, http.StatusNotFound, err)
return
}
failService(c, err)
return
}
ok(c, gin.H{"id": c.Param("folderId")})
})
r.POST("/projects/:id/characters", func(c *gin.Context) {
user, err := currentUser(c, svc)
if err != nil {
@@ -448,12 +527,12 @@ func RegisterProjectRoutes(r *gin.RouterGroup, svc *service.Service) {
return
}
c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, 64<<10)
var req service.UpdateProjectAssetCategoryRequest
var req service.UpdateProjectAssetRequest
if err := c.ShouldBindJSON(&req); err != nil {
fail(c, http.StatusBadRequest, err)
return
}
asset, err := svc.UpdateProjectAssetCategory(user.ID, c.Param("id"), c.Param("assetId"), req)
asset, err := svc.UpdateProjectAsset(user.ID, c.Param("id"), c.Param("assetId"), req)
if err != nil {
failService(c, err)
return