-
Notifications
You must be signed in to change notification settings - Fork 124
/
subscriptions_resolver.go
69 lines (60 loc) · 2.53 KB
/
subscriptions_resolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package graphql
import (
"context"
"fmt"
"github.com/evergreen-ci/evergreen/model/event"
"github.com/evergreen-ci/evergreen/rest/model"
"github.com/evergreen-ci/utility"
"github.com/mitchellh/mapstructure"
)
// Subscriber is the resolver for the subscriber field.
func (r *subscriberWrapperResolver) Subscriber(ctx context.Context, obj *model.APISubscriber) (*Subscriber, error) {
res := &Subscriber{}
subscriberType := utility.FromStringPtr(obj.Type)
switch subscriberType {
case event.GithubPullRequestSubscriberType:
sub := model.APIGithubPRSubscriber{}
if err := mapstructure.Decode(obj.Target, &sub); err != nil {
return nil, InternalServerError.Send(ctx, fmt.Sprintf("problem converting %s subscriber: %s",
event.GithubPullRequestSubscriberType, err.Error()))
}
res.GithubPRSubscriber = &sub
case event.GithubCheckSubscriberType:
sub := model.APIGithubCheckSubscriber{}
if err := mapstructure.Decode(obj.Target, &sub); err != nil {
return nil, InternalServerError.Send(ctx, fmt.Sprintf("problem building %s subscriber from service: %s",
event.GithubCheckSubscriberType, err.Error()))
}
res.GithubCheckSubscriber = &sub
case event.EvergreenWebhookSubscriberType:
sub := model.APIWebhookSubscriber{}
if err := mapstructure.Decode(obj.Target, &sub); err != nil {
return nil, InternalServerError.Send(ctx, fmt.Sprintf("problem building %s subscriber from service: %s",
event.EvergreenWebhookSubscriberType, err.Error()))
}
res.WebhookSubscriber = &sub
case event.JIRAIssueSubscriberType:
sub := &model.APIJIRAIssueSubscriber{}
if err := mapstructure.Decode(obj.Target, &sub); err != nil {
return nil, InternalServerError.Send(ctx, fmt.Sprintf("problem building %s subscriber from service: %s",
event.JIRAIssueSubscriberType, err.Error()))
}
res.JiraIssueSubscriber = sub
case event.JIRACommentSubscriberType:
res.JiraCommentSubscriber = obj.Target.(*string)
case event.EmailSubscriberType:
res.EmailSubscriber = obj.Target.(*string)
case event.SlackSubscriberType:
res.SlackSubscriber = obj.Target.(*string)
case event.EnqueuePatchSubscriberType:
// We don't store information in target for this case, so do nothing.
default:
return nil, InternalServerError.Send(ctx, fmt.Sprintf("encountered unknown subscriber type '%s'", subscriberType))
}
return res, nil
}
// SubscriberWrapper returns SubscriberWrapperResolver implementation.
func (r *Resolver) SubscriberWrapper() SubscriberWrapperResolver {
return &subscriberWrapperResolver{r}
}
type subscriberWrapperResolver struct{ *Resolver }