implement DELETE endpoint for files, cleanup

This commit is contained in:
Sonja Happ 2019-07-04 10:34:54 +02:00
parent fc91ebc64c
commit 304680603d
3 changed files with 33 additions and 95 deletions

View file

@ -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()

View file

@ -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
//}

View file

@ -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