From 304680603d0bc48f085e0aac0f5f582aa27dfedf Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Thu, 4 Jul 2019 10:34:54 +0200 Subject: [PATCH] implement DELETE endpoint for files, cleanup --- common/utilities.go | 16 ------ routes/file/fileMethods.go | 108 +++++++++++-------------------------- routes/file/file_test.go | 4 +- 3 files changed, 33 insertions(+), 95 deletions(-) diff --git a/common/utilities.go b/common/utilities.go index 36bb0f2..68fe484 100644 --- a/common/utilities.go +++ b/common/utilities.go @@ -6,7 +6,6 @@ import ( "fmt" "net/http" "net/http/httptest" - "strconv" "testing" "github.com/gin-gonic/gin" @@ -35,21 +34,6 @@ func ProvideErrorResponse(c *gin.Context, err error) bool { return false // No error } -func GetFileID(c *gin.Context) (int, error) { - - fileID, err := strconv.Atoi(c.Param("fileID")) - - if err != nil { - errormsg := fmt.Sprintf("Bad request. No or incorrect format of file ID") - c.JSON(http.StatusBadRequest, gin.H{ - "error": errormsg, - }) - return -1, err - } else { - return fileID, err - } -} - func TestEndpoint(t *testing.T, router *gin.Engine, token string, url string, method string, body []byte, expected_code int, expected_response string) { w := httptest.NewRecorder() diff --git a/routes/file/fileMethods.go b/routes/file/fileMethods.go index 3cf3ffa..bdaac0e 100644 --- a/routes/file/fileMethods.go +++ b/routes/file/fileMethods.go @@ -104,12 +104,6 @@ func (f *File) register(fileHeader *multipart.FileHeader, objectType string, obj f.FileData, err = ioutil.ReadAll(fileContent) defer fileContent.Close() - // Save file to local disc (NOT DB!) - //err = f.modifyFileOnDisc(fileHeader, true) - //if err != nil { - // return fmt.Errorf("File could not be saved/ modified on disk: ", err.Error()) - //} - // Add File object with parameters to DB err = f.save() if err != nil { @@ -146,11 +140,6 @@ func (f *File) update(fileHeader *multipart.FileHeader) error { fmt.Println("File content: ", string(fileData)) defer fileContent.Close() - //err := f.modifyFileOnDisc(fileHeader, false) - //if err != nil { - // return err - //} - db := common.GetDB() err = db.Model(f).Updates(map[string]interface{}{"Size": fileHeader.Size, "FileData": fileData, @@ -159,70 +148,35 @@ func (f *File) update(fileHeader *multipart.FileHeader) error { } func (f *File) delete() error { - return nil + + db := common.GetDB() + + if f.WidgetID > 0 { + // remove association between file and widget + var w widget.Widget + err := w.ByID(f.WidgetID) + if err != nil { + return err + } + err = db.Model(&w).Association("Files").Delete(f).Error + if err != nil { + return err + } + } else { + // remove association between file and simulation model + var m simulationmodel.SimulationModel + err := m.ByID(f.SimulationModelID) + if err != nil { + return err + } + err = db.Model(&m).Association("Files").Delete(f).Error + if err != nil { + return err + } + } + + // delete file from DB + err := db.Delete(f).Error + + return err } - -//func (f *File) modifyFileOnDisc(fileHeader *multipart.FileHeader, createFile bool) error { -// -// //filesavepath := filepath.Join(foldername, filename) -// var err error -// -// if createFile { -// // Ensure folder with name foldername exists -// err = os.MkdirAll(f.Path, os.ModePerm) -// } else { -// // test if file exists -// _, err = os.Stat(f.Path) -// } -// if err != nil { -// return err -// } -// -// var open_options int -// if createFile { -// // create file it not exists, file MUST not exist -// open_options = os.O_RDWR | os.O_CREATE | os.O_EXCL -// } else { -// open_options = os.O_RDWR -// } -// -// fileTarget, err := os.OpenFile(f.Path, open_options, 0666) -// if err != nil { -// return err -// } -// defer fileTarget.Close() -// -// // Save file to target path -// uploadedFile, err := fileHeader.Open() -// if err != nil { -// return err -// } -// defer uploadedFile.Close() -// -// var uploadContent = make([]byte, f.Size) -// for { -// -// n, err := uploadedFile.Read(uploadContent) -// if err != nil && err != io.EOF { -// return err -// } -// -// if n == 0 { -// break -// } -// -// _, err = fileTarget.Write(uploadContent[:n]) -// if err != nil { -// return err -// } -// -// } -// return err -//} - -//func getFolderName(objectType string, objectID uint) string { -// base_foldername := "files/" -// -// foldername := base_foldername + objectType + "_" + strconv.Itoa(int(objectID)) + "/" -// return foldername -//} diff --git a/routes/file/file_test.go b/routes/file/file_test.go index 7448ab1..7fa7361 100644 --- a/routes/file/file_test.go +++ b/routes/file/file_test.go @@ -198,8 +198,8 @@ func TestSignalEndpoints(t *testing.T) { common.TestEndpoint(t, router, token, "/api/files/5", "GET", nil, 200, filecontent_update) // test DELETE files/:fileID - //common.TestEndpoint(t, router, token, "/api/files/3", "DELETE", nil, 200, string(msgOKjson)) - //common.TestEndpoint(t, router, token, "/api/files?originID=1&originType=widget", "GET", nil, 200, string(msgFilesjson)) + common.TestEndpoint(t, router, token, "/api/files/5", "DELETE", nil, 200, string(msgOKjson)) + common.TestEndpoint(t, router, token, "/api/files?objectID=1&objectType=widget", "GET", nil, 200, string(msgFilesjson)) // TODO add testing for other return codes