/
3_0_0.go
104 lines (87 loc) · 2.78 KB
/
3_0_0.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
package migration
import (
"github.com/standup-raven/standup-raven/server/config"
"github.com/standup-raven/standup-raven/server/logger"
"github.com/standup-raven/standup-raven/server/standup"
"strconv"
"strings"
"time"
)
func upgradeDatabaseToVersion3_0_0(fromVersion string) error {
if fromVersion == version2_0_0 {
standupChannels, err := standup.GetStandupChannels()
if err != nil {
return err
}
rruleString, err := generateRRuleStringByWorkWeek()
if err != nil {
return err
}
for channelID := range standupChannels {
channelConfig, err := standup.GetStandupConfig(channelID)
if err != nil {
return err
}
channelConfig.RRuleString = rruleString
if err := channelConfig.PreSave(); err != nil {
return err
}
if err := channelConfig.IsValid(); err != nil {
return err
}
if _, err := standup.SaveStandupConfig(channelConfig); err != nil {
return err
}
}
if UpdateErr := updateSchemaVersion(version3_0_0); UpdateErr != nil {
return UpdateErr
}
}
return nil
}
func generateRRuleStringByWorkWeek() (string, error) {
type oldConfigType struct {
TimeZone string `json:"timeZone"`
WorkWeekStart string `json:"workWeekStart"`
WorkWeekEnd string `json:"workWeekEnd"`
PermissionSchemaEnabled bool `json:"permissionSchemaEnabled"`
EnableErrorReporting bool `json:"enableErrorReporting"`
SentryServerDSN string `json:"sentryServerDSN"`
SentryWebappDSN string `json:"sentryWebappDSN"`
}
var oldConf *oldConfigType
err := config.Mattermost.LoadPluginConfiguration(&oldConf)
if err != nil {
logger.Error("couldn't fetch old configuration", err, nil)
return "", err
}
workWeekStart, err := strconv.Atoi(oldConf.WorkWeekStart)
if err != nil {
logger.Error("Couldn't parse integer in old config work week start, defaulting to using 1 (Monday)", err, nil)
workWeekStart = 1
}
workWeekEnd, err := strconv.Atoi(oldConf.WorkWeekEnd)
if err != nil {
logger.Error("Couldn't parse integer in old config work week end, defaulting to using 5 (Friday)", err, nil)
workWeekEnd = 5
}
weekdays := getStandupWeekDays(workWeekStart, workWeekEnd)
rruleString := "FREQ=WEEKLY;INTERVAL=1;BYDAY=" + strings.Join(weekdays, ",")
return rruleString, nil
}
func getStandupWeekDays(workWeekStart, workWeekEnd int) []string {
weekdays := []string{}
if workWeekStart > workWeekEnd {
for i := workWeekStart; i <= 6; i++ {
weekdays = append(weekdays, strings.ToUpper(time.Weekday(i).String())[:2])
}
for i := 0; i <= workWeekEnd; i++ {
weekdays = append(weekdays, strings.ToUpper(time.Weekday(i).String())[:2])
}
} else {
for i := workWeekStart; i <= workWeekEnd; i++ {
weekdays = append(weekdays, strings.ToUpper(time.Weekday(i).String())[:2])
}
}
return weekdays
}