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