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