Skip to content
Snippets Groups Projects
Commit 69acc9d6 authored by Christian Pointner's avatar Christian Pointner
Browse files

some more error handling fixes

parent 004d20f5
No related branches found
No related tags found
No related merge requests found
...@@ -58,69 +58,76 @@ func (st *Store) GetFile(show string, id uint64) (file *File, err error) { ...@@ -58,69 +58,76 @@ func (st *Store) GetFile(show string, id uint64) (file *File, err error) {
return 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() tx := st.db.Begin()
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
tx.Rollback() 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 { if err = tx.Error; err != nil {
return nil, err return
} }
// make sure the file exists and actually belongs to <show> since permissions are enforced // make sure the file exists and actually belongs to <show> since permissions are enforced
// based on show membership // 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() tx.Rollback()
return nil, err return
} }
file.ID = id file.ID = id
file.ShowName = show file.ShowName = show
err := tx.Save(&file).Error if err = tx.Save(&file).Error; err != nil {
if err != nil {
tx.Rollback() 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() tx := st.db.Begin()
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
tx.Rollback() 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 { if err = tx.Error; err != nil {
return nil, err return
} }
file := &File{ID: id} file = &File{ID: id}
// make sure the file exists and actually belongs to <show> since permissions are enforced // make sure the file exists and actually belongs to <show> since permissions are enforced
// based on show membership // 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() tx.Rollback()
return nil, err return
} }
if file.Source.Import.State != ImportDone { if file.Source.Import.State != ImportDone {
tx.Rollback() tx.Rollback()
return nil, ErrFileImportNotDone err = ErrFileImportNotDone
return
} }
fields, err := st.metadataFieldsToFile(show, id, metadata) var fields map[string]interface{}
if err != nil { if fields, err = st.metadataFieldsToFile(show, id, metadata); err != nil {
tx.Rollback() 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() 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) { func (st *Store) updateFile(show string, id uint64, values ...interface{}) (file *File, err error) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment