Step 4 #5

Merged
senaduka merged 24 commits from step-4 into master 2018-01-15 14:59:31 +01:00
7 changed files with 147 additions and 135 deletions
Showing only changes of commit 7f56a28509 - Show all commits

View File

@@ -17,7 +17,6 @@ var alexaApp = new alexa.app ('saburly'); // this means we still work with one s
module.exports = { module.exports = {
init: function (express) { init: function (express) {
alexaApp.express ({ alexaApp.express ({
expressApp: express, expressApp: express,

View File

@@ -8,8 +8,8 @@ config.REFRESH_TOKEN = 'Atzr|IwEBICA3kDhfSJxlwvnQp9AD1o115AC_KBbFd5GBg8oN_QHWn2o
config.TOKEN_EXPIRES_IN = 1515100500; config.TOKEN_EXPIRES_IN = 1515100500;
config.SKILL_ID = 'amzn1.ask.skill.efbf0564-a732-4ba9-958f-57939138adae'; config.SKILL_ID = 'amzn1.ask.skill.efbf0564-a732-4ba9-958f-57939138adae';
config.SKILL_DB_ID = '5a5016e775becaef2015da10'; //for server //config.SKILL_DB_ID = '5a5016e775becaef2015da10'; //for server
//config.SKILL_DB_ID = '5a232fb86ce046c749739455'; //for local config.SKILL_DB_ID = '5a232fb86ce046c749739455'; //for local
config.CLIENT_ID = 'amzn1.application-oa2-client.c748ca56ded04a95b236979898585ff7'; config.CLIENT_ID = 'amzn1.application-oa2-client.c748ca56ded04a95b236979898585ff7';
config.CLIENT_SECRET = '6dea8125cecd049d3c4cff7bb5bdfd3ff17bc6fed246c4c8f6b519d9ed08d0b3'; config.CLIENT_SECRET = '6dea8125cecd049d3c4cff7bb5bdfd3ff17bc6fed246c4c8f6b519d9ed08d0b3';

View File

@@ -0,0 +1,6 @@
var express = require ('express'), router = express.Router ();
router.use ('/getSkill', require ('./skill'));
router.use ('/updateSkill', require ('./skill')); // this will be fixed in next code refactoring
module.exports = router;

View File

@@ -0,0 +1,91 @@
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.skillIDLength) {
res.json ([]);
} else {
databaseHelper
.getSkill (id)
.then (result => {
res.json (result);
})
.catch (err => {
res.json ([]);
});
}
});
router.post ('/: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;
console.log ('id = ' + id);
if (id !== '-1') {
if (updateOnAmazon) {
amazonHelper
.updateSkill (skill)
.then (amazonResult => {
console.log ('Amazon : ' + amazonResult);
if (
amazonResult === constants.amazonResultCodes.ok ||
amazonResult === constants.amazonResultCodes.accepted
) {
//Skill uploaded, it's ok to update databaseI
databaseHelper
.updateSkill (id, skill)
.then (result => {
res.json ({result: constants.apiResultCodes.ok, message: ''});
alexa.updateIntentsJSON ();
})
.catch (e => {
res.json ({
result: constants.apiResultCodes.databaseError,
message: '',
});
});
} else {
res.json ({
result: constants.apiResultCodes.amazonError,
message: amazonResult,
});
}
})
.catch (e => {
res.json ({
result: constants.apiResultCodes.amazonError,
message: 'unknown',
});
});
} else {
databaseHelper
.updateSkill (id, skill)
.then (result => {
res.json ({result: constants.apiResultCodes.ok, message: ''});
alexa.updateIntentsJSON ();
})
.catch (e => {
res.json ({
result: constants.apiResultCodes.databaseError,
message: '',
});
});
}
} else {
//no new skills for now
}
});
module.exports = router;

View File

@@ -12,10 +12,8 @@ var getBuildStatus = function (skillID) {
Authorization: config.TOKEN, Authorization: config.TOKEN,
}, },
} }
) ).then (result => {
.then (l => l.text ()) return result.text ();
.then (result => {
return result;
}); });
}; };
@@ -45,9 +43,9 @@ var refreshTokens = function () {
parsedResponse.access_token, parsedResponse.access_token,
parsedResponse.expires_in parsedResponse.expires_in
); );
console.log('Token refresh failed'); console.log ('Token refresh failed');
console.log(body); console.log (body);
reject(body); reject (body);
}); });
}); });
}; };
@@ -80,50 +78,47 @@ var generateInteractionModel = function (skill) {
allIntents.push ({name: intent.intentName, samples: intent.questions}); allIntents.push ({name: intent.intentName, samples: intent.questions});
}); });
//Special Email Intents : //Special Email Intents :
allIntents.push({ allIntents.push ({
name: 'EmailIntentLaunch', name: 'EmailIntentLaunch',
slots:[], slots: [],
samples: [ samples: [
'I want to send a message', 'I want to send a message',
'I would like to send a message', 'I would like to send a message',
'I would like to leave a message', 'I would like to leave a message',
'Leave a message' 'Leave a message',
] ],
}); });
allIntents.push({ allIntents.push ({
name: 'EmailIntent', name: 'EmailIntent',
slots:[ slots: [
{ {
'name': 'Name', name: 'Name',
'type': 'AMAZON.US_FIRST_NAME' type: 'AMAZON.US_FIRST_NAME',
}, },
{ {
'name': 'Email', name: 'Email',
'type': 'AMAZON.LITERAL' type: 'AMAZON.LITERAL',
}, },
{ {
'name': 'Message', name: 'Message',
'type': 'AMAZON.LITERAL' type: 'AMAZON.LITERAL',
}, },
{ {
'name': 'Data', name: 'Data',
'type': 'AMAZON.LITERAL' type: 'AMAZON.LITERAL',
} },
], ],
samples: [ samples: [
'My name is {Name}', 'My name is {Name}',
'I am {Name}', 'I am {Name}',
'{exampleww at wwdwdw|Data}', '{exampleww at wwdwdw|Data}',
'My email is {example at efefegedd|Email}', 'My email is {example at efefegedd|Email}',
'Send replay to {example at abcdefg|Email}', 'Send replay to {example at abcdefg|Email}',
'My message is {The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.|Message}' 'My message is {The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.|Message}',
] ],
}); });
result.interactionModel = {}; result.interactionModel = {};

View File

@@ -0,0 +1,7 @@
module.exports = function (req, res, next) {
res.header ('Access-Control-Allow-Origin', '*');
res.header ('Access-Control-Allow-Headers', 'Origin, Content-Type');
res.header ('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.header ('Access-Control-Allow-Credentials', 'true');
next ();
};

View File

@@ -5,7 +5,8 @@ const constants = require ('./config/constants');
require ('isomorphic-fetch'); require ('isomorphic-fetch');
var express = require ('express'); var express = require ('express');
var alexa = require('./components/alexa'); var alexa = require('./components/alexa');
var bodyParser = require ('body-parser');
var MongoClient = require ('mongodb').MongoClient; var MongoClient = require ('mongodb').MongoClient;
var ObjectID = require ('mongodb').ObjectID; var ObjectID = require ('mongodb').ObjectID;
@@ -13,98 +14,11 @@ const router = express.Router ();
var app = express (); var app = express ();
// ALWAYS setup the alexa app and attach it to express before anything else. // ALWAYS setup the alexa app and attach it to express before anything else.
alexa.init(app); alexa.init (app);
// from here on you can setup any other express routes or middlewares as nor
app.set ('view engine', 'ejs'); app.set ('view engine', 'ejs');
app.use (require ('./middleware')); //common middleware for all requests
/* app.use (require ('./controllers')); //all routes
router.get ('/deleteSkill/:skillID', async (req, res, next) => {
databaseHelper
.deleteSkill (req.params.id)
.then (result => {
res.json (result);
})
.catch (err => {
res.json (err);
});
});
*/
router.get ('/getSkill/:id', async (req, res, next) => {
const id = req.params.id;
if (id.length !== constants.skillIDLength) {
res.json ([]);
} else {
databaseHelper
.getSkill (id)
.then (result => {
res.json (result);
})
.catch (err => {
res.json ([]);
});
}
});
router.post ('/updateSkill/:id', 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;
console.log('id = ' + id);
if (id !== '-1') {
if (updateOnAmazon){
amazonHelper.updateSkill(skill).then(amazonResult=>{
console.log('Amazon : ' + amazonResult);
if (amazonResult === constants.amazonResultCodes.ok || amazonResult === constants.amazonResultCodes.accepted) {
//Skill uploaded, it's ok to update databaseI
databaseHelper
.updateSkill (id, skill)
.then (result => {
res.json ({result: constants.apiResultCodes.ok, message: ''});
alexa.updateIntentsJSON ();
})
.catch (e => {
res.json ({result: constants.apiResultCodes.databaseError, message: ''});
});
}else{
res.json({result: constants.apiResultCodes.amazonError, message: amazonResult});
}
}).catch(e=>{
res.json ({result: constants.apiResultCodes.amazonError, message: 'unknown'});
});
}else{
databaseHelper
.updateSkill (id, skill)
.then (result => {
res.json ({result: constants.apiResultCodes.ok, message: ''});
alexa.updateIntentsJSON ();
})
.catch (e => {
res.json ({result: constants.apiResultCodes.databaseError, message: ''});
});
}
} else {
//no new skills for now
}
});
app.use (function (req, res, next) {
res.header ('Access-Control-Allow-Origin', '*');
res.header ('Access-Control-Allow-Headers', 'Origin, Content-Type');
res.header ('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.header ('Access-Control-Allow-Credentials', 'true');
next ();
});
app.use (bodyParser.json ());
app.use ('/', router);
MongoClient.connect (config.dbURL) MongoClient.connect (config.dbURL)
.then (database => { .then (database => {