diff options
| author | Horus3 | 2015-02-10 08:33:42 +0100 |
|---|---|---|
| committer | Horus3 | 2015-02-10 08:33:42 +0100 |
| commit | 8c30749613bcf1ce47fff0a6d1a60c34f91f01c4 (patch) | |
| tree | 98354473d929cbc9749f08ea0afdf90993a01480 /app/controllers/db.go | |
| parent | af1f4677c685e8a2c4967ffa0350d314a6543db7 (diff) | |
| download | webmon-8c30749613bcf1ce47fff0a6d1a60c34f91f01c4.tar.gz | |
Basic user control.
Diffstat (limited to 'app/controllers/db.go')
| -rw-r--r-- | app/controllers/db.go | 84 |
1 files changed, 70 insertions, 14 deletions
diff --git a/app/controllers/db.go b/app/controllers/db.go index 9607f24..f6a535e 100644 --- a/app/controllers/db.go +++ b/app/controllers/db.go @@ -4,40 +4,96 @@ import ( "github.com/jinzhu/gorm" _ "github.com/mattn/go-sqlite3" "github.com/revel/revel" + "time" ) type User struct { - Id int64 - Email string - Name string - Password string + Id int64 + Email string `sql:"unique"` + Name string `sql:"unique"` + Password string + Confirmed bool + Alerts []Alert + CreatedAt time.Time + DeletedAt time.Time + UpdatedAt time.Time +} + +// Multiple accounts which are alerted +type Alert struct { + Id int64 + UserId int64 + Email string + CreatedAt time.Time + DeletedAt time.Time + UpdatedAt time.Time } type Job struct { + Id int64 + UserId int64 + Name string + Url string + Versions []Version + Diff string + DiffLen int64 + CreatedAt time.Time + DeletedAt time.Time + UpdatedAt time.Time } -var DB *gorm.DB +// Save history version of jobs +type Version struct { + Id int64 + JobId int64 + Content string + Hash string + CreatedAt time.Time + DeletedAt time.Time + UpdatedAt time.Time +} -func DBInit() *sql.DB { +var db = DBInit() + +func DBInit() *gorm.DB { // Open database handler - db, err := gorm.Open("sqlite3", "/tmp/gorm.db") + db, err := gorm.Open(revel.Config.String("db.driver"), revel.Config.String("db.spec")) + + // Set database logging to TRACE + db.LogMode(true) + db.SetLogger(gorm.Logger{revel.TRACE}) // Ping database to check if up if err = db.DB().Ping(); err != nil { revel.ERROR.Panicf("Failed to init database. %s \n", err) } + defer db.Close() // Set Pool connections db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100) - // Create tables defined as struct - db.CreateTable(&User{}) - db.CreateTable(&Job{}) + // Create tables which are defined as struct + db.Debug().CreateTable(&User{}) + db.Debug().CreateTable(&Alert{}) + db.Debug().CreateTable(&Job{}) + db.Debug().CreateTable(&Version{}) + + // Automigration + db.Debug().AutoMigrate(&User{}, &Job{}, &Version{}, &Alert{}) + + // Add index on email and name to enforce uniqueness + db.Debug().Model(&User{}).AddUniqueIndex("idx_user_email", "email") + db.Debug().Model(&User{}).AddUniqueIndex("idx_user_name", "name") + + // Unique index on alert to ensure every user can specify not multiple equally alerts + db.Debug().Model(&Alert{}).AddUniqueIndex("idx_alert_email_userid", "email", "user_id") + + // Unique index to ensure every user can have only one job with the same name + db.Debug().Model(&Job{}).AddUniqueIndex("idx_job_name_userid", "name", "user_id") - // Add index on email - db.Model(&User{}).AddIndex("idx_user_email", "email") + // Makes hash unique + // db.Debug().Model(&Version{}).AddUniqueIndex("idx_version_hash", "hash") - // Make database handler public - DB = db + return db } |
