board.go

  1package resolvers
  2
  3import (
  4	"context"
  5
  6	"github.com/git-bug/git-bug/api/graphql/connections"
  7	"github.com/git-bug/git-bug/api/graphql/graph"
  8	"github.com/git-bug/git-bug/api/graphql/models"
  9	"github.com/git-bug/git-bug/entities/board"
 10	"github.com/git-bug/git-bug/entities/common"
 11	"github.com/git-bug/git-bug/entity/dag"
 12)
 13
 14var _ graph.BoardResolver = &boardResolver{}
 15
 16type boardResolver struct{}
 17
 18func (boardResolver) HumanID(ctx context.Context, obj models.BoardWrapper) (string, error) {
 19	return obj.Id().Human(), nil
 20}
 21
 22func (boardResolver) Columns(ctx context.Context, obj models.BoardWrapper, after *string, before *string, first *int, last *int) (*models.BoardColumnConnection, error) {
 23	input := models.ConnectionInput{
 24		Before: before,
 25		After:  after,
 26		First:  first,
 27		Last:   last,
 28	}
 29
 30	edger := func(column *board.Column, offset int) connections.Edge {
 31		return models.BoardColumnEdge{
 32			Node:   column,
 33			Cursor: connections.OffsetToCursor(offset),
 34		}
 35	}
 36
 37	conMaker := func(edges []*models.BoardColumnEdge, nodes []*board.Column, info *models.PageInfo, totalCount int) (*models.BoardColumnConnection, error) {
 38		return &models.BoardColumnConnection{
 39			Edges:      edges,
 40			Nodes:      nodes,
 41			PageInfo:   info,
 42			TotalCount: totalCount,
 43		}, nil
 44	}
 45
 46	columns, err := obj.Columns()
 47	if err != nil {
 48		return nil, err
 49	}
 50
 51	return connections.Connection(columns, edger, conMaker, input)
 52}
 53
 54func (boardResolver) Actors(ctx context.Context, obj models.BoardWrapper, after *string, before *string, first *int, last *int) (*models.IdentityConnection, error) {
 55	input := models.ConnectionInput{
 56		Before: before,
 57		After:  after,
 58		First:  first,
 59		Last:   last,
 60	}
 61
 62	edger := func(actor models.IdentityWrapper, offset int) connections.Edge {
 63		return models.IdentityEdge{
 64			Node:   actor,
 65			Cursor: connections.OffsetToCursor(offset),
 66		}
 67	}
 68
 69	conMaker := func(edges []*models.IdentityEdge, nodes []models.IdentityWrapper, info *models.PageInfo, totalCount int) (*models.IdentityConnection, error) {
 70		return &models.IdentityConnection{
 71			Edges:      edges,
 72			Nodes:      nodes,
 73			PageInfo:   info,
 74			TotalCount: totalCount,
 75		}, nil
 76	}
 77
 78	actors, err := obj.Actors()
 79	if err != nil {
 80		return nil, err
 81	}
 82
 83	return connections.Connection(actors, edger, conMaker, input)
 84}
 85
 86func (boardResolver) Operations(ctx context.Context, obj models.BoardWrapper, after *string, before *string, first *int, last *int) (*models.OperationConnection, error) {
 87	input := models.ConnectionInput{
 88		Before: before,
 89		After:  after,
 90		First:  first,
 91		Last:   last,
 92	}
 93
 94	edger := func(op dag.Operation, offset int) connections.Edge {
 95		return models.OperationEdge{
 96			Node:   op,
 97			Cursor: connections.OffsetToCursor(offset),
 98		}
 99	}
100
101	conMaker := func(edges []*models.OperationEdge, nodes []dag.Operation, info *models.PageInfo, totalCount int) (*models.OperationConnection, error) {
102		return &models.OperationConnection{
103			Edges:      edges,
104			Nodes:      nodes,
105			PageInfo:   info,
106			TotalCount: totalCount,
107		}, nil
108	}
109
110	ops, err := obj.Operations()
111	if err != nil {
112		return nil, err
113	}
114
115	return connections.Connection(ops, edger, conMaker, input)
116}
117
118var _ graph.BoardColumnResolver = &boardColumnResolver{}
119
120type boardColumnResolver struct{}
121
122func (b boardColumnResolver) Items(ctx context.Context, obj *board.Column, after *string, before *string, first *int, last *int) (*models.BoardItemConnection, error) {
123	input := models.ConnectionInput{
124		Before: before,
125		After:  after,
126		First:  first,
127		Last:   last,
128	}
129
130	edger := func(item board.Item, offset int) connections.Edge {
131		return models.BoardItemEdge{
132			Node:   item,
133			Cursor: connections.OffsetToCursor(offset),
134		}
135	}
136
137	conMaker := func(edges []*models.BoardItemEdge, nodes []board.Item, info *models.PageInfo, totalCount int) (*models.BoardItemConnection, error) {
138		return &models.BoardItemConnection{
139			Edges:      edges,
140			Nodes:      nodes,
141			PageInfo:   info,
142			TotalCount: totalCount,
143		}, nil
144	}
145
146	return connections.Connection(obj.Items, edger, conMaker, input)
147}
148
149var _ graph.BoardItemBugResolver = &boardItemBugResolver{}
150
151type boardItemBugResolver struct{}
152
153func (boardItemBugResolver) Author(ctx context.Context, obj *board.BugItem) (models.IdentityWrapper, error) {
154	return models.NewLoadedIdentity(obj.Author()), nil
155}
156
157var _ graph.BoardItemDraftResolver = &boardItemDraftResolver{}
158
159type boardItemDraftResolver struct{}
160
161func (boardItemDraftResolver) Author(ctx context.Context, obj *board.Draft) (models.IdentityWrapper, error) {
162	return models.NewLoadedIdentity(obj.Author()), nil
163}
164
165func (boardItemDraftResolver) Labels(ctx context.Context, obj *board.Draft) ([]common.Label, error) {
166	return nil, nil
167}