summaryrefslogtreecommitdiff
path: root/app/db.go
blob: 16c6c98298d233201433100b117106950b32e348 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package controllers

import (
	"github.com/jinzhu/gorm"
	_ "github.com/mattn/go-sqlite3"
	"log"
	"time"
)

var Db, dberr = gorm.Open(os.Getenv("WEBMON_DB_DRIVER"), os.Getenv("WEBMON_DB_CREDENTIALS"))

func InitDB() {
	if dberr != nil {
		log.Panic(dberr)
	}
	logMode := os.Getenv("WEBMON_DB_LOG")
	if logMode == "true" {
		Db.LogMode(true)
	}
	if err := Db.DB().Ping(); err != nil {
		log.Panic(err)
	}

	db.Debug().CreateTable(&User{})
	db.Debug().CreateTable(&Alert{})
	db.Debug().CreateTable(&Job{})
	db.Debug().CreateTable(&Version{})

	db.Debug().AutoMigrate(&User{}, &Job{}, &Version{}, &Alert{})

	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")
}