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.DBErr("Failed to delete a tag", 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.DBErr("Failed to create a tag", 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("The %d line contains an empty match expression", 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.DBErr("Failed to create a tag", err)
}
return serializer.Response{
Data: hashid.HashID(id, hashid.TagID),
}
}