1package resolvers
2
3import (
4 "context"
5
6 "github.com/MichaelMure/git-bug/api/graphql/connections"
7 "github.com/MichaelMure/git-bug/api/graphql/graph"
8 "github.com/MichaelMure/git-bug/api/graphql/models"
9 "github.com/MichaelMure/git-bug/bug"
10 "github.com/MichaelMure/git-bug/entity/dag"
11)
12
13var _ graph.BugResolver = &bugResolver{}
14
15type bugResolver struct{}
16
17func (bugResolver) ID(_ context.Context, obj models.BugWrapper) (string, error) {
18 return obj.Id().String(), nil
19}
20
21func (bugResolver) HumanID(_ context.Context, obj models.BugWrapper) (string, error) {
22 return obj.Id().Human(), nil
23}
24
25func (bugResolver) Status(_ context.Context, obj models.BugWrapper) (models.Status, error) {
26 return convertStatus(obj.Status())
27}
28
29func (bugResolver) Comments(_ context.Context, obj models.BugWrapper, after *string, before *string, first *int, last *int) (*models.CommentConnection, error) {
30 input := connections.Input{
31 Before: before,
32 After: after,
33 First: first,
34 Last: last,
35 }
36
37 comments, err := obj.Comments()
38 if err != nil {
39 return nil, err
40 }
41
42 conMaker := func(edges []*models.CommentEdge, nodes []bug.Comment, info *models.PageInfo, totalCount int) (*models.CommentConnection, error) {
43 var commentNodes []*bug.Comment
44 for _, c := range nodes {
45 commentNodes = append(commentNodes, &c)
46 }
47 return &models.CommentConnection{
48 Edges: edges,
49 Nodes: commentNodes,
50 PageInfo: info,
51 TotalCount: totalCount,
52 }, nil
53 }
54
55 return connections.Paginate(comments, input)
56}
57
58func (bugResolver) Operations(_ context.Context, obj models.BugWrapper, after *string, before *string, first *int, last *int) (*connections.Result[dag.Operation], error) {
59 input := connections.Input{
60 Before: before,
61 After: after,
62 First: first,
63 Last: last,
64 }
65
66 ops, err := obj.Operations()
67 if err != nil {
68 return nil, err
69 }
70
71 return connections.Paginate(ops, input)
72}
73
74func (bugResolver) Timeline(_ context.Context, obj models.BugWrapper, after *string, before *string, first *int, last *int) (*connections.Result[bug.TimelineItem], error) {
75 input := connections.Input{
76 Before: before,
77 After: after,
78 First: first,
79 Last: last,
80 }
81
82 timeline, err := obj.Timeline()
83 if err != nil {
84 return nil, err
85 }
86
87 return connections.Paginate(timeline, input)
88}
89
90func (bugResolver) Actors(_ context.Context, obj models.BugWrapper, after *string, before *string, first *int, last *int) (*connections.Result[models.IdentityWrapper], error) {
91 input := connections.Input{
92 Before: before,
93 After: after,
94 First: first,
95 Last: last,
96 }
97
98 actors, err := obj.Actors()
99 if err != nil {
100 return nil, err
101 }
102
103 return connections.Paginate(actors, input)
104}
105
106func (bugResolver) Participants(_ context.Context, obj models.BugWrapper, after *string, before *string, first *int, last *int) (*connections.Result[models.IdentityWrapper], error) {
107 input := connections.Input{
108 Before: before,
109 After: after,
110 First: first,
111 Last: last,
112 }
113
114 participants, err := obj.Participants()
115 if err != nil {
116 return nil, err
117 }
118
119 return connections.Paginate(participants, input)
120}