add: improved sql requests

This commit is contained in:
Lukian 2025-05-12 10:32:28 +02:00
parent bd3cbc528c
commit 1317d431d0
3 changed files with 95 additions and 35 deletions

View file

@ -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;

View file

@ -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(' ')) {

View file

@ -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
`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
`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
`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`,
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
`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
`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,