-
Notifications
You must be signed in to change notification settings - Fork 0
/
dm_1_model.go
147 lines (132 loc) · 3.25 KB
/
dm_1_model.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
147
package orm
import (
"errors"
"../../dm_1"
)
type (
// target
DMTargetResource struct {
Id int64
Description string
MD5 string
Path string `xorm:"unique"`
TagIds []int64
BackupIdList []int64
ChildGenre string
Rating int
Dead bool
Size int64
}
DMTargetResourceEx struct {
Id int64
ParentId int64 `xorm:"unique"`
CompatibilityDescription string
Commentary string
Data string
}
// backup
DMBackupResource struct {
Id int64
ParentId int64
Description string
MD5 string
Path string `xorm:"unique"`
// 例如:备份一个文件夹,则其中的所有文件都会被该备份资源所备份
BackupTargetIds[] int64
}
// tag
DMTag struct {
Id int64
Name string `xorm:"unique"`
}
// permission
DMWhiteList struct {
Id int64
Level int `xorm:"unique"`
AccountIds [] int64
}
)
func ( PR *DMTargetResource ) GetChildResourceBackup() ( *DMBackupResource, error ) {
if PR.ChildGenre == "backup" {
b := &DMBackupResource{}
_, e := engine_dm.Table("d_m_backup_resource").Where("parent_id = ?", PR.Id).Get( b ); if e != nil {
return b, e
} else {
return b, nil
}
} else {
return nil, errors.New("resource is not a backup resource, but try to get a backup description")
}
}
func ( PR *DMTargetResource ) GetChildResourceEx() ( ex *DMTargetResourceEx, e error ) {
if PR.ChildGenre != "backup" {
b := &DMTargetResourceEx{}
_, e := engine_dm.Table("d_m_target_resource_ex").Where("parent_id = ?", PR.Id).Get( b ); if e != nil {
return b, e
} else {
return b, nil
}
} else {
return nil, errors.New("resource is a backup resource, but try to get a ex description")
}
}
func ( PR *DMTargetResourceEx ) GetParentResource() ( p *DMTargetResource, e error ) {
return DMGetTargetResourceById( PR.ParentId )
}
// 退化为DMResource
// 带文件信息
func ( R DMTargetResource ) Decay() ( *dm_1.DMResource, error ) {
r := &dm_1.DMResource{
Path: R.Path,
}
_, e := r.GetBasicFileInfo()
return r, e
}
func ( pR *DMTargetResource ) ComputeMD5() error {
r, e := pR.Decay()
md5, e := r.GetMD5()
pR.MD5 = md5
return e
}
// 返回与 R md5相同的资源
// 包含自身
func ( R DMTargetResource ) GetClones() ( rs []DMTargetResource, e error ) {
e = engine_dm.Table("d_m_target_resource").Where("m_d5 = ?", R.MD5 ).Find( &rs )
return
}
func ( R DMBackupResource ) Update() ( e error ) {
_, e = engine_dm.Table("d_m_backup_resource").Cols().ID(R.Id).Update(R)
return
}
func ( R DMTargetResource ) Update() ( e error ) {
_, e = engine_dm.Table("d_m_target_resource").Cols().ID(R.Id).Update(R)
return
}
func ( R DMTargetResourceEx ) Update() ( e error ) {
_, e = engine_dm.Table("d_m_target_resource_ex").Cols().ID(R.Id).Update(R)
return
}
func DMTags2Strings( tags []DMTag ) ( ts []string ) {
ts = []string{}
for _, t := range tags {
ts = append(ts, t.Name)
}
return
}
func DMGetAllTags() ( tags []DMTag, e error ) {
e = engine_dm.Table("d_m_tag").Find(&tags)
return
}
func DMIsTagExist( name string ) bool {
t := &DMTag{}
exist, _ := engine_dm.Table("d_m_tag").Where("name = ?", name ).Get(t)
return exist
}
func DMGetTagIdByName( name string ) int64 {
t := &DMTag{}
engine_dm.Table("d_m_tag").Where("name = ?", name).Get( t )
return t.Id
}
func ( R DMTag ) Insert() ( e error ) {
return DMInsertTag( R )
}