Auto-migrate custom languages.

This commit is contained in:
Ferdinand Mütsch 2019-05-21 22:01:14 +02:00
parent cdf158e2ac
commit df7b2d4a33
3 changed files with 19 additions and 5 deletions

16
main.go
View File

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

View File

@ -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"`

View File

@ -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)