aboutsummaryrefslogtreecommitdiffstats
path: root/graphql/resolvers/mutation.go
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2019-06-16 21:29:49 +0200
committerMichael Muré <batolettre@gmail.com>2019-06-16 21:29:49 +0200
commitb2f8572c4493205535558fb9320689aaf4774dc1 (patch)
tree021ed8eef1bb57c73ca595c3e79706cf215d6eee /graphql/resolvers/mutation.go
parent08c0e18ade5241d124fc8a3424b7612174e82cef (diff)
downloadgit-bug-b2f8572c4493205535558fb9320689aaf4774dc1.tar.gz
graphql: change mutations to respect the Relay specification
https://facebook.github.io/relay/graphql/mutations.htm This specification also allow to expose a mutationId for fire and forget, as well as the created operation.
Diffstat (limited to 'graphql/resolvers/mutation.go')
-rw-r--r--graphql/resolvers/mutation.go125
1 files changed, 90 insertions, 35 deletions
diff --git a/graphql/resolvers/mutation.go b/graphql/resolvers/mutation.go
index d10d2ea3..9ed4e780 100644
--- a/graphql/resolvers/mutation.go
+++ b/graphql/resolvers/mutation.go
@@ -6,7 +6,7 @@ import (
"github.com/MichaelMure/git-bug/bug"
"github.com/MichaelMure/git-bug/cache"
"github.com/MichaelMure/git-bug/graphql/graph"
- "github.com/MichaelMure/git-bug/util/git"
+ "github.com/MichaelMure/git-bug/graphql/models"
)
var _ graph.MutationResolver = &mutationResolver{}
@@ -23,130 +23,185 @@ func (r mutationResolver) getRepo(repoRef *string) (*cache.RepoCache, error) {
return r.cache.DefaultRepo()
}
-func (r mutationResolver) NewBug(ctx context.Context, repoRef *string, title string, message string, files []git.Hash) (*bug.Snapshot, error) {
- repo, err := r.getRepo(repoRef)
+func (r mutationResolver) NewBug(ctx context.Context, input models.NewBugInput) (*models.NewBugPayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
if err != nil {
return nil, err
}
- b, err := repo.NewBugWithFiles(title, message, files)
+ b, op, err := repo.NewBugWithFiles(input.Title, input.Message, input.Files)
if err != nil {
return nil, err
}
- return b.Snapshot(), nil
+ return &models.NewBugPayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ Operation: op,
+ }, nil
}
-func (r mutationResolver) Commit(ctx context.Context, repoRef *string, prefix string) (*bug.Snapshot, error) {
- repo, err := r.getRepo(repoRef)
+func (r mutationResolver) AddComment(ctx context.Context, input models.AddCommentInput) (*models.AddCommentPayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
if err != nil {
return nil, err
}
- b, err := repo.ResolveBugPrefix(prefix)
+ b, err := repo.ResolveBugPrefix(input.Prefix)
if err != nil {
return nil, err
}
- err = b.Commit()
+ op, err := b.AddCommentWithFiles(input.Message, input.Files)
+ if err != nil {
+ return nil, err
+ }
+
+ return &models.AddCommentPayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ Operation: op,
+ }, nil
+}
+
+func (r mutationResolver) ChangeLabels(ctx context.Context, input *models.ChangeLabelInput) (*models.ChangeLabelPayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
+ if err != nil {
+ return nil, err
+ }
+
+ b, err := repo.ResolveBugPrefix(input.Prefix)
if err != nil {
return nil, err
}
- return b.Snapshot(), nil
+ results, op, err := b.ChangeLabels(input.Added, input.Removed)
+ if err != nil {
+ return nil, err
+ }
+
+ resultsPtr := make([]*bug.LabelChangeResult, len(results))
+ for i, result := range results {
+ resultsPtr[i] = &result
+ }
+
+ return &models.ChangeLabelPayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ Operation: op,
+ Results: resultsPtr,
+ }, nil
}
-func (r mutationResolver) AddComment(ctx context.Context, repoRef *string, prefix string, message string, files []git.Hash) (*bug.Snapshot, error) {
- repo, err := r.getRepo(repoRef)
+func (r mutationResolver) OpenBug(ctx context.Context, input models.OpenBugInput) (*models.OpenBugPayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
if err != nil {
return nil, err
}
- b, err := repo.ResolveBugPrefix(prefix)
+ b, err := repo.ResolveBugPrefix(input.Prefix)
if err != nil {
return nil, err
}
- _, err = b.AddCommentWithFiles(message, files)
+ op, err := b.Open()
if err != nil {
return nil, err
}
- return b.Snapshot(), nil
+ return &models.OpenBugPayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ Operation: op,
+ }, nil
}
-func (r mutationResolver) ChangeLabels(ctx context.Context, repoRef *string, prefix string, added []string, removed []string) (*bug.Snapshot, error) {
- repo, err := r.getRepo(repoRef)
+func (r mutationResolver) CloseBug(ctx context.Context, input models.CloseBugInput) (*models.CloseBugPayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
if err != nil {
return nil, err
}
- b, err := repo.ResolveBugPrefix(prefix)
+ b, err := repo.ResolveBugPrefix(input.Prefix)
if err != nil {
return nil, err
}
- _, _, err = b.ChangeLabels(added, removed)
+ op, err := b.Close()
if err != nil {
return nil, err
}
- return b.Snapshot(), nil
+ return &models.CloseBugPayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ Operation: op,
+ }, nil
}
-func (r mutationResolver) Open(ctx context.Context, repoRef *string, prefix string) (*bug.Snapshot, error) {
- repo, err := r.getRepo(repoRef)
+func (r mutationResolver) SetTitle(ctx context.Context, input models.SetTitleInput) (*models.SetTitlePayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
if err != nil {
return nil, err
}
- b, err := repo.ResolveBugPrefix(prefix)
+ b, err := repo.ResolveBugPrefix(input.Prefix)
if err != nil {
return nil, err
}
- _, err = b.Open()
+ op, err := b.SetTitle(input.Title)
if err != nil {
return nil, err
}
- return b.Snapshot(), nil
+ return &models.SetTitlePayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ Operation: op,
+ }, nil
}
-func (r mutationResolver) Close(ctx context.Context, repoRef *string, prefix string) (*bug.Snapshot, error) {
- repo, err := r.getRepo(repoRef)
+func (r mutationResolver) Commit(ctx context.Context, input models.CommitInput) (*models.CommitPayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
if err != nil {
return nil, err
}
- b, err := repo.ResolveBugPrefix(prefix)
+ b, err := repo.ResolveBugPrefix(input.Prefix)
if err != nil {
return nil, err
}
- _, err = b.Close()
+ err = b.Commit()
if err != nil {
return nil, err
}
- return b.Snapshot(), nil
+ return &models.CommitPayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ }, nil
}
-func (r mutationResolver) SetTitle(ctx context.Context, repoRef *string, prefix string, title string) (*bug.Snapshot, error) {
- repo, err := r.getRepo(repoRef)
+func (r mutationResolver) CommitAsNeeded(ctx context.Context, input models.CommitAsNeededInput) (*models.CommitAsNeededPayload, error) {
+ repo, err := r.getRepo(input.RepoRef)
if err != nil {
return nil, err
}
- b, err := repo.ResolveBugPrefix(prefix)
+ b, err := repo.ResolveBugPrefix(input.Prefix)
if err != nil {
return nil, err
}
- _, err = b.SetTitle(title)
+ err = b.CommitAsNeeded()
if err != nil {
return nil, err
}
- return b.Snapshot(), nil
+ return &models.CommitAsNeededPayload{
+ ClientMutationID: input.ClientMutationID,
+ Bug: b.Snapshot(),
+ }, nil
}