feat(assets): 文件夹主题 - 新增多主题皮肤并同步主线

This commit is contained in:
echoD886 committed 2026-08-20 16:33:51 +08:00
commit d5895a07a6
93 files changed
+4081 -1143

No files matched your search

@@ -15,12 +15,14 @@ type CreateProjectAssetFolderRequest struct {
Name string `json:"name"`
ParentID string `json:"parentId"`
Style string `json:"style"`
Theme string `json:"theme"`
}
type UpdateProjectAssetFolderRequest struct {
Name *string `json:"name"`
ParentID *string `json:"parentId"`
Style *string `json:"style"`
Theme *string `json:"theme"`
}
func (s *Service) ProjectAssetFolders(userID string, projectID string) ([]model.ProjectAssetFolder, error) {
@@ -55,7 +57,11 @@ func (s *Service) CreateProjectAssetFolder(userID string, projectID string, req
if err != nil {
return model.ProjectAssetFolder{}, err
}
folder := model.ProjectAssetFolder{ID: newID(), ProjectID: projectID, ParentID: parentID, Name: name, NameKey: projectAssetFolderNameKey(name), Style: style, Position: position, CreatedAt: now, UpdatedAt: now}
theme, err := validateProjectAssetFolderTheme(req.Theme)
if err != nil {
return model.ProjectAssetFolder{}, err
}
folder := model.ProjectAssetFolder{ID: newID(), ProjectID: projectID, ParentID: parentID, Name: name, NameKey: projectAssetFolderNameKey(name), Style: style, Theme: theme, Position: position, CreatedAt: now, UpdatedAt: now}
if err := s.repo.CreateProjectAssetFolder(&folder); err != nil {
if isProjectAssetFolderNameConflict(err) {
return model.ProjectAssetFolder{}, BadAuthRequest("同级目录下已存在同名文件夹")
@@ -102,6 +108,13 @@ func (s *Service) UpdateProjectAssetFolder(userID string, projectID string, fold
}
folder.Style = style
}
if req.Theme != nil {
theme, themeErr := validateProjectAssetFolderTheme(*req.Theme)
if themeErr != nil {
return model.ProjectAssetFolder{}, themeErr
}
folder.Theme = theme
}
if projectAssetFolderNameExists(folders, folder.ParentID, folder.Name, folder.ID) {
return model.ProjectAssetFolder{}, BadAuthRequest("同级目录下已存在同名文件夹")
}
@@ -150,6 +163,19 @@ func validateProjectAssetFolderStyle(value string) (string, error) {
}
}
func validateProjectAssetFolderTheme(value string) (string, error) {
theme := strings.TrimSpace(value)
if theme == "" {
return "aurora", nil
}
switch theme {
case "aurora", "obsidian", "ember", "pearl":
return theme, nil
default:
return "", BadAuthRequest("不支持的文件夹主题")
}
}
func validateProjectAssetFolderName(value string) (string, error) {
name := strings.TrimSpace(value)
if name == "" {