Gorm has a FirstOrCreate method and a FirstOrInit but how to check afterwards if the record was actually created? I like to create a record if it d
func CreateOrUpdate(db *gorm.DB, model interface{}, where interface{}, update interface{}) (interface{}, error) {
var result interface{}
err := db.Model(model).Where(where).First(result).Error
if err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
return nil, err
} else {
//insert
if err = db.Model(model).Create(update).Error; err != nil {
return nil, err
}
}
}
//not update some field
reflect.ValueOf(update).Elem().FieldByName("someField").SetInt(0)
if err = db.Model(model).Where(where).Updates(update).Error; err != nil {
return nil, err
}
return update, nil
}