package main import ( "gorm.io/driver/sqlite" "gorm.io/gorm" "log" "os" . "planner/models" ) func bootstrapDatabase() *gorm.DB { fi, err := os.Stat("./db.sqlite") var db *gorm.DB if err != nil { if os.IsNotExist(err) { db, err := gorm.Open(sqlite.Open("./db.sqlite"), &gorm.Config{}) if err != nil { log.Fatal(err) return nil } db.AutoMigrate(&User{}, &Member{}, &Plan{}, &Poll{}, &Vote{}) //var tables = [...]struct { // key string // query string //}{ // {key: "users", query: "CREATE TABLE users(username STRING PRIMARY KEY, password STRING)"}, // {key: "plans", query: "CREATE TABLE plans(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING, owner STRING, FOREIGN KEY(owner) REFERENCES users(username))"}, // {key: "plan_user_relations", query: "CREATE TABLE plan_user_relations(username STRING, plan INTEGER, PRIMARY KEY(username, plan), FOREIGN KEY username REFERENCES user(username), FOREIGN KEY plan REFERENCES plans(id))"}, // {key: "polls", query: "CREATE TABLE polls(id INTEGER PRIMARY KEY AUTOINCREMENT, plan INTEGER, name STRING, options JSON, FOREIGN KEY plan REFERENCES plans(id))"}, // {key: "votes", query: "CREATE TABLE votes(id INTEGER, poll INTEGER, user STRING, value JSON, FOREIGN KEY poll REFERENCES polls(id), FOREIGN KEY user REFERENCES user(username))"}, //} //for _, table := range tables { // _, err = db.Exec(table.query) // if err != nil { // log.Fatal("Failed to create " + table.key + " table") // log.Fatal(err) // return false // } //} return db } else { log.Fatal(err) return nil } } if !fi.Mode().IsRegular() { log.Fatal("File is not regular file") return nil } db, err = gorm.Open(sqlite.Open("./db.sqlite"), &gorm.Config{}) if err != nil { log.Fatal(err) return nil } return db }