generated from lucien/api-template
add: improved sql requests
This commit is contained in:
parent
bd3cbc528c
commit
1317d431d0
3 changed files with 95 additions and 35 deletions
|
@ -16,6 +16,13 @@ const {
|
||||||
const rateLimit = require("express-rate-limit");
|
const rateLimit = require("express-rate-limit");
|
||||||
const slowDown = require("express-slow-down");
|
const slowDown = require("express-slow-down");
|
||||||
const { checkAuth } = require('../libs/middlewares');
|
const { checkAuth } = require('../libs/middlewares');
|
||||||
|
const multer = require('multer');
|
||||||
|
|
||||||
|
const upload = multer({ dest: 'data/attachements/' })
|
||||||
|
upload.limits = {
|
||||||
|
fileSize: 1024 * 1024 * 5,
|
||||||
|
files: 1,
|
||||||
|
};
|
||||||
|
|
||||||
const limiter = rateLimit({
|
const limiter = rateLimit({
|
||||||
windowMs: 1 * 1000,
|
windowMs: 1 * 1000,
|
||||||
|
@ -156,7 +163,7 @@ router.get('/:name/messages', async (req, res) => {
|
||||||
res.send(messages);
|
res.send(messages);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post('/:name/messages/send', speedLimiter, limiter, checkAuth, async (req, res) => {
|
router.post('/:name/messages/send', speedLimiter, limiter, upload.single("attachement"), checkAuth, async (req, res) => {
|
||||||
const { message } = req.body;
|
const { message } = req.body;
|
||||||
const name = req.params.name;
|
const name = req.params.name;
|
||||||
const user = req.user;
|
const user = req.user;
|
||||||
|
|
|
@ -7,7 +7,6 @@ const {
|
||||||
addMention,
|
addMention,
|
||||||
getMentions,
|
getMentions,
|
||||||
getUserByUsername,
|
getUserByUsername,
|
||||||
setHasReplies,
|
|
||||||
addReply,
|
addReply,
|
||||||
getMessageReplies
|
getMessageReplies
|
||||||
} = require('../libs/mysql');
|
} = require('../libs/mysql');
|
||||||
|
@ -91,7 +90,6 @@ router.post('/:message_id/reply', speedLimiter, limiter, checkAuth, async (req,
|
||||||
|
|
||||||
const channel = await getChannel(connection, originalMessage[0].channel_name);
|
const channel = await getChannel(connection, originalMessage[0].channel_name);
|
||||||
const sent_message = await addReply(connection, channel[0].id, user.id, message.replace("\"", "'"), message_id);
|
const sent_message = await addReply(connection, channel[0].id, user.id, message.replace("\"", "'"), message_id);
|
||||||
await setHasReplies(connection, message_id, true);
|
|
||||||
const new_message_id = sent_message.insertId;
|
const new_message_id = sent_message.insertId;
|
||||||
|
|
||||||
for (const word of message.split(' ')) {
|
for (const word of message.split(' ')) {
|
||||||
|
|
|
@ -338,11 +338,15 @@ function deleteChannelMessages(connection, channel_id) {
|
||||||
function getMessages(connection, channel_id, limit) {
|
function getMessages(connection, channel_id, limit) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
connection.query(
|
connection.query(
|
||||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments
|
||||||
FROM messages
|
FROM messages
|
||||||
JOIN users ON messages.user_id = users.id
|
JOIN users ON messages.user_id = users.id
|
||||||
JOIN channels ON messages.channel_id = channels.id
|
JOIN channels ON messages.channel_id = channels.id
|
||||||
WHERE channel_id = ? AND reply_to_id IS NULL
|
LEFT JOIN mentions ON messages.id = mentions.message_id
|
||||||
|
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
|
||||||
|
LEFT JOIN attachments ON messages.id = attachments.message_id
|
||||||
|
WHERE messages.channel_id = ? AND messages.reply_to_id IS NULL
|
||||||
|
GROUP BY messages.id
|
||||||
ORDER BY date DESC
|
ORDER BY date DESC
|
||||||
LIMIT ?`,
|
LIMIT ?`,
|
||||||
[channel_id, limit],
|
[channel_id, limit],
|
||||||
|
@ -359,11 +363,15 @@ function getMessages(connection, channel_id, limit) {
|
||||||
function getMessage(connection, message_id) {
|
function getMessage(connection, message_id) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
connection.query(
|
connection.query(
|
||||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments
|
||||||
FROM messages
|
FROM messages
|
||||||
JOIN users ON messages.user_id = users.id
|
JOIN users ON messages.user_id = users.id
|
||||||
JOIN channels ON messages.channel_id = channels.id
|
JOIN channels ON messages.channel_id = channels.id
|
||||||
WHERE messages.id = ?`,
|
LEFT JOIN mentions ON messages.id = mentions.message_id
|
||||||
|
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
|
||||||
|
LEFT JOIN attachments ON messages.id = attachments.message_id
|
||||||
|
WHERE messages.id = ?
|
||||||
|
GROUP BY messages.id`,
|
||||||
[message_id],
|
[message_id],
|
||||||
(error, result) => {
|
(error, result) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -378,11 +386,16 @@ function getMessage(connection, message_id) {
|
||||||
function getLastMessages(connection) {
|
function getLastMessages(connection) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
connection.query(
|
connection.query(
|
||||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments
|
||||||
FROM messages
|
FROM messages
|
||||||
JOIN users ON messages.user_id = users.id
|
JOIN users ON messages.user_id = users.id
|
||||||
JOIN channels ON messages.channel_id = channels.id
|
JOIN channels ON messages.channel_id = channels.id
|
||||||
ORDER BY date DESC LIMIT 5`,
|
LEFT JOIN mentions ON messages.id = mentions.message_id
|
||||||
|
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
|
||||||
|
LEFT JOIN attachments ON messages.id = attachments.message_id
|
||||||
|
GROUP BY messages.id
|
||||||
|
ORDER BY date DESC
|
||||||
|
LIMIT 5`,
|
||||||
(error, result) => {
|
(error, result) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
reject(new Error(error));
|
reject(new Error(error));
|
||||||
|
@ -396,12 +409,17 @@ function getLastMessages(connection) {
|
||||||
function getUserLastMessages(connection, username) {
|
function getUserLastMessages(connection, username) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
connection.query(
|
connection.query(
|
||||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments
|
||||||
FROM messages
|
FROM messages
|
||||||
JOIN users ON messages.user_id = users.id
|
JOIN users ON messages.user_id = users.id
|
||||||
JOIN channels ON messages.channel_id = channels.id
|
JOIN channels ON messages.channel_id = channels.id
|
||||||
|
LEFT JOIN mentions ON messages.id = mentions.message_id
|
||||||
|
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
|
||||||
|
LEFT JOIN attachments ON messages.id = attachments.message_id
|
||||||
WHERE username = ?
|
WHERE username = ?
|
||||||
ORDER BY date DESC LIMIT 5`,
|
GROUP BY messages.id
|
||||||
|
ORDER BY date DESC
|
||||||
|
LIMIT 5`,
|
||||||
[username],
|
[username],
|
||||||
(error, result) => {
|
(error, result) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -416,11 +434,16 @@ function getUserLastMessages(connection, username) {
|
||||||
function getMessageReplies(connection, message_id) {
|
function getMessageReplies(connection, message_id) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
connection.query(
|
connection.query(
|
||||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments
|
||||||
FROM messages
|
FROM messages
|
||||||
JOIN users ON messages.user_id = users.id
|
JOIN users ON messages.user_id = users.id
|
||||||
JOIN channels ON messages.channel_id = channels.id
|
JOIN channels ON messages.channel_id = channels.id
|
||||||
WHERE reply_to_id = ?`,
|
LEFT JOIN mentions ON messages.id = mentions.message_id
|
||||||
|
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
|
||||||
|
LEFT JOIN attachments ON messages.id = attachments.message_id
|
||||||
|
WHERE messages.reply_to_id = ?
|
||||||
|
GROUP BY messages.id
|
||||||
|
ORDER BY date DESC`,
|
||||||
[message_id],
|
[message_id],
|
||||||
(error, result) => {
|
(error, result) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -432,21 +455,6 @@ function getMessageReplies(connection, message_id) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function setHasReplies(connection, message_id, has_replies) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
connection.query(
|
|
||||||
`UPDATE messages SET has_replies = ? WHERE id = ?`,
|
|
||||||
[has_replies, message_id],
|
|
||||||
(error, result) => {
|
|
||||||
if (error) {
|
|
||||||
reject(new Error(error));
|
|
||||||
}
|
|
||||||
resolve(result);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// +---------------------------+
|
// +---------------------------+
|
||||||
// | Mentions |
|
// | Mentions |
|
||||||
// +---------------------------+
|
// +---------------------------+
|
||||||
|
@ -576,6 +584,54 @@ function searchEmojis(connection, search) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// +---------------------------+
|
||||||
|
// | Attachemnts |
|
||||||
|
// +---------------------------+
|
||||||
|
|
||||||
|
function addAttachment(connection, message_id, file_name) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
connection.query(
|
||||||
|
`INSERT INTO attachments (message_id, file_name) VALUES (?, ?)`,
|
||||||
|
[message_id, file_name],
|
||||||
|
(error, result) => {
|
||||||
|
if (error) {
|
||||||
|
reject(new Error(error));
|
||||||
|
}
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteUnusedAttachments(connection) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
connection.query(
|
||||||
|
`DELETE FROM attachments WHERE message_id IS NULL`,
|
||||||
|
(error, result) => {
|
||||||
|
if (error) {
|
||||||
|
reject(new Error(error));
|
||||||
|
}
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMessageAttachments(connection, message_id) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
connection.query(
|
||||||
|
`SELECT * FROM attachments WHERE message_id = ?`,
|
||||||
|
[message_id],
|
||||||
|
(error, result) => {
|
||||||
|
if (error) {
|
||||||
|
reject(new Error(error));
|
||||||
|
}
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getConnection,
|
getConnection,
|
||||||
|
|
||||||
|
@ -606,7 +662,6 @@ module.exports = {
|
||||||
getUserLastMessages,
|
getUserLastMessages,
|
||||||
getLastMessages,
|
getLastMessages,
|
||||||
getMessageReplies,
|
getMessageReplies,
|
||||||
setHasReplies,
|
|
||||||
|
|
||||||
addMention,
|
addMention,
|
||||||
getMentions,
|
getMentions,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue