-
Notifications
You must be signed in to change notification settings - Fork 4
/
unit.go
108 lines (99 loc) · 2.41 KB
/
unit.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
package mem
import (
. "github.com/ankyra/escape-inventory/dao/types"
)
func (a *dao) GetApplications(project string) (map[string]*Application, error) {
result := map[string]*Application{}
for _, app := range a.namespaces[project] {
result[app.App.Name] = app.App
}
return result, nil
}
func (a *dao) GetApplication(project, name string) (*Application, error) {
prj, ok := a.namespaces[project]
if !ok {
return nil, NotFound
}
result, ok := prj[name]
if !ok {
return nil, NotFound
}
return result.App, nil
}
func (a *dao) FindAllVersions(app *Application) ([]string, error) {
application := a.apps[app]
versions := []string{}
if application == nil {
return versions, nil
}
for _, r := range application.Releases {
versions = append(versions, r.Release.Version)
}
return versions, nil
}
func (a *dao) AddApplication(app *Application) error {
apps, ok := a.namespaces[app.Project]
if !ok {
return NotFound
}
_, ok = apps[app.Name]
if ok {
return AlreadyExists
}
apps[app.Name] = &application{app, map[string]*release{}, map[string]*release{}}
a.apps[app] = apps[app.Name]
a.applicationHooks[app] = NewHooks()
return nil
}
func (a *dao) UpdateApplication(app *Application) error {
apps, ok := a.namespaces[app.Project]
if !ok {
return NotFound
}
proj, ok := apps[app.Name]
if !ok {
return NotFound
}
apps[app.Name] = &application{app, proj.Releases, proj.Tags}
a.apps[app] = apps[app.Name]
return nil
}
func (a *dao) GetApplicationHooks(app *Application) (Hooks, error) {
apps, ok := a.namespaces[app.Project]
if !ok {
return nil, NotFound
}
unit, ok := apps[app.Name]
if !ok {
return nil, NotFound
}
return a.applicationHooks[unit.App], nil
}
func (a *dao) SetApplicationHooks(app *Application, hooks Hooks) error {
apps, ok := a.namespaces[app.Project]
if !ok {
return NotFound
}
unit, ok := apps[app.Name]
if !ok {
return NotFound
}
a.applicationHooks[unit.App] = hooks
return nil
}
func (a *dao) GetDownstreamHooks(app *Application) ([]*Hooks, error) {
result := []*Hooks{}
for downstream, subs := range a.subscriptions {
for _, sub := range subs {
if sub.Name == app.Name && sub.Project == app.Project {
hooks := a.applicationHooks[downstream]
result = append(result, &hooks)
}
}
}
return result, nil
}
func (a *dao) SetApplicationSubscribesToUpdatesFrom(app *Application, upstream []*Application) error {
a.subscriptions[app] = upstream
return nil
}