github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/web/file.go (about) 1 package web 2 3 import ( 4 "net/http" 5 "sync" 6 7 "github.com/ngocphuongnb/tetua/app/entities" 8 "github.com/ngocphuongnb/tetua/app/fs" 9 "github.com/ngocphuongnb/tetua/app/repositories" 10 "github.com/ngocphuongnb/tetua/app/server" 11 "github.com/ngocphuongnb/tetua/app/utils" 12 "github.com/ngocphuongnb/tetua/views" 13 ) 14 15 func FileList(c server.Context) error { 16 paginate, err := repositories.File.Paginate(c.Context(), &entities.FileFilter{ 17 UserIDs: []int{c.User().ID}, 18 Filter: &entities.Filter{ 19 BaseUrl: utils.Url("/files"), 20 Page: c.QueryInt("page"), 21 Limit: 12, 22 IgnoreUrlParams: []string{"user"}, 23 }, 24 }) 25 26 if err != nil { 27 c.Logger().Error(err) 28 return c.Status(http.StatusInternalServerError).Render(views.Error("Something went wrong")) 29 } 30 31 return c.Render(views.FileList(paginate)) 32 } 33 34 func FileDelete(c server.Context) (err error) { 35 var wg sync.WaitGroup 36 var err1, err2 error 37 wg.Add(2) 38 39 go func(wg *sync.WaitGroup) { 40 defer wg.Done() 41 err1 = repositories.File.DeleteByID(c.Context(), c.ParamInt("id")) 42 }(&wg) 43 44 go func(wg *sync.WaitGroup) { 45 defer wg.Done() 46 if file, ok := c.Locals("file").(*entities.File); ok && file != nil { 47 err2 = file.Delete(c.Context()) 48 } 49 }(&wg) 50 51 wg.Wait() 52 53 if err := utils.FirstError(err1, err2); err != nil { 54 c.Logger().Error(err) 55 return c.Status(http.StatusBadRequest).Json(&entities.Message{ 56 Type: "error", 57 Message: "Error deleting file", 58 }) 59 } 60 61 return c.Status(http.StatusOK).Json(&entities.Message{ 62 Type: "success", 63 Message: "File deleted", 64 }) 65 } 66 67 func Upload(c server.Context) error { 68 if uploadFile, err := c.File("file"); err == nil { 69 if uploadedFile, err := fs.Disk().PutMultipart(c.Context(), uploadFile); err != nil { 70 c.Logger().Error(err) 71 } else { 72 f, err := repositories.File.Create(c.Context(), &entities.File{ 73 Disk: uploadedFile.Disk, 74 Path: uploadedFile.Path, 75 Type: uploadedFile.Type, 76 Size: uploadedFile.Size, 77 UserID: c.User().ID, 78 }) 79 80 if err != nil { 81 c.Logger().Error(err) 82 return c.Status(http.StatusInternalServerError).Json(entities.Map{ 83 "error": "Error saving file", 84 }) 85 } 86 87 return c.Json(entities.Map{ 88 "size": f.Size, 89 "type": f.Type, 90 "url": f.Url(), 91 }) 92 } 93 } else { 94 c.Logger().Error(err) 95 } 96 97 return c.Status(http.StatusInternalServerError).Json(entities.Map{ 98 "error": "Error saving file", 99 }) 100 }