summaryrefslogtreecommitdiff
path: root/app/controllers/db.go
diff options
context:
space:
mode:
authorHorus32015-02-10 08:33:42 +0100
committerHorus32015-02-10 08:33:42 +0100
commit8c30749613bcf1ce47fff0a6d1a60c34f91f01c4 (patch)
tree98354473d929cbc9749f08ea0afdf90993a01480 /app/controllers/db.go
parentaf1f4677c685e8a2c4967ffa0350d314a6543db7 (diff)
downloadwebmon-8c30749613bcf1ce47fff0a6d1a60c34f91f01c4.tar.gz
Basic user control.
Diffstat (limited to 'app/controllers/db.go')
-rw-r--r--app/controllers/db.go84
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
}