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/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}