From 69acc9d6eebfb6c6ae2eb675d6af7e054b827a99 Mon Sep 17 00:00:00 2001
From: Christian Pointner <equinox@helsinki.at>
Date: Wed, 14 Aug 2019 23:21:05 +0200
Subject: [PATCH] some more error handling fixes

---
 store/files.go | 55 ++++++++++++++++++++++++++++----------------------
 1 file changed, 31 insertions(+), 24 deletions(-)

diff --git a/store/files.go b/store/files.go
index 801b1af..2afd4a7 100644
--- a/store/files.go
+++ b/store/files.go
@@ -58,69 +58,76 @@ func (st *Store) GetFile(show string, id uint64) (file *File, err error) {
 	return
 }
 
-func (st *Store) UpdateFile(show string, id uint64, file File) (*File, error) {
+func (st *Store) UpdateFile(show string, id uint64, file File) (out *File, err error) {
 	tx := st.db.Begin()
 	defer func() {
 		if r := recover(); r != nil {
 			tx.Rollback()
-			// TODO: make sure to return non-nil err !!!
+			if err == nil {
+				err = fmt.Errorf("runtime panic: %+v", r)
+			}
 		}
 	}()
-	if err := tx.Error; err != nil {
-		return nil, err
+	if err = tx.Error; err != nil {
+		return
 	}
 
 	// make sure the file exists and actually belongs to <show> since permissions are enforced
 	// based on show membership
-	if err := tx.Where("show_name = ?", show).First(&File{}, id).Error; err != nil {
+	if err = tx.Where("show_name = ?", show).First(&File{}, id).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
 
 	file.ID = id
 	file.ShowName = show
-	err := tx.Save(&file).Error
-	if err != nil {
+	if err = tx.Save(&file).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
-	return &file, tx.Commit().Error
+	err = tx.Commit().Error
+	out = &file
+	return
 }
 
-func (st *Store) UpdateFileMetadata(show string, id uint64, metadata map[string]string) (*File, error) {
+func (st *Store) UpdateFileMetadata(show string, id uint64, metadata map[string]string) (file *File, err error) {
 	tx := st.db.Begin()
 	defer func() {
 		if r := recover(); r != nil {
 			tx.Rollback()
-			// TODO: make sure to return non-nil err !!!
+			if err == nil {
+				err = fmt.Errorf("runtime panic: %+v", r)
+			}
 		}
 	}()
-	if err := tx.Error; err != nil {
-		return nil, err
+	if err = tx.Error; err != nil {
+		return
 	}
 
-	file := &File{ID: id}
+	file = &File{ID: id}
 	// make sure the file exists and actually belongs to <show> since permissions are enforced
 	// based on show membership
-	if err := tx.Where("show_name = ?", show).First(&file).Error; err != nil {
+	if err = tx.Where("show_name = ?", show).First(&file).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
 	if file.Source.Import.State != ImportDone {
 		tx.Rollback()
-		return nil, ErrFileImportNotDone
+		err = ErrFileImportNotDone
+		return
 	}
 
-	fields, err := st.metadataFieldsToFile(show, id, metadata)
-	if err != nil {
+	var fields map[string]interface{}
+	if fields, err = st.metadataFieldsToFile(show, id, metadata); err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
-	if err := tx.Model(&file).Where("show_name = ?", show).Update(fields).Error; err != nil {
+	if err = tx.Model(&file).Where("show_name = ?", show).Update(fields).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
-	return file, tx.Commit().Error
+	err = tx.Commit().Error
+	return
 }
 
 func (st *Store) updateFile(show string, id uint64, values ...interface{}) (file *File, err error) {
-- 
GitLab