Skip to content

Commit

Permalink
feat: support delete the folder (#37)
Browse files Browse the repository at this point in the history
  • Loading branch information
XiangYu0777 committed Sep 20, 2020
1 parent 2f31158 commit a1e687e
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 3 deletions.
2 changes: 1 addition & 1 deletion cmd/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func serverRun(conf *config.Config) {
ginutil.SetupResource(apiRouter,
rest.NewUserResource(),
rest.NewFileResource(conf.Provider),
rest.NewFolderResource(),
rest.NewFolderResource(conf.Provider),
rest.NewShareResource(),
)

Expand Down
61 changes: 59 additions & 2 deletions rest/folders.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package rest

import (
"fmt"
"github.com/saltbo/zpan/disk"
"log"

"github.com/gin-gonic/gin"
"github.com/saltbo/gopkg/ginutil"
Expand All @@ -13,16 +15,26 @@ import (
)

type FolderResource struct {
provider disk.Provider
}

func NewFolderResource() *FolderResource {
return &FolderResource{}
func NewFolderResource(conf disk.Config) ginutil.Resource {
//return &FolderResource{}
provider, err := disk.New(conf)
if err != nil {
log.Fatalln(err)
}

return &FolderResource{
provider: provider,
}
}

func (rs *FolderResource) Register(router *gin.RouterGroup) {
router.GET("/folders", rs.findAll)
router.POST("/folders", rs.create)
router.PATCH("/folders/:alias", rs.rename)
router.DELETE("/folders/:alias", rs.delete)
}

func (rs *FolderResource) findAll(c *gin.Context) {
Expand Down Expand Up @@ -98,3 +110,48 @@ func (rs *FolderResource) rename(c *gin.Context) {

ginutil.JSON(c)
}

func(rs *FolderResource) DelDir(src *model.Matter, c *gin.Context) error {
// if not directory return
if !src.IsDir() {
return fmt.Errorf("the file is not directory")
}
// traverse the directory
var files []model.Matter
if err := gormutil.DB().Where("parent=?", src.Name+"/").Find(&files).Error; err != nil {
return err
}

var objectString []string
for _, v := range files {
if v.IsDir() {
rs.DelDir(&v, c)
} else {
objectString = append(objectString, v.Object)
}
}
// if the dir is empty return
if len(objectString) > 0 {
if err := rs.provider.ObjectsDelete(objectString); err != nil {
return err
}
}
gormutil.DB().Delete(model.Matter{}, "parent=? or name=?", src.Name+"/", src.Name)

return nil
}

func (rs *FolderResource) delete(c *gin.Context) {
user := userGet(c)

file, err := service.UserFileGet(user.Id, c.Param("alias"))
if err != nil {
ginutil.JSONBadRequest(c, err)
return
}

if err := rs.DelDir(file, c); err != nil {
ginutil.JSONServerError(c, err)
}
ginutil.JSON(c)
}

0 comments on commit a1e687e

Please sign in to comment.