package controllers import ( "github.com/jinzhu/gorm" _ "github.com/mattn/go-sqlite3" "github.com/revel/revel" "time" ) type User struct { Id int64 Name string Email string Password string Domains []Domain CreatedAt time.Time UpdatedAt time.Time DeletedAt time.Time } type Domain struct { Id int64 UserId int64 Domain string CreatedAt time.Time UpdatedAt time.Time DeletedAt time.Time } type GormController struct { *revel.Controller Db *gorm.DB } var Gdb gorm.DB func InitDB() { Gdb, err := gorm.Open(revel.Config.StringDefault("db.driver", "sqlite3"), revel.Config.StringDefault("db.spec", "email.db")) if err != nil { revel.ERROR.Printf("%s", err) } Gdb.LogMode(true) Gdb.SetLogger(gorm.Logger{revel.TRACE}) user := User{} Gdb.AutoMigrate(&user) Gdb.Model(&user).AddUniqueIndex("idx_user_password", "password") Gdb.Model(&user).AddUniqueIndex("idx_user_email", "email") domain := Domain{} Gdb.AutoMigrate(&domain) Gdb.Model(&domain).AddUniqueIndex("idx_domain_name", "domain") } /* // transactions // This method fills the c.Txn before each transaction func (c *GormController) Begin() revel.Result { txn := Gdb.Begin() if txn.Error != nil { panic(txn.Error) } c.Txn = txn return nil } // This method clears the c.Txn after each transaction func (c *GormController) Commit() revel.Result { if c.Txn == nil { return nil } c.Txn.Commit() if err := c.Txn.Error; err != nil && err != sql.ErrTxDone { panic(err) } c.Txn = nil return nil } // This method clears the c.Txn after each transaction, too func (c *GormController) Rollback() revel.Result { if c.Txn == nil { return nil } c.Txn.Rollback() if err := c.Txn.Error; err != nil && err != sql.ErrTxDone { panic(err) } c.Txn = nil return nil } */