diff options
author | Michael Muré <batolettre@gmail.com> | 2018-07-29 18:11:33 +0200 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2018-07-29 18:51:56 +0200 |
commit | 6363518c85cbd8247a5f6507b8a1dd3903cfb71d (patch) | |
tree | aa51652e9881196b3637247988cbd5155f42b5e2 /graphql2/resolvers/bug.go | |
parent | ff2fd14e3f10a7206d4ec86f07e524cfa290e0fc (diff) | |
download | git-bug-6363518c85cbd8247a5f6507b8a1dd3903cfb71d.tar.gz |
relay connection working with gqlgen
Diffstat (limited to 'graphql2/resolvers/bug.go')
-rw-r--r-- | graphql2/resolvers/bug.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/graphql2/resolvers/bug.go b/graphql2/resolvers/bug.go new file mode 100644 index 00000000..ad6c288b --- /dev/null +++ b/graphql2/resolvers/bug.go @@ -0,0 +1,61 @@ +package resolvers + +import ( + "context" + "github.com/MichaelMure/git-bug/bug" + "github.com/MichaelMure/git-bug/cache" +) + +type bugResolver struct { + cache cache.Cacher +} + +func (bugResolver) Status(ctx context.Context, obj *bug.Snapshot) (Status, error) { + return convertStatus(obj.Status) +} + +func (bugResolver) Comments(ctx context.Context, obj *bug.Snapshot, input ConnectionInput) (CommentConnection, error) { + var connection CommentConnection + + edger := func(comment bug.Comment, offset int) Edge { + return CommentEdge{ + Node: comment, + Cursor: offsetToCursor(offset), + } + } + + edges, pageInfo, err := BugCommentPaginate(obj.Comments, edger, input) + + if err != nil { + return connection, err + } + + connection.Edges = edges + connection.PageInfo = pageInfo + connection.TotalCount = len(obj.Comments) + + return connection, nil +} + +func (bugResolver) Operations(ctx context.Context, obj *bug.Snapshot, input ConnectionInput) (OperationConnection, error) { + var connection OperationConnection + + edger := func(op bug.Operation, offset int) Edge { + return OperationEdge{ + Node: op.(OperationUnion), + Cursor: offsetToCursor(offset), + } + } + + edges, pageInfo, err := BugOperationPaginate(obj.Operations, edger, input) + + if err != nil { + return connection, err + } + + connection.Edges = edges + connection.PageInfo = pageInfo + connection.TotalCount = len(obj.Operations) + + return connection, nil +} |