/
install.go
97 lines (74 loc) · 2.72 KB
/
install.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
package models
import (
"errors"
"github.com/aleksaan/statusek/config"
"github.com/aleksaan/statusek/database"
"github.com/aleksaan/statusek/logging"
rc "github.com/aleksaan/statusek/returncodes"
"gorm.io/gorm"
)
var db = database.DB
var CurrentVersion = "v2021.06.15_a"
func init() {
UpdateDB(CurrentVersion)
}
func UpdateDB(currentVersion string) rc.ReturnCode {
//check existing of the version table
var version = &Version{}
checkTable := db.Migrator().HasTable(&Version{})
//check version
var checkVersion bool
if checkTable {
db.First(&version)
checkVersion = version.VersionNumber == currentVersion
}
var isVersionsAreDifferent = !checkTable || (checkTable && !checkVersion)
if isVersionsAreDifferent {
logging.Info("Installed application version '%s' differs from current version '%s'", version.VersionNumber, currentVersion)
if !config.Config.DBConfig.DbUpdateIfOtherVersion {
logging.Info("DB updating is canceled because parameter db_update_if_older_version=false")
return rc.DB_IS_NOT_UPDATED
}
}
if isVersionsAreDifferent && config.Config.DBConfig.DbUpdateIfOtherVersion {
//creating DB objects
logging.Info("Starting DB updating...")
logging.Info("Dropping tables")
db.Migrator().DropTable(&Event{}, &Workflow{}, &Instance{}, &Status{}, &Object{}, &Version{})
logging.Info("Creating tables")
db.AutoMigrate(&Version{}, &Object{}, &Instance{}, &Status{}, &Workflow{}, &Event{})
//writing new version
logging.Info("Writing new version number '%s'", currentVersion)
version := Version{VersionNumber: currentVersion}
logging.Info("Creating default statuses models")
CreateWrapper(db, &version)
CreatingDefaultModels(true)
logging.Info("Starting DB updating...Done")
} else {
logging.Info("Current DB version is up to date")
}
return rc.SUCCESS
}
func CreatingDefaultModels(isUpdateAnyWhere bool) {
logging.Info("Creating 2-POINT LINE TASK model...")
//2-POINT LINE TASK
//check existing of 2-point line task
var objold = &Object{}
err := db.Where("Object_name = ?", "2-POINT LINE TASK").First(&objold).Error
if isUpdateAnyWhere || (!isUpdateAnyWhere && errors.Is(err, gorm.ErrRecordNotFound)) {
if isUpdateAnyWhere && err == nil {
//deleting old object
db.Delete(&objold)
}
//creating new object
obj := Object{ObjectName: "2-POINT LINE TASK"}
CreateWrapper(db, &obj)
st_start := Status{StatusName: "STARTED", ObjectID: obj.ID, StatusType: "MANDATORY"}
CreateWrapper(db, &st_start)
st_finish := Status{StatusName: "FINISHED", ObjectID: obj.ID, StatusType: "MANDATORY"}
CreateWrapper(db, &st_finish)
wkf := Workflow{StatusPrevID: st_start.ID, StatusNextID: st_finish.ID}
CreateWrapper(db, &wkf)
}
logging.Info("Creating 2-POINT LINE TASK model...Done")
}