forked from TF2Stadium/Helen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroutines.go
146 lines (118 loc) · 3.39 KB
/
routines.go
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Copyright (C) 2015 TF2Stadium
// Use of this source code is governed by the GPLv3
// that can be found in the COPYING file.
package migrations
import (
"math/rand"
"strconv"
"github.com/Sirupsen/logrus"
db "github.com/TF2Stadium/Helen/database"
"github.com/TF2Stadium/Helen/models"
"github.com/jinzhu/gorm/dialects/postgres"
)
// major ver -> migration routine
var migrationRoutines = map[uint64]func(){
2: lobbyTypeChange,
3: dropSubtituteTable,
4: increaseChatMessageLength,
5: updateAllPlayerInfo,
6: truncateHTTPSessions,
7: setMumbleInfo,
8: setPlayerExternalLinks,
9: setPlayerSettings,
10: dropTableSessions,
11: dropColumnUpdatedAt,
}
func whitelist_id_string() {
var count int
db.DB.Table("lobbies").Count(&count)
if count == 0 {
db.DB.Exec("ALTER TABLE lobbies DROP COLUMN whitelist")
db.DB.Exec("ALTER TABLE lobbies ADD whitelist varchar(255)")
}
var whitelistIDs []int
var lobbyIDs []uint
db.DB.Table("lobbies").Order("whitelist").Pluck("whitelist", &whitelistIDs)
if len(whitelistIDs) == 0 {
return
}
db.DB.Table("lobbies").Order("id").Pluck("id", &lobbyIDs)
db.DB.Exec("ALTER TABLE lobbies DROP whitelist")
db.DB.Exec("ALTER TABLE lobbies ADD whitelist varchar(255)")
for i, lobbyID := range lobbyIDs {
db.DB.Model(&models.Lobby{}).Where("id = ?", lobbyID).Update("whitelist", strconv.Itoa(whitelistIDs[i]))
}
}
func lobbyTypeChange() {
newLobbyType := map[int]models.LobbyType{
6: models.LobbyTypeSixes,
9: models.LobbyTypeHighlander,
4: models.LobbyTypeFours,
3: models.LobbyTypeUltiduo,
2: models.LobbyTypeBball,
1: models.LobbyTypeDebug,
}
var lobbyIDs []uint
db.DB.Table("lobbies").Order("id").Pluck("id", &lobbyIDs)
for _, lobbyID := range lobbyIDs {
var old int
db.DB.DB().QueryRow("SELECT type FROM lobbies WHERE id = $1", lobbyID).Scan(&old)
db.DB.Table("lobbies").Where("id = ?", lobbyID).Update("type", newLobbyType[old])
}
}
func dropSubtituteTable() {
db.DB.Exec("DROP TABLE substitutes")
}
func increaseChatMessageLength() {
db.DB.Exec("ALTER TABLE chat_messages ALTER COLUMN message TYPE character varying(150)")
}
func updateAllPlayerInfo() {
var players []*models.Player
db.DB.Table("players").Find(&players)
for _, player := range players {
player.UpdatePlayerInfo()
player.Save()
}
}
func truncateHTTPSessions() {
db.DB.Exec("TRUNCATE TABLE http_sessions")
}
func setMumbleInfo() {
var players []*models.Player
db.DB.Table("players").Find(&players)
for _, player := range players {
player.MumbleUsername = strconv.Itoa(rand.Int())
player.MumbleAuthkey = player.GenAuthKey()
player.Save()
}
}
func setPlayerExternalLinks() {
var players []*models.Player
db.DB.Table("players").Find(&players)
for _, player := range players {
player.ExternalLinks = make(postgres.Hstore)
player.SetExternalLinks()
player.Save()
}
}
// move player_settings values to player.Settings hstore
func setPlayerSettings() {
rows, err := db.DB.DB().Query("SELECT player_id, key, value FROM player_settings")
if err != nil {
logrus.Fatal(err)
}
for rows.Next() {
var playerID uint
var key, value string
rows.Scan(&playerID, &key, &value)
player, _ := models.GetPlayerByID(playerID)
player.SetSetting(key, value)
}
db.DB.Exec("DROP TABLE player_settings")
}
func dropTableSessions() {
db.DB.Exec("DROP TABLE http_sessions")
}
func dropColumnUpdatedAt() {
db.DB.Exec("ALTER TABLE players DROP COLUMN updated_at")
}