it's working? how? 😳

This commit is contained in:
slawk0
2024-11-27 20:06:02 +01:00
parent 4813c536ff
commit edc3fb13d8
5 changed files with 61 additions and 45 deletions

View File

@@ -42,7 +42,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
}
}, []);
// Adjust height on content change
// Adjust height on message change
useEffect(() => {
adjustHeight();
}, [message, adjustHeight]);
@@ -62,7 +62,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
formData,
{
headers: {
'Content-Type': 'multipart/form-data',
'message-Type': 'multipart/form-data',
},
},
);
@@ -95,11 +95,11 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
}
}
const tempId: string = nanoid(); // Temporary ID for unsent message
const tempId: string = nanoid(); // Temporary ID for unsent messag
const tempMessage: ChatMessages = {
sender: username,
message: data.message.trim(),
content: data.message.trim(),
recipient: contact,
message_id: 0, // Set to 0 because of key={msg.message_id || msg.tempId} in messages list
pending: true,
@@ -121,7 +121,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
status: string;
message_id: number;
tempId: number;
message: string;
content: string;
}) => {
if (response.status === 'ok') {
setMessages((prevMessages) =>
@@ -137,7 +137,7 @@ const MessageForm = ({ contact, setMessages }: MessageFormProps) => {
setFile(null);
}
console.log(
`status: ${response.status}, tempId: ${response.tempId}, message: ${response.message}`,
`status: ${response.status}, tempId: ${response.tempId}, message: ${response.content}`,
);
},
);

View File

@@ -66,7 +66,11 @@ function MessagesArea({
sendContact(msg.sender);
return [
...prevContacts,
{ contact_username: msg.sender, read: false },
{
contact_username: msg.sender,
read: false,
contact_id: msg.message_id,
},
];
}
return prevContacts;
@@ -118,7 +122,7 @@ function MessagesArea({
}`}
key={msg.message_id || msg.tempId}
>
{msg.sender}: {msg.message}
{msg.sender}: {msg.content}
{msg.attachment_url ? (
<div className="mt-2">
{msg.attachment_url.match(/\.(jpg|jpeg|png|gif|bmp|webp)$/i) ? (

View File

@@ -11,7 +11,7 @@ import { getMessages, setContactStatus } from '../api/contactsApi.tsx';
export type ChatMessages = {
sender: string;
message: string;
content: string;
recipient: string;
message_id: number;
tempId: string;

View File

@@ -298,19 +298,9 @@ async function createConversation(senderUsername, receiverUsername) {
}
}
async function getMessages(
senderUsername,
receiverUsername,
limit = 50,
cursor = 0,
) {
async function getMessages(user_id, receiverUsername, limit = 50, cursor = 0) {
let query = `
WITH sender AS (
SELECT user_id
FROM Accounts
WHERE username = $1
),
recipient AS (
WITH recipient AS (
SELECT user_id
FROM Accounts
WHERE username = $2
@@ -332,24 +322,34 @@ async function getMessages(
AND user_id = (SELECT user_id FROM recipient)
)
LIMIT 1
),
sender AS (
SELECT user_id
FROM Accounts
WHERE user_id = $1
)
SELECT * FROM Messages
WHERE conversation_id = (SELECT conversation_id FROM conversation)
AND message_id < $3
ORDER BY message_id DESC
SELECT
m.message_id,
m.content,
m.sent_at,
m.attachment_url,
a.username AS sender_username,
r.username AS recipient_username
FROM Messages m
JOIN Accounts a ON m.user_id = a.user_id
JOIN Memberships mem ON m.conversation_id = mem.conversation_id AND mem.user_id = (SELECT user_id FROM recipient)
JOIN Accounts r ON mem.user_id = r.user_id
WHERE m.conversation_id = (SELECT conversation_id FROM conversation)
AND m.message_id < $3
ORDER BY m.message_id DESC
LIMIT $4;
`;
let params = [senderUsername, receiverUsername, cursor, limit];
let params = [user_id, receiverUsername, cursor, limit];
if (!cursor) {
query = `
WITH sender AS (
SELECT user_id
FROM Accounts
WHERE username = $1
),
recipient AS (
WITH recipient AS (
SELECT user_id
FROM Accounts
WHERE username = $2
@@ -362,7 +362,7 @@ async function getMessages(
SELECT 1
FROM Memberships
WHERE conversation_id = Conversations.conversation_id
AND user_id = (SELECT user_id FROM sender)
AND user_id = $1
)
AND EXISTS (
SELECT 1
@@ -371,17 +371,36 @@ async function getMessages(
AND user_id = (SELECT user_id FROM recipient)
)
LIMIT 1
),
sender AS (
SELECT user_id
FROM Accounts
WHERE user_id = $1
)
SELECT * FROM Messages
WHERE conversation_id = (SELECT conversation_id FROM conversation)
ORDER BY message_id DESC
SELECT
m.message_id,
m.content,
m.sent_at,
m.attachment_url,
a.username AS sender,
r.username AS recipient
FROM Messages m
JOIN Accounts a ON m.user_id = a.user_id
JOIN Memberships mem ON m.conversation_id = mem.conversation_id AND mem.user_id = (SELECT user_id FROM recipient)
JOIN Accounts r ON mem.user_id = r.user_id
WHERE m.conversation_id = (SELECT conversation_id FROM conversation)
ORDER BY m.message_id DESC
LIMIT $3;
`;
params = [senderUsername, receiverUsername, limit];
params = [user_id, receiverUsername, limit];
}
try {
const results = await client.query(query, params);
console.log(
`Get messages for user_id: ${user_id}, receiverUsername: ${receiverUsername}: `,
results.rows,
);
let messages = results.rows;
if (!cursor) {
messages = messages.reverse();

View File

@@ -272,16 +272,9 @@ app.get("/api/chat/messages/:contact", authorizeUser, async (req, res) => {
const limit = parseInt(req.query.limit) || 50;
const cursor = parseInt(req.query.cursor) || 0;
const contactId = await getUserId(req.params.contact);
// if (!contactId) {
// console.log("abcdefg", req.params.contact);
// return res.status(400).json({ messaeg: "Invalid contact" });
// }
const messages = await getMessages(
req.user.user_id,
contactId,
req.params.contact,
limit,
cursor,
);