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