Commit f5c2f640 authored by Sourav Dey's avatar Sourav Dey
Browse files

Issue #SB-9178 feat: Lock creation API

parent 20c9b768
master dependabot/npm_and_yarn/src/async-2.6.4 dependabot/npm_and_yarn/src/decode-uri-component-0.2.2 dependabot/npm_and_yarn/src/flat-and-mocha-5.0.2 dependabot/npm_and_yarn/src/handlebars-4.7.7 dependabot/npm_and_yarn/src/jsonwebtoken-9.0.0 dependabot/npm_and_yarn/src/lodash-4.17.21 dependabot/npm_and_yarn/src/minimist-and-project-sunbird/telemetry-sdk-and-handlebars-and-mkdirp-1.2.8 release-3.6.0 release-4.3.0 release-4.8.0 release-5.2.0 release-5.3.0 release-5.6.0 release-6.0.0 v1.13.3 v1.13 v1.12 tmp-testPR tmp-sunbird-bootcamp tmp-rjshrjndrn-patch-1 tmp-revert-118-testPR tmp-revert-110-logs tmp-revert-99-revert-98-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-98-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-97-revert-96-rjshrjndrn-patch-1 tmp-revert-96-rjshrjndrn-patch-1 tmp-release-sonarcloud tmp-release-2.6.0 tmp-release-2.3.0 tmp-release-2.1.1 tmp-release-2.1.0 tmp-release-2.1.0_pluginSearch tmp-release-2.0.0 tmp-release-1.15 tmp-release-1.14.3 tmp-release-1.14 tmp-release-1.14-sp3 tmp-refactored-dev-deploy tmp-master tmp-loadtest tmp-load-testing tmp-jenkins-test tmp-jenkins-pipeline tmp-final-variable-refac tmp-dial-assemble-api tmp-content-update-read tmp-circleci release-5.6.0_RC1 release-5.2.0_RC1 release-4.8.5_RC1 release-4.8.0_RC2 release-4.8.0_RC1 release-4.3.0_RC1 release-3.8.0_RC3 release-3.8.0_RC2 release-3.8.0_RC1 release-3.7.0_RC2 release-3.7.0_RC1 release-3.6.0_RC1 release-3.2.0_RC2 release-3.2.0_RC1 release-3.1.0 release-3.1.0_RC2 release-3.1.0_RC1 release-3.0.1_RC1 release-3.0.0 release-3.0.0_RC1 release-2.10.0 release-2.10.0_RC2 release-2.10.0_RC1 release-2.9.0_RC3 release-2.9.0_RC2 release-2.9.0_RC1 release-2.8.0 release-2.8.0_RC4 release-2.8.0_RC3 release-2.8.0_RC2 release-2.8.0_RC1 release-2.7.0 release-2.7.0_RC2 release-2.7.0_RC1 release-2.6.0 release-2.6.0_RC4 release-2.6.0_RC3 release-2.6.0_RC2 release-2.6.0_RC1 release-2.3.0 release-2.3.0_RC2 release-2.3.0_RC1 release-2.1.1_RC1 release-2.1.0_RC2 release-2.1.0_RC1 release-2.0.0 release-2.0.0_RC5 release-2.0.0_RC4 release-2.0.0_RC3 release-2.0.0_RC2 release-2.0.0_RC1 release-1.15.0 release-1.15_RC7 release-1.15_RC6 release-1.15_RC5 release-1.15_RC4 release-1.15_RC3 release-1.15_RC2 release-1.15_RC1 release-1.14.0
No related merge requests found
Showing with 192 additions and 17 deletions
+192 -17
......@@ -22,6 +22,11 @@ module.exports.CONTENT = {
'createdBy': 'required|string',
'creatorInfo': 'required|string',
'deviceId': 'required|string'
},
REFRESH_LOCK: {
'resourceId': 'required|string',
'resourceType': 'required|string'
}
}
......@@ -14,15 +14,15 @@ module.exports = function (app) {
.post(requestMiddleware.createAndValidateRequestBody, requestMiddleware.validateToken,
lockService.createLock)
// app.route(BASE_URL + '/refresh')
// .patch(requestMiddleware.createAndValidateRequestBody, requestMiddleware.validateToken,
// collaboratorService.updateCollaborators)
app.route(BASE_URL + '/refresh')
.patch(requestMiddleware.createAndValidateRequestBody, requestMiddleware.validateToken,
lockService.refreshLock)
// app.route(BASE_URL + '/retire')
// .patch(requestMiddleware.createAndValidateRequestBody, requestMiddleware.validateToken,
// collaboratorService.updateCollaborators)
app.route(BASE_URL + '/retire')
.delete(requestMiddleware.createAndValidateRequestBody, requestMiddleware.validateToken,
lockService.retireLock)
// app.route(BASE_URL + '/list')
// .patch(requestMiddleware.createAndValidateRequestBody, requestMiddleware.validateToken,
// collaboratorService.updateCollaborators)
app.route(BASE_URL + '/list')
.get(requestMiddleware.createAndValidateRequestBody,
lockService.listLock)
}
......@@ -22,17 +22,16 @@ var filename = path.basename(__filename)
var contentMessage = messageUtils.CONTENT
var responseCode = messageUtils.RESPONSE_CODE
var defaultLockExpiryTime = configUtil.getConfig('LOCK_EXPIRY_TIME')
var oldDateObj = new Date()
var newDateObj = new Date()
newDateObj.setTime(oldDateObj.getTime() + (defaultLockExpiryTime * 1000))
function createLock (req, response) {
// var oldDateObj = new Date()
var newDateObj = createExpiryTime()
var data = req.body
var rspObj = req.rspObj
// Adding objectData in telemetry
if (rspObj.telemetryData) {
rspObj.telemetryData.object = utilsService.getObjectData(data.request.resourceId, 'lock', '', {})
rspObj.telemetryData.object = utilsService.getObjectData(data.request.resourceId, 'contentLock', '', {})
}
if (!data.request || !validatorUtil.validate(data.request, contentModel.CREATE_LOCK)) {
......@@ -88,7 +87,7 @@ function createLock (req, response) {
createdBy: data.request.createdBy,
creatorInfo: data.request.creatorInfo,
deviceId: data.request.deviceId,
created_on: oldDateObj,
created_on: new Date(),
expiresAt: newDateObj
})
......@@ -106,13 +105,17 @@ function createLock (req, response) {
})
},
function (res) {
function () {
rspObj.result.expiresIn = new Date(newDateObj).getTime()
return response.status(200).send(respUtil.successResponse(rspObj))
}
])
}
function createExpiryTime () {
return new Date().setTime(new Date().getTime() + (defaultLockExpiryTime * 1000))
}
function checkResourceTypeValidation (req, CBW) {
switch (lodash.lowerCase(req.body.request.resourceType)) {
case 'content':
......@@ -135,4 +138,155 @@ function checkResourceTypeValidation (req, CBW) {
}
}
module.exports.createLock = createLock
function refreshLock (req, response) {
var newDateObj = createExpiryTime()
var data = req.body
var rspObj = req.rspObj
// Adding objectData in telemetry
if (rspObj.telemetryData) {
rspObj.telemetryData.object = utilsService.getObjectData(data.request.resourceId, 'refreshLock', '', {})
}
if (!data.request || !validatorUtil.validate(data.request, contentModel.REFRESH_LOCK)) {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'refreshLockAPI',
'Error due to required params are missing', data.request))
rspObj.errCode = contentMessage.REFRESH_LOCK.MISSING_CODE
rspObj.errMsg = contentMessage.REFRESH_LOCK.MISSING_MESSAGE
rspObj.responseCode = responseCode.CLIENT_ERROR
return response.status(400).send(respUtil.errorResponse(rspObj))
}
async.waterfall([
function (CBW) {
dbModel.instance.create_lock.findOne({ resourceId: data.request.resourceId },
{ resourceType: data.request.resourceType }, function (error, result) {
if (error) {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'error while getting data from db',
'error while getting data from db for refreshing lock', data.request))
rspObj.errCode = contentMessage.REFRESH_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.REFRESH_LOCK.FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(500).send(respUtil.errorResponse(rspObj))
} else if (result) {
if (result.createdBy !== req.headers['x-authenticated-userid']) {
rspObj.errCode = contentMessage.REFRESH_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.REFRESH_LOCK.FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(403).send(respUtil.errorResponse(rspObj))
}
var options = { ttl: defaultLockExpiryTime, if_exists: true }
dbModel.instance.create_lock.update(
{ resourceId: data.request.resourceId },
{ expiresAt: newDateObj }, options, function (err) {
if (err) {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'error while updating data to db',
'error while updating lock data from db', err))
rspObj.errCode = contentMessage.REFRESH_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.REFRESH_LOCK.FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(500).send(respUtil.errorResponse(rspObj))
}
CBW()
})
} else {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'no data found from db',
'no data found from db for refreshing lock', data.request))
rspObj.errCode = contentMessage.REFRESH_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.REFRESH_LOCK.NOT_FOUND_FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(500).send(respUtil.errorResponse(rspObj))
}
})
},
function () {
rspObj.result.expiresIn = new Date(newDateObj).getTime()
return response.status(200).send(respUtil.successResponse(rspObj))
}
])
}
function retireLock (req, response) {
var data = req.body
var rspObj = req.rspObj
// Adding objectData in telemetry
if (rspObj.telemetryData) {
rspObj.telemetryData.object = utilsService.getObjectData(data.request.resourceId, 'retireLock', '', {})
}
if (!data.request || !validatorUtil.validate(data.request, contentModel.REFRESH_LOCK)) {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'retireLockAPI',
'Error due to required params are missing', data.request))
rspObj.errCode = contentMessage.REFRESH_LOCK.MISSING_CODE
rspObj.errMsg = contentMessage.REFRESH_LOCK.MISSING_MESSAGE
rspObj.responseCode = responseCode.CLIENT_ERROR
return response.status(400).send(respUtil.errorResponse(rspObj))
}
async.waterfall([
function (CBW) {
dbModel.instance.create_lock.findOne({ resourceId: data.request.resourceId },
{ resourceType: data.request.resourceType }, function (error, result) {
if (error) {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'error while getting data from db',
'error while getting data from db for retiring lock', data.request))
rspObj.errCode = contentMessage.RETIRE_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.RETIRE_LOCK.FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(500).send(respUtil.errorResponse(rspObj))
} else if (result) {
dbModel.instance.create_lock.delete({ resourceId: data.request.resourceId },
{ resourceType: data.request.resourceType }, function (err) {
if (err) {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'error while deleting data to db',
'error while deleting lock data from db', err))
rspObj.errCode = contentMessage.RETIRE_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.RETIRE_LOCK.FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(500).send(respUtil.errorResponse(rspObj))
} else CBW()
})
} else {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'no data found from db',
'no data found from db for retiring lock', data.request))
rspObj.errCode = contentMessage.RETIRE_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.RETIRE_LOCK.NOT_FOUND_FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(500).send(respUtil.errorResponse(rspObj))
}
})
},
function () {
return response.status(200).send(respUtil.successResponse(rspObj))
}
])
}
function listLock (req, response) {
var data = req.body
var rspObj = req.rspObj
// Adding objectData in telemetry
if (rspObj.telemetryData) {
rspObj.telemetryData.object = utilsService.getObjectData(data, 'listLock', '', {})
}
dbModel.instance.create_lock.find({}, function (error, result) {
if (error) {
LOG.error(utilsService.getLoggerData(rspObj, 'ERROR', filename, 'error while getting data from db',
'error while fetching lock list data from db', data))
rspObj.errCode = contentMessage.RETIRE_LOCK.FAILED_CODE
rspObj.errMsg = contentMessage.RETIRE_LOCK.FAILED_MESSAGE
rspObj.responseCode = responseCode.SERVER_ERROR
return response.status(500).send(respUtil.errorResponse(rspObj))
} else {
rspObj.result.count = result.length
rspObj.result.data = result
return response.status(200).send(respUtil.successResponse(rspObj))
}
})
}
module.exports = { createLock, refreshLock, retireLock, listLock }
......@@ -262,7 +262,23 @@ exports.CONTENT = {
MISSING_MESSAGE: 'Required fields for creating lock',
FAILED_CODE: 'ERR_LOCK_CREATION_FAILED',
FAILED_MESSAGE: 'Creating lock failed',
ALREADY_LOCKED: 'The content is already locked by {{Name}}'
ALREADY_LOCKED: 'The resource is already locked by {{Name}}'
},
REFRESH_LOCK: {
MISSING_CODE: 'ERR_LOCK_REFRESHING_FIELDS_MISSING',
MISSING_MESSAGE: 'Required fields for refreshing lock',
FAILED_CODE: 'ERR_LOCK_REFRESHING_FAILED',
FAILED_MESSAGE: 'Refreshing lock failed',
NOT_FOUND_FAILED_MESSAGE: 'Either resource id is not valid or resource is not locked'
},
RETIRE_LOCK: {
MISSING_CODE: 'ERR_LOCK_RETIRING_FIELDS_MISSING',
MISSING_MESSAGE: 'Required fields for retiring lock',
FAILED_CODE: 'ERR_LOCK_RETIRING_FAILED',
FAILED_MESSAGE: 'Retiring lock failed',
NOT_FOUND_FAILED_MESSAGE: 'Either resource id is not valid or resource is not locked'
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment