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 slowDown = require("express-slow-down");
|
||||
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({
|
||||
windowMs: 1 * 1000,
|
||||
|
@ -156,7 +163,7 @@ router.get('/:name/messages', async (req, res) => {
|
|||
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 name = req.params.name;
|
||||
const user = req.user;
|
||||
|
|
|
@ -7,7 +7,6 @@ const {
|
|||
addMention,
|
||||
getMentions,
|
||||
getUserByUsername,
|
||||
setHasReplies,
|
||||
addReply,
|
||||
getMessageReplies
|
||||
} = 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 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;
|
||||
|
||||
for (const word of message.split(' ')) {
|
||||
|
|
|
@ -338,11 +338,15 @@ function deleteChannelMessages(connection, channel_id) {
|
|||
function getMessages(connection, channel_id, limit) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query(
|
||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
||||
FROM messages
|
||||
`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
|
||||
JOIN users ON messages.user_id = users.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
|
||||
LIMIT ?`,
|
||||
[channel_id, limit],
|
||||
|
@ -359,11 +363,15 @@ function getMessages(connection, channel_id, limit) {
|
|||
function getMessage(connection, message_id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query(
|
||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
||||
FROM messages
|
||||
`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
|
||||
JOIN users ON messages.user_id = users.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],
|
||||
(error, result) => {
|
||||
if (error) {
|
||||
|
@ -378,11 +386,16 @@ function getMessage(connection, message_id) {
|
|||
function getLastMessages(connection) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query(
|
||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
||||
FROM messages
|
||||
`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
|
||||
JOIN users ON messages.user_id = users.id
|
||||
JOIN channels ON messages.channel_id = channels.id
|
||||
ORDER BY date DESC LIMIT 5`,
|
||||
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
|
||||
GROUP BY messages.id
|
||||
ORDER BY date DESC
|
||||
LIMIT 5`,
|
||||
(error, result) => {
|
||||
if (error) {
|
||||
reject(new Error(error));
|
||||
|
@ -396,12 +409,17 @@ function getLastMessages(connection) {
|
|||
function getUserLastMessages(connection, username) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query(
|
||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
||||
FROM messages
|
||||
`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
|
||||
JOIN users ON messages.user_id = users.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 = ?
|
||||
ORDER BY date DESC LIMIT 5`,
|
||||
GROUP BY messages.id
|
||||
ORDER BY date DESC
|
||||
LIMIT 5`,
|
||||
[username],
|
||||
(error, result) => {
|
||||
if (error) {
|
||||
|
@ -416,11 +434,16 @@ function getUserLastMessages(connection, username) {
|
|||
function getMessageReplies(connection, message_id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.query(
|
||||
`SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
|
||||
FROM messages
|
||||
`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
|
||||
JOIN users ON messages.user_id = users.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],
|
||||
(error, result) => {
|
||||
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 |
|
||||
// +---------------------------+
|
||||
|
@ -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 = {
|
||||
getConnection,
|
||||
|
||||
|
@ -606,7 +662,6 @@ module.exports = {
|
|||
getUserLastMessages,
|
||||
getLastMessages,
|
||||
getMessageReplies,
|
||||
setHasReplies,
|
||||
|
||||
addMention,
|
||||
getMentions,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue