mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-26 09:34:57 +08:00
Feat: list/search/update/delete shares
This commit is contained in:
@@ -20,6 +20,52 @@ type ShareCreateService struct {
|
||||
Preview bool `json:"preview"`
|
||||
}
|
||||
|
||||
// ShareUpdateService 分享更新服务
|
||||
type ShareUpdateService struct {
|
||||
Prop string `json:"prop" binding:"required,eq=password|eq=preview_enabled"`
|
||||
Value string `json:"value" binding:"max=255"`
|
||||
}
|
||||
|
||||
// Delete 删除分享
|
||||
func (service *Service) Delete(c *gin.Context, user *model.User) serializer.Response {
|
||||
share := model.GetShareByHashID(c.Param("id"))
|
||||
if share == nil || share.Creator().ID != user.ID {
|
||||
return serializer.Err(serializer.CodeNotFound, "分享不存在", nil)
|
||||
}
|
||||
|
||||
if err := share.Delete(); err != nil {
|
||||
return serializer.Err(serializer.CodeDBError, "分享删除失败", err)
|
||||
}
|
||||
|
||||
return serializer.Response{}
|
||||
}
|
||||
|
||||
// Update 更新分享属性
|
||||
func (service *ShareUpdateService) Update(c *gin.Context) serializer.Response {
|
||||
shareCtx, _ := c.Get("share")
|
||||
share := shareCtx.(*model.Share)
|
||||
|
||||
switch service.Prop {
|
||||
case "password":
|
||||
err := share.Update(map[string]interface{}{"password": service.Value})
|
||||
if err != nil {
|
||||
return serializer.Err(serializer.CodeDBError, "无法更新分享密码", err)
|
||||
}
|
||||
case "preview_enabled":
|
||||
value := service.Value == "true"
|
||||
err := share.Update(map[string]interface{}{"preview_enabled": value})
|
||||
if err != nil {
|
||||
return serializer.Err(serializer.CodeDBError, "无法更新分享属性", err)
|
||||
}
|
||||
return serializer.Response{
|
||||
Data: value,
|
||||
}
|
||||
}
|
||||
return serializer.Response{
|
||||
Data: service.Value,
|
||||
}
|
||||
}
|
||||
|
||||
// Create 创建新分享
|
||||
func (service *ShareCreateService) Create(c *gin.Context) serializer.Response {
|
||||
userCtx, _ := c.Get("user")
|
||||
@@ -32,8 +78,9 @@ func (service *ShareCreateService) Create(c *gin.Context) serializer.Response {
|
||||
|
||||
// 源对象真实ID
|
||||
var (
|
||||
sourceID uint
|
||||
err error
|
||||
sourceID uint
|
||||
sourceName string
|
||||
err error
|
||||
)
|
||||
if service.IsDir {
|
||||
sourceID, err = hashid.DecodeHashID(service.SourceID, hashid.FolderID)
|
||||
@@ -50,11 +97,15 @@ func (service *ShareCreateService) Create(c *gin.Context) serializer.Response {
|
||||
folder, err := model.GetFoldersByIDs([]uint{sourceID}, user.ID)
|
||||
if err != nil || len(folder) == 0 {
|
||||
exist = false
|
||||
} else {
|
||||
sourceName = folder[0].Name
|
||||
}
|
||||
} else {
|
||||
file, err := model.GetFilesByIDs([]uint{sourceID}, user.ID)
|
||||
if err != nil || len(file) == 0 {
|
||||
exist = false
|
||||
} else {
|
||||
sourceName = file[0].Name
|
||||
}
|
||||
}
|
||||
if !exist {
|
||||
@@ -69,6 +120,7 @@ func (service *ShareCreateService) Create(c *gin.Context) serializer.Response {
|
||||
Score: service.Score,
|
||||
RemainDownloads: -1,
|
||||
PreviewEnabled: service.Preview,
|
||||
SourceName: sourceName,
|
||||
}
|
||||
|
||||
// 如果开启了自动过期
|
||||
|
||||
@@ -33,6 +33,40 @@ type ArchiveService struct {
|
||||
Dirs []string `json:"dirs" binding:"exists"`
|
||||
}
|
||||
|
||||
// ShareListService 列出分享
|
||||
type ShareListService struct {
|
||||
Page uint `form:"page" binding:"required,min=1"`
|
||||
OrderBy string `form:"order_by" binding:"required,eq=created_at|eq=downloads|eq=views"`
|
||||
Order string `form:"order" binding:"required,eq=DESC|eq=ASC"`
|
||||
Keywords string `form:"keywords"`
|
||||
}
|
||||
|
||||
// Search 搜索公共分享
|
||||
func (service *ShareListService) Search(c *gin.Context) serializer.Response {
|
||||
// 列出分享
|
||||
shares, total := model.SearchShares(int(service.Page), 18, service.OrderBy+" "+
|
||||
service.Order, service.Keywords)
|
||||
// 列出分享对应的文件
|
||||
for i := 0; i < len(shares); i++ {
|
||||
shares[i].Source()
|
||||
}
|
||||
|
||||
return serializer.BuildShareList(shares, total)
|
||||
}
|
||||
|
||||
// List 列出用户分享
|
||||
func (service *ShareListService) List(c *gin.Context, user *model.User) serializer.Response {
|
||||
// 列出分享
|
||||
shares, total := model.ListShares(user.ID, int(service.Page), 18, service.OrderBy+" "+
|
||||
service.Order, false)
|
||||
// 列出分享对应的文件
|
||||
for i := 0; i < len(shares); i++ {
|
||||
shares[i].Source()
|
||||
}
|
||||
|
||||
return serializer.BuildShareList(shares, total)
|
||||
}
|
||||
|
||||
// Get 获取分享内容
|
||||
func (service *ShareGetService) Get(c *gin.Context) serializer.Response {
|
||||
shareCtx, _ := c.Get("share")
|
||||
|
||||
Reference in New Issue
Block a user