diff options
Diffstat (limited to 'app/controllers/db.go')
| -rw-r--r-- | app/controllers/db.go | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/app/controllers/db.go b/app/controllers/db.go new file mode 100644 index 0000000..0f50968 --- /dev/null +++ b/app/controllers/db.go @@ -0,0 +1,92 @@ +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 +} +*/ |
