diff options
author | Michael Muré <batolettre@gmail.com> | 2019-06-23 21:36:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-23 21:36:42 +0200 |
commit | 54e95cf36f4e50d4175f78410f3dc504a7e34179 (patch) | |
tree | 356011d5d539d259a696fe00fe6edb174b7ec268 /graphql/resolvers | |
parent | 5bae915b53ed2bb4f222db2fdc73852099b96fd2 (diff) | |
parent | 17cbe457d2d782bee914680b38fa101c9327b811 (diff) | |
download | git-bug-54e95cf36f4e50d4175f78410f3dc504a7e34179.tar.gz |
Merge pull request #171 from MichaelMure/graphql-mutation-relay
Graphql mutation relay
Diffstat (limited to 'graphql/resolvers')
-rw-r--r-- | graphql/resolvers/label.go | 23 | ||||
-rw-r--r-- | graphql/resolvers/mutation.go | 131 | ||||
-rw-r--r-- | graphql/resolvers/operations.go | 2 | ||||
-rw-r--r-- | graphql/resolvers/query.go | 4 | ||||
-rw-r--r-- | graphql/resolvers/root.go | 12 |
5 files changed, 127 insertions, 45 deletions
diff --git a/graphql/resolvers/label.go b/graphql/resolvers/label.go index 7619f748..690bf7f6 100644 --- a/graphql/resolvers/label.go +++ b/graphql/resolvers/label.go @@ -2,10 +2,12 @@ package resolvers import ( "context" + "fmt" "image/color" "github.com/MichaelMure/git-bug/bug" "github.com/MichaelMure/git-bug/graphql/graph" + "github.com/MichaelMure/git-bug/graphql/models" ) var _ graph.LabelResolver = &labelResolver{} @@ -20,3 +22,24 @@ func (labelResolver) Color(ctx context.Context, obj *bug.Label) (*color.RGBA, er rgba := obj.RGBA() return &rgba, nil } + +var _ graph.LabelChangeResultResolver = &labelChangeResultResolver{} + +type labelChangeResultResolver struct{} + +func (labelChangeResultResolver) Status(ctx context.Context, obj *bug.LabelChangeResult) (models.LabelChangeStatus, error) { + switch obj.Status { + case bug.LabelChangeAdded: + return models.LabelChangeStatusAdded, nil + case bug.LabelChangeRemoved: + return models.LabelChangeStatusRemoved, nil + case bug.LabelChangeDuplicateInOp: + return models.LabelChangeStatusDuplicateInOp, nil + case bug.LabelChangeAlreadySet: + return models.LabelChangeStatusAlreadyExist, nil + case bug.LabelChangeDoesntExist: + return models.LabelChangeStatusDoesntExist, nil + } + + return "", fmt.Errorf("unknown status") +} diff --git a/graphql/resolvers/mutation.go b/graphql/resolvers/mutation.go index d10d2ea3..b4f8845a 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{} @@ -15,138 +15,193 @@ type mutationResolver struct { cache *cache.MultiRepoCache } -func (r mutationResolver) getRepo(repoRef *string) (*cache.RepoCache, error) { - if repoRef != nil { - return r.cache.ResolveRepo(*repoRef) +func (r mutationResolver) getRepo(ref *string) (*cache.RepoCache, error) { + if ref != nil { + return r.cache.ResolveRepo(*ref) } 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 } diff --git a/graphql/resolvers/operations.go b/graphql/resolvers/operations.go index 90817567..19b2b17f 100644 --- a/graphql/resolvers/operations.go +++ b/graphql/resolvers/operations.go @@ -63,5 +63,5 @@ func convertStatus(status bug.Status) (models.Status, error) { return models.StatusClosed, nil } - return "", fmt.Errorf("Unknown status") + return "", fmt.Errorf("unknown status") } diff --git a/graphql/resolvers/query.go b/graphql/resolvers/query.go index 80b5a896..aa4e1d85 100644 --- a/graphql/resolvers/query.go +++ b/graphql/resolvers/query.go @@ -27,8 +27,8 @@ func (r rootQueryResolver) DefaultRepository(ctx context.Context) (*models.Repos }, nil } -func (r rootQueryResolver) Repository(ctx context.Context, id string) (*models.Repository, error) { - repo, err := r.cache.ResolveRepo(id) +func (r rootQueryResolver) Repository(ctx context.Context, ref string) (*models.Repository, error) { + repo, err := r.cache.ResolveRepo(ref) if err != nil { return nil, err diff --git a/graphql/resolvers/root.go b/graphql/resolvers/root.go index f6a4a57b..8873b723 100644 --- a/graphql/resolvers/root.go +++ b/graphql/resolvers/root.go @@ -30,6 +30,10 @@ func (r RootResolver) Mutation() graph.MutationResolver { } } +func (RootResolver) Repository() graph.RepositoryResolver { + return &repoResolver{} +} + func (RootResolver) Bug() graph.BugResolver { return &bugResolver{} } @@ -86,10 +90,6 @@ func (RootResolver) LabelChangeOperation() graph.LabelChangeOperationResolver { return &labelChangeOperation{} } -func (RootResolver) Repository() graph.RepositoryResolver { - return &repoResolver{} -} - func (RootResolver) SetStatusOperation() graph.SetStatusOperationResolver { return &setStatusOperationResolver{} } @@ -97,3 +97,7 @@ func (RootResolver) SetStatusOperation() graph.SetStatusOperationResolver { func (RootResolver) SetTitleOperation() graph.SetTitleOperationResolver { return &setTitleOperationResolver{} } + +func (r RootResolver) LabelChangeResult() graph.LabelChangeResultResolver { + return &labelChangeResultResolver{} +} |