add: added limit param to message get url to send fewer messages

This commit is contained in:
Lukian 2025-05-11 21:32:19 +02:00
parent 9052a99972
commit bd3cbc528c
3 changed files with 19 additions and 10 deletions

View file

@ -4,17 +4,13 @@ const {
getChannels, getChannels,
getChannel, getChannel,
addChannel, addChannel,
getMessage,
getMessages, getMessages,
addMessage, addMessage,
deleteMessage,
addMention, addMention,
getMentions, getMentions,
getUserByUsername, getUserByUsername,
deleteChannelMessages, deleteChannelMessages,
deleteChannel, deleteChannel,
setHasReplies,
addReply,
getMessageReplies getMessageReplies
} = require('../libs/mysql'); } = require('../libs/mysql');
const rateLimit = require("express-rate-limit"); const rateLimit = require("express-rate-limit");
@ -130,13 +126,14 @@ async function getReplies(message, connection) {
router.get('/:name/messages', async (req, res) => { router.get('/:name/messages', async (req, res) => {
const name = req.params.name; const name = req.params.name;
const limit = Number(req.query.limit) || 10;
const connection = await getConnection(); const connection = await getConnection();
const channel = await getChannel(connection, name); const channel = await getChannel(connection, name);
if (!channel[0]) { if (!channel[0]) {
connection.end(); connection.end();
return res.send('No channel found'); return res.send('No channel found');
} }
const messages = await getMessages(connection, channel[0].id); const messages = await getMessages(connection, channel[0].id, limit);
for (const message of messages) { for (const message of messages) {
if (message.content.includes('@')) { if (message.content.includes('@')) {

View file

@ -335,7 +335,7 @@ function deleteChannelMessages(connection, channel_id) {
}); });
} }
function getMessages(connection, channel_id) { 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, user_id, username, content, date, channels.name AS channel_name, has_replies
@ -343,8 +343,9 @@ function getMessages(connection, channel_id) {
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 WHERE channel_id = ? AND reply_to_id IS NULL
ORDER BY date DESC`, ORDER BY date DESC
[channel_id], LIMIT ?`,
[channel_id, limit],
(error, result) => { (error, result) => {
if (error) { if (error) {
reject(new Error(error)); reject(new Error(error));

View file

@ -140,6 +140,17 @@ export default function ChannelPage({socket}: {socket: WebSocket}) {
} }
}, [message]); }, [message]);
useEffect(() => {
axios
.get(`/api/channels/${name}/messages?limit=${maxMessageToShown}`)
.then((res) => {
setMessages(res.data);
})
.catch((err) => {
console.error(err.response.data);
});
}, [maxMessageToShown]);
if (noChannel) { if (noChannel) {
return ( return (
<div className="forum-page"> <div className="forum-page">
@ -247,7 +258,7 @@ export default function ChannelPage({socket}: {socket: WebSocket}) {
{messages ? ( {messages ? (
<div className="messages-list"> <div className="messages-list">
{messages?.length === 0 && <p>No messages yet.</p>} {messages?.length === 0 && <p>No messages yet.</p>}
{messages.slice(0, maxMessageToShown).map((message) => ( {messages.map((message) => (
<MessageComponent <MessageComponent
key={message.id} key={message.id}
message={message} message={message}
@ -255,7 +266,7 @@ export default function ChannelPage({socket}: {socket: WebSocket}) {
channel={channel} channel={channel}
/> />
))} ))}
{messages.length > maxMessageToShown && ( {messages.length == maxMessageToShown && (
<button onClick={() => setMaxMessageToShown(maxMessageToShown + 10)}>Show more</button> <button onClick={() => setMaxMessageToShown(maxMessageToShown + 10)}>Show more</button>
)} )}
</div> </div>