-
Notifications
You must be signed in to change notification settings - Fork 0
/
modeladd.go
61 lines (54 loc) · 1.3 KB
/
modeladd.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
// Content managed by Project Forge, see [projectforge.md] for details.
package model
import (
"fmt"
"github.com/pkg/errors"
"admini.dev/admini/app/lib/schema/field"
)
func (m *Model) AddField(f *field.Field) error {
if f == nil {
return errors.New("nil field")
}
if _, v := m.Fields.Get(f.Key); v != nil {
return errors.Errorf("field [%s] already exists", f.Key)
}
m.Fields = append(m.Fields, f)
return nil
}
func (m *Model) AddIndex(i *Index) error {
if i == nil {
return errors.New("nil index")
}
if m.Indexes.Get(i.Key) != nil {
return errors.Errorf("index [%s] already exists", i.Key)
}
m.Indexes = append(m.Indexes, i)
return nil
}
func (m *Model) AddRelationship(r *Relationship) error {
if r == nil {
return errors.New("nil relation")
}
if m.Relationships.Get(r.Key) != nil {
return errors.Errorf("relation [%s] already exists", r.Key)
}
m.Relationships = append(m.Relationships, r)
return nil
}
func (m *Model) AddReference(r *Reference) error {
if r == nil {
return errors.New("nil reference")
}
if m.References.Get(r.Key) != nil {
idx := 2
test := fmt.Sprintf("%s-%d", r.Key, idx)
for m.References.Get(test) != nil {
idx++
test = fmt.Sprintf("%s-%d", r.Key, idx)
}
r.Key = test
return m.AddReference(r)
}
m.References = append(m.References, r)
return nil
}