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

Commit 2dcddfd

Browse files
author
Sachin Maheshwari
committed
To avoid looping of DB streamning on any unknown/uncaught error
1 parent a535b97 commit 2dcddfd

File tree

1 file changed

+36
-32
lines changed

1 file changed

+36
-32
lines changed

index.js

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const helper = require('./src/common/helper')
1515
* @param {boolean} isDelete if delete the skill
1616
* @returns {Promise}
1717
*/
18-
async function syncUserSkill (userId, tagId, score, skillProviderId, isDelete) {
18+
async function syncUserSkill(userId, tagId, score, skillProviderId, isDelete) {
1919
const name = await helper.getTagName(tagId)
2020
const skill = await helper.getUbahnResource('skills', { skillProviderId, name })
2121
const skillExist = await helper.checkUserSkillExist(userId, skill.id)
@@ -33,38 +33,42 @@ async function syncUserSkill (userId, tagId, score, skillProviderId, isDelete) {
3333
* @param {Object} event the event object
3434
*/
3535
module.exports.handle = async (event) => {
36-
console.log(`Received event: `, JSON.stringify(event))
37-
const skillProvider = await helper.getUbahnResource('skillsProviders', { name: config.SKILL_PROVIDER_NAME })
38-
for (const record of event.Records) {
39-
try {
40-
const handle = _.get(record, 'dynamodb.NewImage.userHandle.S')
41-
const newSkills = JSON.parse(_.get(record, 'dynamodb.NewImage.skills.S', '{}'))
42-
const oldSkills = JSON.parse(_.get(record, 'dynamodb.OldImage.skills.S', '{}'))
43-
const createSkills = _.omit(newSkills, _.keys(oldSkills))
44-
const deleteSkills = _.omit(oldSkills, _.keys(newSkills))
45-
const updateSkills = _.filter(_.pick(newSkills, _.keys(oldSkills)), (v, k) => oldSkills[k].score !== v.score)
46-
if (_.isEmpty(createSkills) && _.isEmpty(deleteSkills) && _.isEmpty(updateSkills)) {
47-
console.log(`there are no skills to create, update or delete for user ${handle}`)
48-
continue
36+
try {
37+
console.log(`Received event: `, JSON.stringify(event))
38+
const skillProvider = await helper.getUbahnResource('skillsProviders', { name: config.SKILL_PROVIDER_NAME })
39+
for (const record of event.Records) {
40+
try {
41+
const handle = _.get(record, 'dynamodb.NewImage.userHandle.S')
42+
const newSkills = JSON.parse(_.get(record, 'dynamodb.NewImage.skills.S', '{}'))
43+
const oldSkills = JSON.parse(_.get(record, 'dynamodb.OldImage.skills.S', '{}'))
44+
const createSkills = _.omit(newSkills, _.keys(oldSkills))
45+
const deleteSkills = _.omit(oldSkills, _.keys(newSkills))
46+
const updateSkills = _.filter(_.pick(newSkills, _.keys(oldSkills)), (v, k) => oldSkills[k].score !== v.score)
47+
if (_.isEmpty(createSkills) && _.isEmpty(deleteSkills) && _.isEmpty(updateSkills)) {
48+
console.log(`there are no skills to create, update or delete for user ${handle}`)
49+
continue
50+
}
51+
console.log('Skills to create:', JSON.stringify(createSkills))
52+
console.log('Skills to update:', JSON.stringify(updateSkills))
53+
console.log('Skills to delete:', JSON.stringify(deleteSkills))
54+
const user = await helper.getUser(handle)
55+
for (const key of _.keys(createSkills)) {
56+
await syncUserSkill(user.id, key, createSkills[key].score, skillProvider.id)
57+
await helper.sleep()
58+
}
59+
for (const key of _.keys(updateSkills)) {
60+
await syncUserSkill(user.id, key, createSkills[key].score, skillProvider.id)
61+
await helper.sleep()
62+
}
63+
for (const key of _.keys(deleteSkills)) {
64+
await syncUserSkill(user.id, key, 0, skillProvider.id, true)
65+
await helper.sleep()
66+
}
67+
} catch (e) {
68+
console.log(`sync user's skills failed. Error: ${e.message}`)
4969
}
50-
console.log('Skills to create:', JSON.stringify(createSkills))
51-
console.log('Skills to update:', JSON.stringify(updateSkills))
52-
console.log('Skills to delete:', JSON.stringify(deleteSkills))
53-
const user = await helper.getUser(handle)
54-
for (const key of _.keys(createSkills)) {
55-
await syncUserSkill(user.id, key, createSkills[key].score, skillProvider.id)
56-
await helper.sleep()
57-
}
58-
for (const key of _.keys(updateSkills)) {
59-
await syncUserSkill(user.id, key, createSkills[key].score, skillProvider.id)
60-
await helper.sleep()
61-
}
62-
for (const key of _.keys(deleteSkills)) {
63-
await syncUserSkill(user.id, key, 0, skillProvider.id, true)
64-
await helper.sleep()
65-
}
66-
} catch (e) {
67-
console.log(`sync user's skills failed. Error: ${e.message}`)
6870
}
71+
} catch (e) {
72+
console.log(`some error occured: ${e.message}`)
6973
}
7074
}

0 commit comments

Comments
 (0)