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 nil, err
30 }
31
32 b, err := repo.NewBugWithFiles(title, message, files)
33 if err != nil {
34 return nil, err
35 }
36
37 return b.Snapshot(), nil
38}
39
40func (r mutationResolver) Commit(ctx context.Context, repoRef *string, prefix string) (*bug.Snapshot, error) {
41 repo, err := r.getRepo(repoRef)
42 if err != nil {
43 return nil, err
44 }
45
46 b, err := repo.ResolveBugPrefix(prefix)
47 if err != nil {
48 return nil, err
49 }
50
51 err = b.Commit()
52 if err != nil {
53 return nil, err
54 }
55
56 return b.Snapshot(), nil
57}
58
59func (r mutationResolver) AddComment(ctx context.Context, repoRef *string, prefix string, message string, files []git.Hash) (*bug.Snapshot, error) {
60 repo, err := r.getRepo(repoRef)
61 if err != nil {
62 return nil, err
63 }
64
65 b, err := repo.ResolveBugPrefix(prefix)
66 if err != nil {
67 return nil, err
68 }
69
70 _, err = b.AddCommentWithFiles(message, files)
71 if err != nil {
72 return nil, err
73 }
74
75 return b.Snapshot(), nil
76}
77
78func (r mutationResolver) ChangeLabels(ctx context.Context, repoRef *string, prefix string, added []string, removed []string) (*bug.Snapshot, error) {
79 repo, err := r.getRepo(repoRef)
80 if err != nil {
81 return nil, err
82 }
83
84 b, err := repo.ResolveBugPrefix(prefix)
85 if err != nil {
86 return nil, err
87 }
88
89 _, _, err = b.ChangeLabels(added, removed)
90 if err != nil {
91 return nil, err
92 }
93
94 return b.Snapshot(), nil
95}
96
97func (r mutationResolver) Open(ctx context.Context, repoRef *string, prefix string) (*bug.Snapshot, error) {
98 repo, err := r.getRepo(repoRef)
99 if err != nil {
100 return nil, err
101 }
102
103 b, err := repo.ResolveBugPrefix(prefix)
104 if err != nil {
105 return nil, err
106 }
107
108 _, err = b.Open()
109 if err != nil {
110 return nil, err
111 }
112
113 return b.Snapshot(), nil
114}
115
116func (r mutationResolver) Close(ctx context.Context, repoRef *string, prefix string) (*bug.Snapshot, error) {
117 repo, err := r.getRepo(repoRef)
118 if err != nil {
119 return nil, err
120 }
121
122 b, err := repo.ResolveBugPrefix(prefix)
123 if err != nil {
124 return nil, err
125 }
126
127 _, err = b.Close()
128 if err != nil {
129 return nil, err
130 }
131
132 return b.Snapshot(), nil
133}
134
135func (r mutationResolver) SetTitle(ctx context.Context, repoRef *string, prefix string, title string) (*bug.Snapshot, error) {
136 repo, err := r.getRepo(repoRef)
137 if err != nil {
138 return nil, err
139 }
140
141 b, err := repo.ResolveBugPrefix(prefix)
142 if err != nil {
143 return nil, err
144 }
145
146 _, err = b.SetTitle(title)
147 if err != nil {
148 return nil, err
149 }
150
151 return b.Snapshot(), nil
152}