mutation.go

  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/graphql/models"
 10)
 11
 12var _ graph.MutationResolver = &mutationResolver{}
 13
 14type mutationResolver struct {
 15	cache *cache.MultiRepoCache
 16}
 17
 18func (r mutationResolver) getRepo(ref *string) (*cache.RepoCache, error) {
 19	if ref != nil {
 20		return r.cache.ResolveRepo(*ref)
 21	}
 22
 23	return r.cache.DefaultRepo()
 24}
 25
 26func (r mutationResolver) NewBug(_ context.Context, input models.NewBugInput) (*models.NewBugPayload, error) {
 27	repo, err := r.getRepo(input.RepoRef)
 28	if err != nil {
 29		return nil, err
 30	}
 31
 32	b, op, err := repo.NewBugWithFiles(input.Title, input.Message, input.Files)
 33	if err != nil {
 34		return nil, err
 35	}
 36
 37	return &models.NewBugPayload{
 38		ClientMutationID: input.ClientMutationID,
 39		Bug:              models.NewLoadedBug(b.Snapshot()),
 40		Operation:        op,
 41	}, nil
 42}
 43
 44func (r mutationResolver) AddComment(_ context.Context, input models.AddCommentInput) (*models.AddCommentPayload, error) {
 45	repo, err := r.getRepo(input.RepoRef)
 46	if err != nil {
 47		return nil, err
 48	}
 49
 50	b, err := repo.ResolveBugPrefix(input.Prefix)
 51	if err != nil {
 52		return nil, err
 53	}
 54
 55	op, err := b.AddCommentWithFiles(input.Message, input.Files)
 56	if err != nil {
 57		return nil, err
 58	}
 59
 60	return &models.AddCommentPayload{
 61		ClientMutationID: input.ClientMutationID,
 62		Bug:              models.NewLoadedBug(b.Snapshot()),
 63		Operation:        op,
 64	}, nil
 65}
 66
 67func (r mutationResolver) ChangeLabels(_ context.Context, input *models.ChangeLabelInput) (*models.ChangeLabelPayload, error) {
 68	repo, err := r.getRepo(input.RepoRef)
 69	if err != nil {
 70		return nil, err
 71	}
 72
 73	b, err := repo.ResolveBugPrefix(input.Prefix)
 74	if err != nil {
 75		return nil, err
 76	}
 77
 78	results, op, err := b.ChangeLabels(input.Added, input.Removed)
 79	if err != nil {
 80		return nil, err
 81	}
 82
 83	resultsPtr := make([]*bug.LabelChangeResult, len(results))
 84	for i, result := range results {
 85		resultsPtr[i] = &result
 86	}
 87
 88	return &models.ChangeLabelPayload{
 89		ClientMutationID: input.ClientMutationID,
 90		Bug:              models.NewLoadedBug(b.Snapshot()),
 91		Operation:        op,
 92		Results:          resultsPtr,
 93	}, nil
 94}
 95
 96func (r mutationResolver) OpenBug(_ context.Context, input models.OpenBugInput) (*models.OpenBugPayload, error) {
 97	repo, err := r.getRepo(input.RepoRef)
 98	if err != nil {
 99		return nil, err
100	}
101
102	b, err := repo.ResolveBugPrefix(input.Prefix)
103	if err != nil {
104		return nil, err
105	}
106
107	op, err := b.Open()
108	if err != nil {
109		return nil, err
110	}
111
112	return &models.OpenBugPayload{
113		ClientMutationID: input.ClientMutationID,
114		Bug:              models.NewLoadedBug(b.Snapshot()),
115		Operation:        op,
116	}, nil
117}
118
119func (r mutationResolver) CloseBug(_ context.Context, input models.CloseBugInput) (*models.CloseBugPayload, error) {
120	repo, err := r.getRepo(input.RepoRef)
121	if err != nil {
122		return nil, err
123	}
124
125	b, err := repo.ResolveBugPrefix(input.Prefix)
126	if err != nil {
127		return nil, err
128	}
129
130	op, err := b.Close()
131	if err != nil {
132		return nil, err
133	}
134
135	return &models.CloseBugPayload{
136		ClientMutationID: input.ClientMutationID,
137		Bug:              models.NewLoadedBug(b.Snapshot()),
138		Operation:        op,
139	}, nil
140}
141
142func (r mutationResolver) SetTitle(_ context.Context, input models.SetTitleInput) (*models.SetTitlePayload, error) {
143	repo, err := r.getRepo(input.RepoRef)
144	if err != nil {
145		return nil, err
146	}
147
148	b, err := repo.ResolveBugPrefix(input.Prefix)
149	if err != nil {
150		return nil, err
151	}
152
153	op, err := b.SetTitle(input.Title)
154	if err != nil {
155		return nil, err
156	}
157
158	return &models.SetTitlePayload{
159		ClientMutationID: input.ClientMutationID,
160		Bug:              models.NewLoadedBug(b.Snapshot()),
161		Operation:        op,
162	}, nil
163}
164
165func (r mutationResolver) Commit(_ context.Context, input models.CommitInput) (*models.CommitPayload, error) {
166	repo, err := r.getRepo(input.RepoRef)
167	if err != nil {
168		return nil, err
169	}
170
171	b, err := repo.ResolveBugPrefix(input.Prefix)
172	if err != nil {
173		return nil, err
174	}
175
176	err = b.Commit()
177	if err != nil {
178		return nil, err
179	}
180
181	return &models.CommitPayload{
182		ClientMutationID: input.ClientMutationID,
183		Bug:              models.NewLoadedBug(b.Snapshot()),
184	}, nil
185}
186
187func (r mutationResolver) CommitAsNeeded(_ context.Context, input models.CommitAsNeededInput) (*models.CommitAsNeededPayload, error) {
188	repo, err := r.getRepo(input.RepoRef)
189	if err != nil {
190		return nil, err
191	}
192
193	b, err := repo.ResolveBugPrefix(input.Prefix)
194	if err != nil {
195		return nil, err
196	}
197
198	err = b.CommitAsNeeded()
199	if err != nil {
200		return nil, err
201	}
202
203	return &models.CommitAsNeededPayload{
204		ClientMutationID: input.ClientMutationID,
205		Bug:              models.NewLoadedBug(b.Snapshot()),
206	}, nil
207}