package models import ( "errors" "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" ) const ( PlatformX64 = "amd64" PlatformArm = "arm" PlatformNvidia = "nvidia" ) var db *gorm.DB // Init creates a connection to mysql database and // migrates any new models func Init() { var err error db, err = gorm.Open("sqlite3", "./version.db") if err != nil { fmt.Println("Db Init failed", err) return; } else { fmt.Println("Db Init ok", err) } db.LogMode(true) db.AutoMigrate(&X64Programs{}, &ArmPrograms{}, &NvidiaPrograms{}, &DistFile{}) } //GetDB ... func GetDB() *gorm.DB { return db } func CloseDB() { _ = db.Close() } func IsValidPlatform(arch string) bool { switch arch { case PlatformX64: return true case PlatformArm: return true case PlatformNvidia: return true default: return false } } func FindAllPrograms(plat string) ([]Program, error) { var model PlatformModel switch plat { case PlatformX64: model = &X64Programs{} case PlatformArm: model = &ArmPrograms{} case PlatformNvidia: model = &NvidiaPrograms{} default: return nil, errors.New("unknown platform") } return model.FindAll() } func UpgradePrograms(plat string, programs []*Program) error { var model PlatformModel switch plat { case PlatformX64: model = &X64Programs{} //var m X64Programs //tableName = m.TableName() case PlatformArm: //var m ArmPrograms //tableName = m.TableName() model = &ArmPrograms{} case PlatformNvidia: //var m NvidiaPrograms //tableName = m.TableName() model = &NvidiaPrograms{} default: return errors.New("unknown platform") } tx := db.Begin() if err := tx.Delete(model).Error; nil != err { tx.Rollback() return err } for _, p := range programs { err := model.Insert(tx, p) if nil != err { tx.Rollback() return err } } tx.Commit() return nil }