Skip to content

Commit e61b06c

Browse files
author
Uros Marolt
authored
handle no mentions returned (#584)
1 parent bd9a0ef commit e61b06c

2 files changed

Lines changed: 40 additions & 20 deletions

File tree

backend/src/serverless/integrations/usecases/twitter/errorHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const handleTwitterError = (
2828

2929
throw new RateLimitError(rateLimitResetSeconds, url, err)
3030
} else {
31-
logger.error({ err, input }, `Error while calling Twitter API URL: ${url}`)
31+
logger.error(err, { input }, `Error while calling Twitter API URL: ${url}`)
3232
throw err
3333
}
3434
}

backend/src/serverless/integrations/usecases/twitter/getPostsByMention.ts

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,30 +39,50 @@ const getPostsByMention = async (
3939
try {
4040
const response = await axios(config)
4141

42-
const posts = response.data.data
43-
const media = response.data.includes.media
44-
const users = response.data.includes.users
42+
let limit: number
43+
let timeUntilReset: number
44+
if (response.headers['x-rate-limit-remaining'] && response.headers['x-rate-limit-reset']) {
45+
limit = parseInt(response.headers['x-rate-limit-remaining'], 10)
46+
const resetTs = parseInt(response.headers['x-rate-limit-reset'], 10) * 1000
47+
timeUntilReset = moment(resetTs).diff(moment(), 'seconds')
48+
} else {
49+
limit = 0
50+
timeUntilReset = 0
51+
}
52+
53+
if (
54+
response.data.meta &&
55+
response.data.meta.result_count &&
56+
response.data.meta.result_count > 0
57+
) {
58+
const posts = response.data.data
59+
const media = response.data.includes.media
60+
const users = response.data.includes.users
4561

46-
const postsOut: TwitterParsedPosts = []
62+
const postsOut: TwitterParsedPosts = []
4763

48-
for (const post of posts) {
49-
if (post.attachments?.media_keys) {
50-
const computedMedia = post.attachments.media_keys.map((key) =>
51-
media.find((m) => m.media_key === key),
52-
)
53-
post.attachments = computedMedia
64+
for (const post of posts) {
65+
if (post.attachments?.media_keys) {
66+
const computedMedia = post.attachments.media_keys.map((key) =>
67+
media.find((m) => m.media_key === key),
68+
)
69+
post.attachments = computedMedia
70+
}
71+
const member = users.find((u) => u.id === post.author_id)
72+
post.member = member
73+
postsOut.push(post)
5474
}
55-
const member = users.find((u) => u.id === post.author_id)
56-
post.member = member
57-
postsOut.push(post)
58-
}
5975

60-
const limit = parseInt(response.headers['x-rate-limit-remaining'], 10)
61-
const resetTs = parseInt(response.headers['x-rate-limit-reset'], 10) * 1000
62-
const timeUntilReset = moment(resetTs).diff(moment(), 'seconds')
76+
return {
77+
records: postsOut,
78+
nextPage: response.data?.meta?.next_token || '',
79+
limit,
80+
timeUntilReset,
81+
}
82+
}
6383
return {
64-
records: postsOut,
65-
nextPage: response.data?.meta?.next_token || '',
84+
records: [],
85+
nextPage: '',
6686
limit,
6787
timeUntilReset,
6888
}

0 commit comments

Comments
 (0)