github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/service/explorer/tag.go (about) 1 package explorer 2 3 import ( 4 "fmt" 5 "strings" 6 7 model "github.com/cloudreve/Cloudreve/v3/models" 8 "github.com/cloudreve/Cloudreve/v3/pkg/hashid" 9 "github.com/cloudreve/Cloudreve/v3/pkg/serializer" 10 "github.com/gin-gonic/gin" 11 ) 12 13 // FilterTagCreateService 文件分类标签创建服务 14 type FilterTagCreateService struct { 15 Expression string `json:"expression" binding:"required,min=1,max=65535"` 16 Icon string `json:"icon" binding:"required,min=1,max=255"` 17 Name string `json:"name" binding:"required,min=1,max=255"` 18 Color string `json:"color" binding:"hexcolor|rgb|rgba|hsl"` 19 } 20 21 // LinkTagCreateService 目录快捷方式标签创建服务 22 type LinkTagCreateService struct { 23 Path string `json:"path" binding:"required,min=1,max=65535"` 24 Name string `json:"name" binding:"required,min=1,max=255"` 25 } 26 27 // TagService 标签服务 28 type TagService struct { 29 } 30 31 // Delete 删除标签 32 func (service *TagService) Delete(c *gin.Context, user *model.User) serializer.Response { 33 id, _ := c.Get("object_id") 34 if err := model.DeleteTagByID(id.(uint), user.ID); err != nil { 35 return serializer.DBErr("Failed to delete a tag", err) 36 } 37 return serializer.Response{} 38 } 39 40 // Create 创建标签 41 func (service *LinkTagCreateService) Create(c *gin.Context, user *model.User) serializer.Response { 42 // 创建标签 43 tag := model.Tag{ 44 Name: service.Name, 45 Icon: "FolderHeartOutline", 46 Type: model.DirectoryLinkType, 47 Expression: service.Path, 48 UserID: user.ID, 49 } 50 id, err := tag.Create() 51 if err != nil { 52 return serializer.DBErr("Failed to create a tag", err) 53 } 54 55 return serializer.Response{ 56 Data: hashid.HashID(id, hashid.TagID), 57 } 58 } 59 60 // Create 创建标签 61 func (service *FilterTagCreateService) Create(c *gin.Context, user *model.User) serializer.Response { 62 // 分割表达式,将通配符转换为SQL内的% 63 expressions := strings.Split(service.Expression, "\n") 64 for i := 0; i < len(expressions); i++ { 65 expressions[i] = strings.ReplaceAll(expressions[i], "*", "%") 66 if expressions[i] == "" { 67 return serializer.ParamErr(fmt.Sprintf("The %d line contains an empty match expression", i+1), nil) 68 } 69 } 70 71 // 创建标签 72 tag := model.Tag{ 73 Name: service.Name, 74 Icon: service.Icon, 75 Color: service.Color, 76 Type: model.FileTagType, 77 Expression: strings.Join(expressions, "\n"), 78 UserID: user.ID, 79 } 80 id, err := tag.Create() 81 if err != nil { 82 return serializer.DBErr("Failed to create a tag", err) 83 } 84 85 return serializer.Response{ 86 Data: hashid.HashID(id, hashid.TagID), 87 } 88 }