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}