github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/service/admin/share.go (about) 1 package admin 2 3 import ( 4 "strings" 5 6 model "github.com/cloudreve/Cloudreve/v3/models" 7 "github.com/cloudreve/Cloudreve/v3/pkg/hashid" 8 "github.com/cloudreve/Cloudreve/v3/pkg/serializer" 9 "github.com/gin-gonic/gin" 10 ) 11 12 // ShareBatchService 分享批量操作服务 13 type ShareBatchService struct { 14 ID []uint `json:"id" binding:"min=1"` 15 } 16 17 // Delete 删除文件 18 func (service *ShareBatchService) Delete(c *gin.Context) serializer.Response { 19 if err := model.DB.Where("id in (?)", service.ID).Delete(&model.Share{}).Error; err != nil { 20 return serializer.DBErr("Failed to delete share record", err) 21 } 22 return serializer.Response{} 23 } 24 25 // Shares 列出分享 26 func (service *AdminListService) Shares() serializer.Response { 27 var res []model.Share 28 total := 0 29 30 tx := model.DB.Model(&model.Share{}) 31 if service.OrderBy != "" { 32 tx = tx.Order(service.OrderBy) 33 } 34 35 for k, v := range service.Conditions { 36 tx = tx.Where(k+" = ?", v) 37 } 38 39 if len(service.Searches) > 0 { 40 search := "" 41 for k, v := range service.Searches { 42 search += k + " like '%" + v + "%' OR " 43 } 44 search = strings.TrimSuffix(search, " OR ") 45 tx = tx.Where(search) 46 } 47 48 // 计算总数用于分页 49 tx.Count(&total) 50 51 // 查询记录 52 tx.Limit(service.PageSize).Offset((service.Page - 1) * service.PageSize).Find(&res) 53 54 // 查询对应用户,同时计算HashID 55 users := make(map[uint]model.User) 56 hashIDs := make(map[uint]string, len(res)) 57 for _, file := range res { 58 users[file.UserID] = model.User{} 59 hashIDs[file.ID] = hashid.HashID(file.ID, hashid.ShareID) 60 } 61 62 userIDs := make([]uint, 0, len(users)) 63 for k := range users { 64 userIDs = append(userIDs, k) 65 } 66 67 var userList []model.User 68 model.DB.Where("id in (?)", userIDs).Find(&userList) 69 70 for _, v := range userList { 71 users[v.ID] = v 72 } 73 74 return serializer.Response{Data: map[string]interface{}{ 75 "total": total, 76 "items": res, 77 "users": users, 78 "ids": hashIDs, 79 }} 80 }