You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudreve/service/explorer/tag.go

89 lines
2.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package explorer
import (
"fmt"
"strings"
model "github.com/cloudreve/Cloudreve/v3/models"
"github.com/cloudreve/Cloudreve/v3/pkg/hashid"
"github.com/cloudreve/Cloudreve/v3/pkg/serializer"
"github.com/gin-gonic/gin"
)
// FilterTagCreateService 文件分类标签创建服务
type FilterTagCreateService struct {
Expression string `json:"expression" binding:"required,min=1,max=65535"`
Icon string `json:"icon" binding:"required,min=1,max=255"`
Name string `json:"name" binding:"required,min=1,max=255"`
Color string `json:"color" binding:"hexcolor|rgb|rgba|hsl"`
}
// LinkTagCreateService 目录快捷方式标签创建服务
type LinkTagCreateService struct {
Path string `json:"path" binding:"required,min=1,max=65535"`
Name string `json:"name" binding:"required,min=1,max=255"`
}
// TagService 标签服务
type TagService struct {
}
// Delete 删除标签
func (service *TagService) Delete(c *gin.Context, user *model.User) serializer.Response {
id, _ := c.Get("object_id")
if err := model.DeleteTagByID(id.(uint), user.ID); err != nil {
return serializer.Err(serializer.CodeDBError, "删除失败", err)
}
return serializer.Response{}
}
// Create 创建标签
func (service *LinkTagCreateService) Create(c *gin.Context, user *model.User) serializer.Response {
// 创建标签
tag := model.Tag{
Name: service.Name,
Icon: "FolderHeartOutline",
Type: model.DirectoryLinkType,
Expression: service.Path,
UserID: user.ID,
}
id, err := tag.Create()
if err != nil {
return serializer.Err(serializer.CodeDBError, "标签创建失败", err)
}
return serializer.Response{
Data: hashid.HashID(id, hashid.TagID),
}
}
// Create 创建标签
func (service *FilterTagCreateService) Create(c *gin.Context, user *model.User) serializer.Response {
// 分割表达式将通配符转换为SQL内的%
expressions := strings.Split(service.Expression, "\n")
for i := 0; i < len(expressions); i++ {
expressions[i] = strings.ReplaceAll(expressions[i], "*", "%")
if expressions[i] == "" {
return serializer.ParamErr(fmt.Sprintf("第 %d 行包含空的匹配表达式", i+1), nil)
}
}
// 创建标签
tag := model.Tag{
Name: service.Name,
Icon: service.Icon,
Color: service.Color,
Type: model.FileTagType,
Expression: strings.Join(expressions, "\n"),
UserID: user.ID,
}
id, err := tag.Create()
if err != nil {
return serializer.Err(serializer.CodeDBError, "标签创建失败", err)
}
return serializer.Response{
Data: hashid.HashID(id, hashid.TagID),
}
}