ZoeApi/controllers/chatController.js

250 lines
9.5 KiB
JavaScript

require('../connections/mysql-server');
require('../helpers/CheckToken');
require('../helpers/config');
const mysql = require('mysql');
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({
limit: '10mb',
extended: true
}));
router.use(bodyParser.json({
limit: '10mb',
extended: true
}));
var MySQLConfig = {
connectionLimit: 10,
host: Variables('ip_mysql'),
user: Variables('user_mysql'),
database: Variables('database_mysql'),
password: Variables('password_mysql'),
charset: "utf8mb4"
}
const connection = mysql.createPool(MySQLConfig);
var routes = function () {
router.get('/getChat/:idusers_from/:idusers_to/:db', verifyJWT, (req, res) => {
let idusers_from = req.params.idusers_from;
let idusers_to = req.params.idusers_to;
let banco = req.params.db;
ExecutarQuery(`SELECT idchat, idusers_from, idusers_to, visible,
DATE_FORMAT(time_sent, '%d/%m/%Y %h:%i') AS 'time_sent',
DATE_FORMAT(time_read, '%d/%m/%Y %h:%i') AS 'time_read',
message, quotation FROM chat WHERE
(((idusers_from = ${idusers_from} AND idusers_to = ${idusers_to}) OR
(idusers_to = ${idusers_from} AND idusers_from = ${idusers_to})) AND banco = '${banco}');`, res, req.originalUrl);
});
router.post('/sendMessage', verifyJWT, (req, res) => {
const idusers_from = req.body.idusers_from;
const idusers_to = req.body.idusers_to;
const message = req.body.message;
const banco = req.body.banco;
const quotation = req.body.quotation;
ExecutarQuery(`INSERT INTO chat(idusers_from, idusers_to, message, banco, quotation)
VALUES (?, ?, ?, ?, ?);`, res, req.originalUrl, [idusers_from, idusers_to, message, banco, quotation]);
});
router.get('/setReaded/:idchat', verifyJWT, (req, res) => {
let idchat = req.params.idchat;
ExecutarQuery(`UPDATE chat SET
time_read = now()
WHERE idchat = ${idchat};`, res, req.originalUrl);
});
router.get('/removeMessage/:idchat', verifyJWT, (req, res) => {
let idchat = req.params.idchat;
ExecutarQuery(`UPDATE chat SET
visible = 0
WHERE idchat = ${idchat};`, res, req.originalUrl);
});
router.get('/getAllchats/:tipo/:idusers/:db', verifyJWT, (req, res) => {
let tipo = req.params.tipo;
let idusers = req.params.idusers;
let db = req.params.db;
let sqlQuery = ``;
if (tipo == 1) { // PROFESSOR
sqlQuery = `select *,
(
select C.NomeVersao
from ${db}Cursos C
where C.Codigo = (
select top(1) TT.IDCurso
from ${db}TreinandosTurmas TT
where TT.IDMatricula = R.idusers_para
)
) AS 'nomeCurso'
from (
SELECT DISTINCT TT.IDMatricula AS 'idusers_para',
CLI.Nome AS 'nomePara',
F.IDFuncionario AS 'idusers_de',
F.Nome AS 'nomeDe'
from ${db}TreinandosTurmas TT
inner join ${db}TurmasAgendaCalendario TAC
on TAC.IdTurma = TT.CodigoTurma
inner join ${db}Funcionarios F
on F.IDFuncionario = TAC.IdInstrutor
inner join ${db}Clientes CLI
on CLI.IDCliente = TT.IDTreinando
/*WHERE TAC.IdInstrutor = ${idusers}*/
) R`;
}
else if (tipo == 2) { // TODOS OS USUARIOS
sqlQuery = `select F.IDFuncionario AS 'idusers_para', F.Nome AS 'nomePara', 0 as Tipo
from ${db}Funcionarios F
where F.Desativado = 0
union all
select distinct M.IDMatricula AS 'idusers_para', C.Nome AS 'nomePara', 1 as Tipo
from ${db}Matriculas M
inner join ${db}TreinandosTurmas TT
on TT.IDMatricula = M.IDMatricula
inner join ${db}Clientes C
on C.IDCliente = TT.IDTreinando;`;
}
else if (tipo == 4) { // ALUNO
sqlQuery = `/*SELECT TOP 1 TT.IDMatricula AS 'idusers_de',
CLI.Nome AS 'nomeDe',
F.IDFuncionario AS 'idusers_para',
F.Nome AS 'nomePara',
TT.IDCurso AS 'idcourses',
C.NomeVersao AS 'nomeCurso'
from ${db}TreinandosTurmas TT
inner join ${db}Cursos C
on C.Codigo = TT.IDCurso
inner join ${db}TurmasAgendaCalendario TAC
on TAC.IdTurma = TT.CodigoTurma
inner join ${db}Funcionarios F
on F.IDFuncionario = TAC.IdInstrutor
inner join ${db}Clientes CLI
on CLI.IDCliente = TT.IDTreinando
WHERE TT.IDMatricula = ${idusers} ORDER BY TT.IDCurso DESC;*/
select F.IDFuncionario AS 'idusers_para', F.Nome AS 'nomePara', 0 as Tipo
from ${db}Funcionarios F
where F.Desativado = 0;`;
}
execSQLQuery2(sqlQuery, res, req.originalUrl);
})
router.post('/createGroup', verifyJWT, (req, res) => {
const name = req.body.name;
const created_by = req.body.created_by;
const banco = req.body.banco;
ExecutarQuery(`INSERT INTO chatgroups(name, created_by, banco)
VALUES (?, ?, ?);`, res, req.originalUrl, [name, created_by, banco]);
});
router.post('/insertMember', verifyJWT, (req, res) => {
const idchatgroups = parseInt(req.body.idchatgroups);
const idusers = parseInt(req.body.idusers);
const enabled = req.body.enabled ? 1 : 0;
const isadm = req.body.isadm ? 1 : 0;
const inserted_by = parseInt(req.body.inserted_by);
ExecutarQuery(`INSERT INTO chatusergroups(idchatgroups, idusers, enabled, isadm, inserted_by)
VALUES (${idchatgroups}, ${idusers}, ${enabled}, ${isadm}, ${inserted_by});`, res, req.originalUrl);
});
router.get('/getAllGroups/:idusers/:db', verifyJWT, (req, res) => {
let idusers = req.params.idusers;
let banco = req.params.db;
let sqlQuery = `SELECT ${idusers} AS idusers_de, '' AS nomeDe, cu.idchatgroups AS idusers_para,
cg.name AS nomePara, 'Grupo' AS nomeCurso, 0 AS idcourses, cu.isadm
FROM chatusergroups cu
INNER JOIN chatgroups cg
ON cg.idchatgroups = cu.idchatgroups
WHERE cu.idusers = ${idusers} AND cg.banco = "${banco}";`;
ExecutarQuery(sqlQuery, res, req.originalUrl);
});
router.get('/getChatGroup/:idchatgroups/:db', verifyJWT, (req, res) => {
let idchatgroups = req.params.idchatgroups;
let banco = req.params.db;
ExecutarQuery(`SELECT idchat, idusers_from, idusers_to, visible,
DATE_FORMAT(time_sent, '%d/%m/%Y %h:%i') AS 'time_sent',
DATE_FORMAT(time_read, '%d/%m/%Y %h:%i') AS 'time_read',
message, quotation FROM chat WHERE idusers_to = ${idchatgroups} AND banco = "${banco}";`, res, req.originalUrl);
});
router.get('/getGroupMembers/:idchatgroups', verifyJWT, (req, res) => {
const idchatgroups = parseInt(req.params.idchatgroups);
ExecutarQuery(`SELECT
*
FROM chatusergroups
WHERE idchatgroups = ${idchatgroups};`, res, req.originalUrl);
});
router.get('/removeMember/:idchatusergroups', verifyJWT, (req, res) => {
const idchatusergroups = parseInt(req.params.idchatusergroups);
ExecutarQuery(`DELETE FROM chatusergroups
WHERE idchatusergroups = ${idchatusergroups};`, res, req.originalUrl);
});
router.get('/updateGroupname/:idchatgroups/:name', verifyJWT, (req, res) => {
const idchatgroups = parseInt(req.params.idchatgroups);
const name = req.params.name;
ExecutarQuery(`UPDATE chatgroups SET
name = ?
WHERE idchatgroups = ?;`, res, req.originalUrl, [name, idchatgroups]);
});
router.get('/deleteGroup/:idchatgroups', verifyJWT, (req, res) => {
let idchatgroups = req.params.idchatgroups;
mysqlConnection.query(`DELETE FROM chatusergroups WHERE idchatgroups = ${idchatgroups};`, function (error, results, fields) {
console.log(error);
console.log(results);
ExecutarQuery(`DELETE FROM chatgroups WHERE idchatgroups = ${idchatgroups};`, res, req.originalUrl);
});
});
router.get('/getAllchatsViewer/:db', verifyJWT, (req, res) => {
let db = req.params.db;
let sqlQuery = `SELECT DISTINCT
R.idusers_from, R.idusers_to, R.banco,
(SELECT c1.message FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent DESC LIMIT 1) AS 'message',
(SELECT date_format(c1.time_sent, '%d/%m/%Y %h:%i') FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent ASC LIMIT 1) AS 'time_begin',
(SELECT date_format(c1.time_sent, '%d/%m/%Y %h:%i') FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent DESC LIMIT 1) AS 'time_last',
(SELECT COUNT(*) FROM chat c1 WHERE c1.idusers_from = R.idusers_from AND c1.idusers_to = R.idusers_to ORDER BY c1.time_sent DESC LIMIT 1) AS 'amout',
case when R.idusers_to < 1250 then (select cg.name from chatgroups cg where cg.idchatgroups = R.idusers_to) else null end as 'group'
FROM
(select distinct * from (
select c1.idusers_from, c1.idusers_to, c1.banco from chat c1
union all
select c1.idusers_from as 'idusers_to', c1.idusers_to as 'idusers_from', c1.banco from chat c1) R
WHERE R.idusers_from >= 1250 and R.idusers_from < 190000 and R.banco = '${db}'
order by R.idusers_to, R.idusers_from ASC) R
ORDER BY time_last DESC;`;
ExecutarQuery(sqlQuery, res, req.originalUrl);
})
return router;
};
module.exports = routes;
function ExecutarQuery(sqlQuery, res, url, Parametros = null) {
connection.query(sqlQuery, Parametros, (error, results) => {
if (!error) {
res.send(JSON.stringify({
"status": 200,
"error": error,
"response": results
}));
console.log(url + " success 200");
}
else {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": results
}));
console.log(url + " error 500");
}
})
}