97 lines
3.3 KiB
JavaScript
97 lines
3.3 KiB
JavaScript
var express = require ('express'), router = express.Router ();
|
|
const constants = require ('../config/constants');
|
|
var databaseHelper = require ('../helpers/database');
|
|
var amazonHelper = require ('../helpers/amazon');
|
|
var bodyParser = require ('body-parser');
|
|
var alexa = require ('../components/alexa');
|
|
|
|
router.get ('/:id', async (req, res, next) => {
|
|
const id = req.params.id;
|
|
|
|
if (id.length !== constants.SKILL_ID_LENGTH) {
|
|
res.json ([]);
|
|
} else {
|
|
databaseHelper
|
|
.getSkill (id)
|
|
.then (result => {
|
|
res.json (result);
|
|
})
|
|
.catch (err => {
|
|
res.json ([]);
|
|
});
|
|
}
|
|
});
|
|
|
|
router.put ('/:id', bodyParser.json (), async (req, res, next) => {
|
|
let id = req.params.id;
|
|
let dataFromWeb = JSON.stringify (req.body);
|
|
let skill = JSON.parse (dataFromWeb);
|
|
let updateOnAmazon = skill.updateOnAmazon;
|
|
|
|
delete skill.updateOnAmazon;
|
|
delete skill._id;
|
|
|
|
//First get current skill from DB
|
|
databaseHelper
|
|
.getSkill (id)
|
|
.then (currentSkillState => {
|
|
//Now let's update skill in DB
|
|
databaseHelper
|
|
.updateSkill (id, skill)
|
|
.then (() => {
|
|
//Ok, done, now update skill on Amazon (if needed)
|
|
if (updateOnAmazon) {
|
|
amazonHelper
|
|
.updateSkill (skill)
|
|
.then (amazonResult => {
|
|
if (
|
|
amazonResult === constants.amazonResultCodes.OK ||
|
|
amazonResult === constants.amazonResultCodes.ACCEPTED
|
|
) {
|
|
res.json ({result: constants.apiResultCodes.OK, message: ''});
|
|
alexa.updateIntentsJSON ();
|
|
} else {
|
|
res.status(constants.HTTPResultCodes.INTERNAL_SERVER_ERROR).json ({
|
|
result: constants.apiResultCodes.AMAZON_ERROR,
|
|
message: amazonResult,
|
|
});
|
|
}
|
|
})
|
|
.catch (e => {
|
|
res.status(constants.HTTPResultCodes.INTERNAL_SERVER_ERROR).json ({
|
|
result: constants.apiResultCodes.AMAZON_FAIL,
|
|
message: e,
|
|
});
|
|
});
|
|
}else{
|
|
res.json ({result: constants.apiResultCodes.OK, message: ''});
|
|
alexa.updateIntentsJSON ();
|
|
}
|
|
})
|
|
.catch (() => {
|
|
//Update in database didn't go well, revert changes
|
|
databaseHelper
|
|
.updateSkill (id, currentSkillState)
|
|
.then (() => {
|
|
res.status(constants.HTTPResultCodes.INTERNAL_SERVER_ERROR).json ({
|
|
result: constants.apiResultCodes.DATABASE_ERROR,
|
|
message: '',
|
|
});
|
|
})
|
|
.catch (() => {
|
|
//This should never happen, something is seriously wrong, like no database connection
|
|
res.status(constants.HTTPResultCodes.INTERNAL_SERVER_ERROR).json ({
|
|
result: constants.apiResultCodes.INCONSISTEN_STATE,
|
|
message: '',
|
|
});
|
|
});
|
|
});
|
|
})
|
|
.catch (e => {
|
|
//I don't know why, but something went wrong, possibly ID of skill is wrong, doesn't exist in DB
|
|
res.status(constants.HTTPResultCodes.INTERNAL_SERVER_ERROR).json ({result: constants.apiResultCodes.NO_SKILL, message: ''});
|
|
});
|
|
});
|
|
|
|
module.exports = router;
|