From df7b2d4a33acae8164717e4276239f653dcb96d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Tue, 21 May 2019 22:01:14 +0200 Subject: [PATCH] Auto-migrate custom languages. --- main.go | 16 ++++++++++++++++ models/heartbeat.go | 6 +++--- routes/summary.go | 2 -- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index 58f6f7e..a751773 100644 --- a/main.go +++ b/main.go @@ -87,6 +87,9 @@ func main() { db.AutoMigrate(&models.User{}) db.AutoMigrate(&models.Heartbeat{}).AddForeignKey("user_id", "users(id)", "RESTRICT", "RESTRICT") + // Migrate custom languages + migrateLanguages(db, config) + // Services heartbeatSrvc := &services.HeartbeatService{config, db} userSrvc := &services.UserService{config, db} @@ -135,3 +138,16 @@ func main() { log.Printf("Listening on %+s\n", portString) s.ListenAndServe() } + +func migrateLanguages(db *gorm.DB, cfg *models.Config) { + for k, v := range cfg.CustomLanguages { + result := db.Model(models.Heartbeat{}). + Where("language = ?", ""). + Where("entity LIKE ?", "%."+k). + Updates(models.Heartbeat{Language: v}) + if result.Error != nil { + log.Fatal(result.Error) + } + log.Printf("Migrated %+v rows for custom language %+s.\n", result.RowsAffected, k) + } +} diff --git a/models/heartbeat.go b/models/heartbeat.go index c121c09..86def57 100644 --- a/models/heartbeat.go +++ b/models/heartbeat.go @@ -14,14 +14,14 @@ type HeartbeatReqTime time.Time type Heartbeat struct { ID uint `gorm:"primary_key"` - User *User `json:"-" gorm:"not null; index:idx_time_user"` + User *User `json:"-" gorm:"not null"` UserID string `json:"-" gorm:"not null; index:idx_time_user"` - Entity string `json:"entity" gorm:"not null"` + Entity string `json:"entity" gorm:"not null: index:idx_entity"` Type string `json:"type"` Category string `json:"category"` Project string `json:"project"` Branch string `json:"branch"` - Language string `json:"language"` + Language string `json:"language" gorm:"index:idx_language"` IsWrite bool `json:"is_write"` Editor string `json:"editor"` OperatingSystem string `json:"operating_system"` diff --git a/routes/summary.go b/routes/summary.go index 54deb95..7d4a241 100644 --- a/routes/summary.go +++ b/routes/summary.go @@ -2,7 +2,6 @@ package routes import ( "crypto/md5" - "fmt" "net/http" "strconv" "time" @@ -75,7 +74,6 @@ func (h *SummaryHandler) Get(w http.ResponseWriter, r *http.Request) { cachedSummary, ok := h.Cache.Get(cacheKey) if !ok { // Cache Miss - fmt.Println("Cache miss") summary, err = h.SummarySrvc.GetSummary(from, to, user) // 'to' is always constant if err != nil { w.WriteHeader(http.StatusInternalServerError)