Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit be39f22

Browse files
committed
fix for #3 and #4
1 parent 184f367 commit be39f22

File tree

4 files changed

+150
-180
lines changed

4 files changed

+150
-180
lines changed

models/LabelAssignedEvent.js

Lines changed: 0 additions & 26 deletions
This file was deleted.

models/LabelUnassignedEvent.js

Lines changed: 0 additions & 25 deletions
This file was deleted.

utils/GithubEventDetector.js

Lines changed: 116 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ const _ = require('lodash');
1717
const models = require('../models');
1818
const EventDetector = require('./EventDetector');
1919

20+
/**
21+
* parse the issues from github webhook payload
22+
* @param {object} issue the github issue payload
23+
* @returns {object} the parsed issue detail
24+
*/
2025
const parseIssue = (issue) => ({
2126
number: issue.number,
2227
body: issue.body,
@@ -30,12 +35,22 @@ const parseIssue = (issue) => ({
3035
}
3136
});
3237

38+
/**
39+
* parse the repository from github webhook payload
40+
* @param {object} repository the github webhook repository payload
41+
* @returns {object} the parsed repository detail
42+
*/
3343
const parseRepository = (repository) => ({
3444
id: repository.id,
3545
name: repository.name,
3646
full_name: repository.full_name
3747
});
3848

49+
/**
50+
* parse the pull request from github webhok payload
51+
* @param {object} data the github webhook payload
52+
* @returns {object} the parsed pull request detail
53+
*/
3954
const parsePullRequest = (data) => ({
4055
number: data.number,
4156
id: data.pull_request.id,
@@ -50,42 +65,11 @@ const parsePullRequest = (data) => ({
5065
}))
5166
});
5267

53-
// begin the IssueCreatedEvent
54-
const IssueCreatedEvent = {
55-
event: models.IssueCreatedEvent
56-
};
57-
58-
IssueCreatedEvent.schema = Joi.object().keys({
59-
action: Joi.string().valid('opened').required(),
60-
issue: Joi.object().required(),
61-
repository: Joi.object().required()
62-
});
63-
64-
IssueCreatedEvent.parse = (data) => ({
65-
issue: parseIssue(data.issue),
66-
repository: parseRepository(data.repository)
67-
});
68-
69-
// end the IssueCreatedEvent
70-
71-
// begin the IssueUpdatedEvent
72-
const IssueUpdatedEvent = {
73-
event: models.IssueUpdatedEvent
74-
};
75-
76-
IssueUpdatedEvent.schema = Joi.object().keys({
77-
action: Joi.string().valid('edited').required(),
78-
issue: Joi.object().required(),
79-
repository: Joi.object().required()
80-
});
81-
82-
IssueUpdatedEvent.parse = (data) => ({
83-
issue: parseIssue(data.issue),
84-
repository: parseRepository(data.repository)
85-
});
86-
87-
// end the IssueUpdatedEvent
88-
68+
/**
69+
* parse the comment from github webhook payload
70+
* @param {object} data the github webhook payload
71+
* @returns {object} the parsed comment detail
72+
*/
8973
const parseComment = (data) => ({
9074
issue: parseIssue(data.issue),
9175
repository: parseRepository(data.repository),
@@ -97,79 +81,93 @@ const parseComment = (data) => ({
9781
}
9882
}
9983
});
100-
// begin the CommentCreatedEvent
101-
const CommentCreatedEvent = {
102-
event: models.CommentCreatedEvent
103-
};
10484

105-
CommentCreatedEvent.schema = Joi.object().keys({
106-
action: Joi.string().valid('created').required(),
107-
issue: Joi.object().required(),
108-
repository: Joi.object().required(),
109-
comment: Joi.object().required()
110-
});
85+
// definition of issue created event
86+
const IssueCreatedEvent = {
87+
event: models.IssueCreatedEvent,
88+
schema: Joi.object().keys({
89+
action: Joi.string().valid('opened').required(),
90+
issue: Joi.object().required(),
91+
repository: Joi.object().required()
92+
}),
93+
parse: (data) => ({
94+
issue: parseIssue(data.issue),
95+
repository: parseRepository(data.repository)
96+
})
97+
};
11198

112-
CommentCreatedEvent.parse = parseComment;
99+
// definition of issue updated event
100+
const IssueUpdatedEvent = {
101+
event: models.IssueUpdatedEvent,
102+
schema: Joi.object().keys({
103+
action: Joi.string().valid('edited').required(),
104+
issue: Joi.object().required(),
105+
repository: Joi.object().required()
106+
}),
107+
parse: (data) => ({
108+
issue: parseIssue(data.issue),
109+
repository: parseRepository(data.repository)
110+
})
111+
};
113112

114-
// end the CommentCreatedEvent
113+
// definition of issue comment updated event
114+
const CommentCreatedEvent = {
115+
event: models.CommentCreatedEvent,
116+
schema: Joi.object().keys({
117+
action: Joi.string().valid('created').required(),
118+
issue: Joi.object().required(),
119+
repository: Joi.object().required(),
120+
comment: Joi.object().required()
121+
}),
122+
parse: parseComment
123+
};
115124

116-
// begin the CommentUpdatedEvent
125+
// definition of issue comment created event
117126
const CommentUpdatedEvent = {
118-
event: models.CommentUpdatedEvent
127+
event: models.CommentUpdatedEvent,
128+
schema: Joi.object().keys({
129+
action: Joi.string().valid('edited').required(),
130+
issue: Joi.object().required(),
131+
repository: Joi.object().required(),
132+
comment: Joi.object().required()
133+
}),
134+
parse: parseComment
119135
};
120136

121-
CommentUpdatedEvent.schema = Joi.object().keys({
122-
action: Joi.string().valid('edited').required(),
123-
issue: Joi.object().required(),
124-
repository: Joi.object().required(),
125-
comment: Joi.object().required()
126-
});
127-
128-
CommentUpdatedEvent.parse = parseComment;
129-
// end the CommentUpdatedEvent
130-
131-
// begin the UserAssignedEvent
137+
// definition of issue user assigned event
132138
const UserAssignedEvent = {
133-
event: models.UserAssignedEvent
139+
event: models.UserAssignedEvent,
140+
schema: Joi.object().keys({
141+
action: Joi.string().valid('assigned').required(),
142+
issue: Joi.object().required(),
143+
assignee: Joi.object().required(),
144+
repository: Joi.object().required()
145+
}),
146+
parse: (data) => ({
147+
issue: parseIssue(data.issue),
148+
repository: parseRepository(data.repository),
149+
assignee: {
150+
id: data.assignee.id
151+
}
152+
})
134153
};
135154

136-
UserAssignedEvent.schema = Joi.object().keys({
137-
action: Joi.string().valid('assigned').required(),
138-
issue: Joi.object().required(),
139-
assignee: Joi.object().required(),
140-
repository: Joi.object().required()
141-
});
142-
143-
UserAssignedEvent.parse = (data) => ({
144-
issue: parseIssue(data.issue),
145-
repository: parseRepository(data.repository),
146-
assignee: {
147-
id: data.assignee.id
148-
}
149-
});
150-
151-
// end the UserAssignedEvent
152-
153-
// begin the UserUnassignedEvent
155+
// definition of issue user unassigned event
154156
const UserUnassignedEvent = {
155-
event: models.UserUnassignedEvent
157+
event: models.UserUnassignedEvent,
158+
schema: Joi.object().keys({
159+
action: Joi.string().valid('unassigned').required(),
160+
issue: Joi.object().required(),
161+
assignee: Joi.object().required(),
162+
repository: Joi.object().required()
163+
}),
164+
parse: (data) => ({
165+
issue: parseIssue(data.issue),
166+
repository: parseRepository(data.repository)
167+
})
156168
};
157169

158-
UserUnassignedEvent.schema = Joi.object().keys({
159-
action: Joi.string().valid('unassigned').required(),
160-
issue: Joi.object().required(),
161-
assignee: Joi.object().required(),
162-
repository: Joi.object().required()
163-
});
164-
165-
UserUnassignedEvent.parse = (data) => ({
166-
issue: parseIssue(data.issue),
167-
repository: parseRepository(data.repository)
168-
});
169-
170-
// end the UserUnassignedEvent
171-
172-
// start of LabelUpdatedEvent
170+
// definition of issue label updated event
173171
const LabelUpdatedEvent = {
174172
event: models.LabelUpdatedEvent,
175173
schema: Joi.object().keys({
@@ -185,42 +183,34 @@ const LabelUpdatedEvent = {
185183
})
186184
};
187185

188-
// end the LabelUnassignedEvent
189-
190-
// begin the PullRequestCreatedEvent
186+
// definition of pull request created event
191187
const PullRequestCreatedEvent = {
192-
event: models.PullRequestCreatedEvent
188+
event: models.PullRequestCreatedEvent,
189+
schema: Joi.object().keys({
190+
action: Joi.string().valid('opened').required(),
191+
pull_request: Joi.object().required(),
192+
repository: Joi.object().required()
193+
}),
194+
parse: (data) => ({
195+
pull_request: parsePullRequest(data),
196+
repository: parseRepository(data.repository)
197+
})
193198
};
194199

195-
PullRequestCreatedEvent.schema = Joi.object().keys({
196-
action: Joi.string().valid('opened').required(),
197-
pull_request: Joi.object().required(),
198-
repository: Joi.object().required()
199-
});
200-
201-
PullRequestCreatedEvent.parse = (data) => ({
202-
pull_request: parsePullRequest(data),
203-
repository: parseRepository(data.repository)
204-
});
205-
// end the PullRequestCreatedEvent
206-
207-
// begin the PullRequestClosedEvent
200+
// definition of pull request closed event
208201
const PullRequestClosedEvent = {
209-
event: models.PullRequestClosedEvent
202+
event: models.PullRequestClosedEvent,
203+
schema: Joi.object().keys({
204+
action: Joi.string().valid('closed').required(),
205+
pull_request: Joi.object().required(),
206+
repository: Joi.object().required()
207+
}),
208+
parse: (data) => ({
209+
pull_request: parsePullRequest(data),
210+
repository: parseRepository(data.repository)
211+
})
210212
};
211213

212-
PullRequestClosedEvent.schema = Joi.object().keys({
213-
action: Joi.string().valid('closed').required(),
214-
pull_request: Joi.object().required(),
215-
repository: Joi.object().required()
216-
});
217-
218-
PullRequestClosedEvent.parse = (data) => ({
219-
pull_request: parsePullRequest(data),
220-
repository: parseRepository(data.repository)
221-
});
222-
// end the PullRequestClosedEvent
223-
224214
module.exports = new EventDetector('github', [
225215
IssueCreatedEvent,
226216
IssueUpdatedEvent,

0 commit comments

Comments
 (0)