ZoeApi/controllers/charactersController.js

580 lines
24 KiB
JavaScript

require('../connections/mysql-server');
require('../helpers/CheckToken');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const { debug } = require('console');
const apikeyWatson = process.env.IBMTTS_APIKEY;
const apiurlServiceWatson = process.env.IBMTTS_SERVICEURL;
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
var routes = function () {
//#region CHARACTERSCONVERSATION
router.get('/getAllCharConv', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersConversation;`, res, req.originalUrl);
});
router.get('/getCharacterconversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`SELECT
*
from charactersConversation
where idcharactersConversation = ${idcharactersConversation};`, res, req.originalUrl);
});
router.post('/insertCharConv', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const description = req.body.description;
const idcharacters_1 = parseInt(req.body.idcharacters_1);
const idcharacters_2 = parseInt(req.body.idcharacters_2);
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
execSQLQuery(`INSERT INTO charactersConversation (description, idcharacters_1, idcharacters_2, idcharactersBackground, idcharactersFonts)
VALUES (?, ?, ?, ?, ?);`, res, req.originalUrl, [description, idcharacters_1, idcharacters_2, idcharactersBackground, idcharactersFonts]);
});
router.patch('/updateCharConv', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const description = req.body.description;
const idcharacters_1 = parseInt(req.body.idcharacters_1);
const idcharacters_2 = parseInt(req.body.idcharacters_2);
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
execSQLQuery(`UPDATE charactersConversation SET
description = ?,
idcharacters_1 = ?,
idcharacters_2 = ?,
idcharactersBackground = ?,
idcharactersFonts = ?
WHERE idcharactersConversation = ?;`, res, req.originalUrl, [description, idcharacters_1, idcharacters_2, idcharactersBackground, idcharactersFonts, idcharactersConversation]);
});
router.get('/getCharConvDetails/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`select
cc.idcharactersConversation,
cc.description,
cp.seconds,
cp.speed,
cc.idcharacters_1,
(select ch1.description from characters ch1 where ch1.idcharacters = cc.idcharacters_1) as 'character_1',
cc.idcharacters_2,
(select ch2.description from characters ch2 where ch2.idcharacters = cc.idcharacters_2) as 'character_2',
cc.idcharactersBackground,
cb.description as 'background',
cb.ext as 'backgroundExt',
cc.idcharactersFonts,
cf.description as 'font',
cp.fontSize,
cp.fontColor,
cp.idcharactersPhrases,
cp.charactertalking,
cp.idcharactersBaloons,
ba.description as 'baloon',
ba.ext as 'baloonExt',
cp.baloonColor,
cp.phrase,
cp.idcharactersFeelings_1,
(select cf1.description from charactersFeelings cf1 where cf1.idcharactersFeelings = cp.idcharactersFeelings_1) as 'characterFeeling_1',
cp.idcharactersFeelings_2,
(select cf2.description from charactersFeelings cf2 where cf2.idcharactersFeelings = cp.idcharactersFeelings_2) as 'characterFeeling_2',
cp.sintetizevoice,
cp.idcharactersVoices,
(select cv.description from charactersVoices cv where cv.idcharactersVoices = cp.idcharactersVoices) as 'voicename',
(select cv.voice from charactersVoices cv where cv.idcharactersVoices = cp.idcharactersVoices) as 'voice',
cp.idcharactersTransitions,
ct.description as 'transition',
ct.ext as 'transitionExt',
cp.ordem
from charactersConversation cc
left join charactersBackground cb on cb.idcharactersBackground = cc.idcharactersBackground
left join charactersFonts cf on cf.idcharactersFonts = cc.idcharactersFonts
left join charactersPhrases cp on cp.idcharactersConversation = cc.idcharactersConversation
left join charactersBaloons ba on ba.idcharactersBaloons = cp.idcharactersBaloons
left join charactersTransitions ct on ct.idcharactersTransitions = cp.idcharactersTransitions
where cc.idcharactersConversation = ${idcharactersConversation}
order by cp.ordem asc;`, res, req.originalUrl);
});
router.delete('/deleteCharacterconversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`delete from charactersConversation
where idcharactersConversation = ${idcharactersConversation};`, res, req.originalUrl);
});
//#endregion
//#region CHARACTERS
router.get('/getAllCharacters', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from characters;`, res, req.originalUrl);
});
router.get('/getCharacter/:idcharacters', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.params.idcharacters);
execSQLQuery(`SELECT
*
from characters
where idcharacters = ${idcharacters};`, res, req.originalUrl);
});
router.post('/insertCharacter', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.body.idcharacters);
const description = req.body.description;
execSQLQuery(`INSERT INTO characters (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateCharacter', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.body.idcharacters);
const description = req.body.description;
execSQLQuery(`UPDATE characters SET
description = ?
WHERE idcharacters = ?;`, res, req.originalUrl, [description, idcharacters]);
});
router.delete('/deleteCharacter/:idcharacters', verifyJWT, (req, res) => {
const idcharacters = parseInt(req.params.idcharacters);
execSQLQuery(`delete from characters
where idcharacters = ${idcharacters};`, res, req.originalUrl);
});
//#endregion
//#region BACKGROUNDS
router.get('/getAllBackgrounds', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersBackground;`, res, req.originalUrl);
});
router.get('/getBackground/:idcharactersBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.params.idcharactersBackground);
execSQLQuery(`SELECT
*
from charactersBackground
where idcharactersBackground = ${idcharactersBackground};`, res, req.originalUrl);
});
router.post('/insertBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`INSERT INTO charactersBackground (description, ext)
VALUES (?, ?);`, res, req.originalUrl, [description, ext]);
});
router.patch('/updateBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.body.idcharactersBackground);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`UPDATE charactersBackground SET
description = ?,
ext = ?
WHERE idcharactersBackground = ?;`, res, req.originalUrl, [description, ext, idcharactersBackground]);
});
router.delete('/deleteBackground/:idcharactersBackground', verifyJWT, (req, res) => {
const idcharactersBackground = parseInt(req.params.idcharactersBackground);
execSQLQuery(`delete from charactersBackground
where idcharactersBackground = ${idcharactersBackground};`, res, req.originalUrl);
});
//#endregion
//#region FEELINGS
router.get('/getAllFeelings', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersFeelings;`, res, req.originalUrl);
});
router.get('/getFeeling/:idcharactersFeelings', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.params.idcharactersFeelings);
execSQLQuery(`SELECT
*
from charactersFeelings
where idcharactersFeelings = ${idcharactersFeelings};`, res, req.originalUrl);
});
router.post('/insertFeeling', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.body.idcharactersFeelings);
const description = req.body.description;
execSQLQuery(`INSERT INTO charactersFeelings (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateFeeling', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.body.idcharactersFeelings);
const description = req.body.description;
execSQLQuery(`UPDATE charactersFeelings SET
description = ?
WHERE idcharactersFeelings = ?;`, res, req.originalUrl, [description, idcharactersFeelings]);
});
router.delete('/deleteFeeling/:idcharactersFeelings', verifyJWT, (req, res) => {
const idcharactersFeelings = parseInt(req.params.idcharactersFeelings);
execSQLQuery(`delete from charactersFeelings
where idcharactersFeelings = ${idcharactersFeelings};`, res, req.originalUrl);
});
//#endregion
//#region FONTS
router.get('/getAllFonts', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersFonts;`, res, req.originalUrl);
});
router.get('/getFont/:idcharactersFonts', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.params.idcharactersFonts);
execSQLQuery(`SELECT
*
from charactersFonts
where idcharactersFonts = ${idcharactersFonts};`, res, req.originalUrl);
});
router.post('/insertFont', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
const description = req.body.description;
execSQLQuery(`INSERT INTO charactersFonts (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateFont', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.body.idcharactersFonts);
const description = req.body.description;
execSQLQuery(`UPDATE charactersFonts SET
description = ?
WHERE idcharactersFonts = ?;`, res, req.originalUrl, [description, idcharactersFonts]);
});
router.delete('/deleteFont/:idcharactersFonts', verifyJWT, (req, res) => {
const idcharactersFonts = parseInt(req.params.idcharactersFonts);
execSQLQuery(`delete from charactersFonts
where idcharactersFonts = ${idcharactersFonts};`, res, req.originalUrl);
});
//#endregion
//#region VOICES
router.get('/getAllVoices', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersVoices;`, res, req.originalUrl);
});
router.get('/getVoice/:idcharactersVoices', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.params.idcharactersVoices);
execSQLQuery(`SELECT
*
from charactersVoices
where idcharactersVoices = ${idcharactersVoices};`, res, req.originalUrl);
});
router.post('/insertVoice', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.body.idcharactersVoices);
const description = req.body.description;
execSQLQuery(`INSERT INTO charactersVoices (description)
VALUES (?);`, res, req.originalUrl, [description]);
});
router.patch('/updateVoice', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.body.idcharactersVoices);
const description = req.body.description;
execSQLQuery(`UPDATE charactersVoices SET
description = ?
WHERE idcharactersVoices = ?;`, res, req.originalUrl, [description, idcharactersVoices]);
});
router.delete('/deleteVoice/:idcharactersVoices', verifyJWT, (req, res) => {
const idcharactersVoices = parseInt(req.params.idcharactersVoices);
execSQLQuery(`delete from charactersVoices
where idcharactersVoices = ${idcharactersVoices};`, res, req.originalUrl);
});
//#endregion
//#region BALOONS
router.get('/getAllBaloons', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersBaloons;`, res, req.originalUrl);
});
router.get('/getBaloon/:idcharactersBaloons', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.params.idcharactersBaloons);
execSQLQuery(`SELECT
*
from charactersBaloons
where idcharactersBaloons = ${idcharactersBaloons};`, res, req.originalUrl);
});
router.post('/insertBaloon', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.body.idcharactersBaloons);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`INSERT INTO charactersBaloons (description, ext)
VALUES (?, ?);`, res, req.originalUrl, [description, ext]);
});
router.patch('/updateBaloon', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.body.idcharactersBaloons);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`UPDATE charactersBaloons SET
description = ?,
ext = ?
WHERE idcharactersBaloons = ?;`, res, req.originalUrl, [description, ext, idcharactersBaloons]);
});
router.delete('/deleteBaloon/:idcharactersBaloons', verifyJWT, (req, res) => {
const idcharactersBaloons = parseInt(req.params.idcharactersBaloons);
execSQLQuery(`delete from charactersBaloons
where idcharactersBaloons = ${idcharactersBaloons};`, res, req.originalUrl);
});
//#endregion
//#region PHRASES
router.get('/getAllPhrases', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersPhrases;`, res, req.originalUrl);
});
router.get('/getPhrase/:idcharactersPhrases', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.params.idcharactersPhrases);
execSQLQuery(`SELECT
*
from charactersPhrases
where idcharactersPhrases = ${idcharactersPhrases};`, res, req.originalUrl);
});
router.get('/getPhrasesInConversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`SELECT
*
from charactersPhrases
where idcharactersConversation = ${idcharactersConversation}
order by ordem asc;`, res, req.originalUrl);
});
router.post('/insertPhrase', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.body.idcharactersPhrases);
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const seconds = parseFloat(req.body.seconds);
const speed = req.body.speed;
const charactertalking = req.body.charactertalking;
const idcharactersBaloons = req.body.idcharactersBaloons;
const baloonColor = req.body.baloonColor;
const phrase = req.body.phrase;
const fontSize = req.body.fontSize;
const fontColor = req.body.fontColor;
const idcharactersFeelings_1 = req.body.idcharactersFeelings_1;
const idcharactersFeelings_2 = req.body.idcharactersFeelings_2;
const sintetizevoice = req.body.sintetizevoice ? 1 : 0;
const idcharactersVoices = req.body.idcharactersVoices;
const idcharactersTransitions = req.body.idcharactersTransitions;
const ordem = parseInt(req.body.ordem);
execSQLQuery(`INSERT INTO charactersPhrases (idcharactersConversation, seconds, speed, charactertalking, idcharactersBaloons, baloonColor, fontSize, fontColor, phrase, idcharactersFeelings_1, idcharactersFeelings_2, sintetizevoice, idcharactersVoices, idcharactersTransitions, ordem)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`, res, req.originalUrl, [idcharactersConversation, seconds, speed, charactertalking, idcharactersBaloons, baloonColor, fontSize, fontColor, phrase, idcharactersFeelings_1, idcharactersFeelings_2, sintetizevoice, idcharactersVoices, idcharactersTransitions, ordem]);
});
router.patch('/updatePhrase', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.body.idcharactersPhrases);
const idcharactersConversation = parseInt(req.body.idcharactersConversation);
const seconds = parseFloat(req.body.seconds);
const speed = parseFloat(req.body.speed);
const charactertalking = parseInt(req.body.charactertalking);
const idcharactersBaloons = parseInt(req.body.idcharactersBaloons);
const baloonColor = req.body.baloonColor;
const phrase = req.body.phrase;
const idcharactersFeelings_1 = parseInt(req.body.idcharactersFeelings_1);
const idcharactersFeelings_2 = parseInt(req.body.idcharactersFeelings_2);
const sintetizevoice = req.body.sintetizevoice ? 1 : 0;
const idcharactersVoices = parseInt(req.body.idcharactersVoices);
const idcharactersTransitions = parseInt(req.body.idcharactersTransitions);
const ordem = parseInt(req.body.ordem);
execSQLQuery(`UPDATE charactersPhrases SET
idcharactersConversation = ?,
seconds = ?,
speed = ?,
charactertalking = ?,
idcharactersBaloons = ?,
baloonColor = ?,
phrase = ?,
idcharactersFeelings_1 = ?,
idcharactersFeelings_2 = ?,
sintetizevoice = ?,
idcharactersVoices = ?,
idcharactersTransitions = ?,
ordem = ?
WHERE idcharactersPhrases = ?;`, res, req.originalUrl, [idcharactersConversation, seconds, speed, charactertalking, idcharactersBaloons, baloonColor, phrase, idcharactersFeelings_1, idcharactersFeelings_2, sintetizevoice, idcharactersVoices, idcharactersTransitions, ordem, idcharactersPhrases]);
});
router.delete('/deletePhrase/:idcharactersPhrases', verifyJWT, (req, res) => {
const idcharactersPhrases = parseInt(req.params.idcharactersPhrases);
execSQLQuery(`delete from charactersPhrases
where idcharactersPhrases = ${idcharactersPhrases};`, res, req.originalUrl);
});
router.delete('/deletePhrasesInConversation/:idcharactersConversation', verifyJWT, (req, res) => {
const idcharactersConversation = parseInt(req.params.idcharactersConversation);
execSQLQuery(`delete from charactersPhrases
where idcharactersConversation = ${idcharactersConversation};`, res, req.originalUrl);
});
//#endregion
//#region TRANSITIONS
router.get('/getAllTransitions', verifyJWT, (req, res) => {
execSQLQuery(`SELECT
*
from charactersTransitions;`, res, req.originalUrl);
});
router.get('/getTransition/:idcharactersTransitions', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.params.idcharactersTransitions);
execSQLQuery(`SELECT
*
from charactersTransitions
where idcharactersTransitions = ${idcharactersTransitions};`, res, req.originalUrl);
});
router.post('/insertTransition', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.body.idcharactersTransitions);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`INSERT INTO charactersTransitions (description, ext)
VALUES (?, ?);`, res, req.originalUrl, [description, ext]);
});
router.patch('/updateTransition', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.body.idcharactersTransitions);
const description = req.body.description;
const ext = req.body.ext;
execSQLQuery(`UPDATE charactersTransitions SET
description = ?,
ext = ?
WHERE idcharactersTransitions = ?;`, res, req.originalUrl, [description, ext, idcharactersTransitions]);
});
router.delete('/deleteTransition/:idcharactersTransitions', verifyJWT, (req, res) => {
const idcharactersTransitions = parseInt(req.params.idcharactersTransitions);
execSQLQuery(`delete from charactersTransitions
where idcharactersTransitions = ${idcharactersTransitions};`, res, req.originalUrl);
});
//#endregion
router.post('/tts', verifyJWT, (req, res) => {
const Texto = req.body.texto;
const Velocidade = req.body.speed;
const idzoevoices = req.body.idzoevoices;
const PollyVoice = req.body.PollyVoice;
const NomeArquivo = "sintetize.mp3";
const shell = require('shelljs');
mysqlConnection.query(`SELECT cf.TTSmode, (SELECT voice FROM zoevoices WHERE idzoevoices = 1) as voice FROM config cf;`, function (error, Config, fields) {
const TTSMode = Config[0]['TTSmode'];
let Voz = Config[0]['voice'];
if (PollyVoice != "")
Voz = PollyVoice;
if (TTSMode == 3) { // WIDEO
const request = require('request');
var options = {
uri: 'https://texttospeechapi.wideo.co/api/wideo-text-to-speech',
method: 'POST',
json: { "data":{"text":Texto,"speed":Velocidade,"voice":Voz} }
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
shell.exec(`wget "${response['body']['result']['url']}" -O ${Variables("src_media")}/audiosZoe/${NomeArquivo} -q;`, function(Sucesso) {
EnviarAudio(NomeArquivo, true, error, res, req);
});
}
else {
console.log(error);
EnviarAudio(NomeArquivo, false, error, res, req);
}
});
}
else if (TTSMode == 4) { // AMAZON POLLY
shell.exec(`python ${Variables('src_media')}assets/polly_service.py "${Texto}" "${Variables('src_media')}/audiosZoe/${NomeArquivo}" "${Voz}"`, function(Sucesso) {
EnviarAudio(NomeArquivo, true, null, res, req);
});
}
else if (TTSMode == 6) { // WATSON IBM
const fs = require('fs');
const TextToSpeechV1 = require('ibm-watson/text-to-speech/v1');
const { IamAuthenticator } = require('ibm-watson/auth');
const textToSpeech = new TextToSpeechV1({
authenticator: new IamAuthenticator({ apikey: apikeyWatson }),
serviceUrl: apiurlServiceWatson
});
const params = {
text: Texto,
voice: Voz,
accept: 'audio/wav'
};
console.log("A" + " " + NomeArquivo);
textToSpeech.synthesize(params).then(response => {
const audio = response.result;
return textToSpeech.repairWavHeaderStream(audio);
}).then(repairedFile => {
fs.writeFileSync(`${Variables("src_media")}audiosZoe/${NomeArquivo}`, repairedFile);
console.log('audio.wav written with a corrected wav header');
//EnviarAudio(NomeArquivo.replace(".mp3", ".wav"), true, null, res, req);
shell.exec(`ffmpeg -loglevel panic -i ${Variables("src_media")}audiosZoe/${NomeArquivo} ${Variables("src_media")}audiosZoe/${NomeArquivo} -o`, function(Sucesso) {
EnviarAudio(NomeArquivo, true, null, res, req);
});
}).catch(err => {
console.log(err);
});
}
});
});
function EnviarAudio(NomeArquivo, Sucesso, error, res, req) {
if (Sucesso) {
console.log(new Date().toUTCString() + " - " + req.originalUrl + " success 200");
res.send(JSON.stringify({
"status": 200,
"error": error,
"url_audio": "audiosZoe/" + NomeArquivo,
}));
}
else {
console.log(new Date().toUTCString() + " - " + req.originalUrl + " error 500");
res.send(JSON.stringify({
"status": 500,
"error": error,
"url_audio": null,
}));
}
}
router.get('/SalvarAudioSintetizado/:nome', verifyJWT, (req, res) => {
const NomeArquivo = req.params.nome;
const shell = require('shelljs');
shell.exec(`cp ${Variables("src_media")}/audiosZoe/sintetize.mp3 ${Variables("src_media")}/zoeGamesResources/audios/${NomeArquivo}.mp3`, function(Sucesso) {
res.send(true);
});
});
return router;
};
module.exports = routes;