1package resolvers
2
3import (
4 "context"
5
6 "github.com/MichaelMure/git-bug/bug"
7 "github.com/MichaelMure/git-bug/cache"
8)
9
10type mutationResolver struct {
11 cache cache.Cacher
12}
13
14func (r mutationResolver) getRepo(repoRef *string) (cache.RepoCacher, error) {
15 if repoRef != nil {
16 return r.cache.ResolveRepo(*repoRef)
17 }
18
19 return r.cache.DefaultRepo()
20}
21
22func (r mutationResolver) NewBug(ctx context.Context, repoRef *string, title string, message string) (bug.Snapshot, error) {
23 repo, err := r.getRepo(repoRef)
24 if err != nil {
25 return bug.Snapshot{}, err
26 }
27
28 b, err := repo.NewBug(title, message)
29 if err != nil {
30 return bug.Snapshot{}, err
31 }
32
33 snap := b.Snapshot()
34
35 return *snap, nil
36}
37
38func (r mutationResolver) Commit(ctx context.Context, repoRef *string, prefix string) (bug.Snapshot, error) {
39 repo, err := r.getRepo(repoRef)
40 if err != nil {
41 return bug.Snapshot{}, err
42 }
43
44 b, err := repo.ResolveBugPrefix(prefix)
45 if err != nil {
46 return bug.Snapshot{}, err
47 }
48
49 b, err = b.Commit()
50 if err != nil {
51 return bug.Snapshot{}, err
52 }
53
54 snap := b.Snapshot()
55
56 return *snap, nil
57}
58
59func (r mutationResolver) AddComment(ctx context.Context, repoRef *string, prefix string, message string) (bug.Snapshot, error) {
60 repo, err := r.getRepo(repoRef)
61 if err != nil {
62 return bug.Snapshot{}, err
63 }
64
65 b, err := repo.ResolveBugPrefix(prefix)
66 if err != nil {
67 return bug.Snapshot{}, err
68 }
69
70 b, err = b.AddComment(message)
71 if err != nil {
72 return bug.Snapshot{}, err
73 }
74
75 snap := b.Snapshot()
76
77 return *snap, nil
78}
79
80func (r mutationResolver) ChangeLabels(ctx context.Context, repoRef *string, prefix string, added []string, removed []string) (bug.Snapshot, error) {
81 repo, err := r.getRepo(repoRef)
82 if err != nil {
83 return bug.Snapshot{}, err
84 }
85
86 b, err := repo.ResolveBugPrefix(prefix)
87 if err != nil {
88 return bug.Snapshot{}, err
89 }
90
91 b, err = b.ChangeLabels(added, removed)
92 if err != nil {
93 return bug.Snapshot{}, err
94 }
95
96 snap := b.Snapshot()
97
98 return *snap, nil
99}
100
101func (r mutationResolver) Open(ctx context.Context, repoRef *string, prefix string) (bug.Snapshot, error) {
102 repo, err := r.getRepo(repoRef)
103 if err != nil {
104 return bug.Snapshot{}, err
105 }
106
107 b, err := repo.ResolveBugPrefix(prefix)
108 if err != nil {
109 return bug.Snapshot{}, err
110 }
111
112 b, err = b.Open()
113 if err != nil {
114 return bug.Snapshot{}, err
115 }
116
117 snap := b.Snapshot()
118
119 return *snap, nil
120}
121
122func (r mutationResolver) Close(ctx context.Context, repoRef *string, prefix string) (bug.Snapshot, error) {
123 repo, err := r.getRepo(repoRef)
124 if err != nil {
125 return bug.Snapshot{}, err
126 }
127
128 b, err := repo.ResolveBugPrefix(prefix)
129 if err != nil {
130 return bug.Snapshot{}, err
131 }
132
133 b, err = b.Close()
134 if err != nil {
135 return bug.Snapshot{}, err
136 }
137
138 snap := b.Snapshot()
139
140 return *snap, nil
141}
142
143func (r mutationResolver) SetTitle(ctx context.Context, repoRef *string, prefix string, title string) (bug.Snapshot, error) {
144 repo, err := r.getRepo(repoRef)
145 if err != nil {
146 return bug.Snapshot{}, err
147 }
148
149 b, err := repo.ResolveBugPrefix(prefix)
150 if err != nil {
151 return bug.Snapshot{}, err
152 }
153
154 b, err = b.SetTitle(title)
155 if err != nil {
156 return bug.Snapshot{}, err
157 }
158
159 snap := b.Snapshot()
160
161 return *snap, nil
162}