implement save of thread and members

This commit is contained in:
grimhilt
2023-03-31 16:07:02 +02:00
parent e2bd0bafea
commit 7f28823758
10 changed files with 225 additions and 142 deletions

View File

@@ -2,13 +2,31 @@ const { transformEmojis } = require("../utils/string.js");
const { db, execQueryAsync, execQueryAsyncWithId, execQuery } = require("./db.js");
const { queryFromId, queryToId, queryCcId } = require("./utils/addressQueries.js");
async function createRoom(roomName, ownerId, messageId) {
async function getAllMembers(messageId) {
const query = `
SELECT GROUP_CONCAT(address.address_id) AS is
FROM address
INNER JOIN address_field ON
address_field.address_id = address.address_id AND
address_field.message_id = ?
GROUP BY address_field.message_id
`;
const values = [messageId];
return await execQueryAsync(query, values);
}
async function registerMember(roomId, memberId) {
const query = `INSERT IGNORE INTO app_room_member (room_id, member_id) VALUES (?, ?)`;
const values = [roomId, memberId];
return await execQueryAsync(query, values);
}
async function createRoom(roomName, ownerId, messageId, roomType) {
if (!roomName) roomName = "No room name";
roomName = transformEmojis(roomName);
const query = `INSERT IGNORE INTO app_room (room_name, owner_id, message_id) VALUES (?, ?, ?)`;
const values = [roomName.substring(0, 255), ownerId, messageId];
const query = `INSERT IGNORE INTO app_room (room_name, owner_id, message_id, room_type) VALUES (?, ?, ?, ?)`;
const values = [roomName.substring(0, 255), ownerId, messageId, roomType];
return await execQueryAsyncWithId(query, values);
// todo add members
}
async function registerMessageInRoom(messageId, roomId, isSeen, idate) {
@@ -17,10 +35,9 @@ async function registerMessageInRoom(messageId, roomId, isSeen, idate) {
await execQueryAsync(query, values);
updateLastUpdateRoom(roomId, idate);
if (!isSeen) {
incrementNotSeenRoom(roomId);
}
// if (!isSeen) {
// incrementNotSeenRoom(roomId);
// }
}
function updateLastUpdateRoom(roomId, idate) {
@@ -33,29 +50,25 @@ function incrementNotSeenRoom(roomId) {
// todo
}
async function createThread(threadName, ownerId, messageId, parentRoomId, isDm) {
const rootRoomId = -1; // todo
const threadId = await createRoom(threadName, ownerId, messageId);
const query = `INSERT INTO app_thread (room_id, parent_room_id, root_room_id, isDm) VALUES (?, ?, ?, ?)`;
const values = [threadId, parentRoomId, rootRoomId, isDm];
async function getRoomInfo(messageID) {
const query = `
SELECT
app_room.room_id
app_thread.root_id
FROM app_room
LEFT JOIN app_thread ON app_thread.room_id = app_room.room_id
INNER JOIN app_room_message ON app_room_message.room_id = app_room.room_id
INNER JOIN message ON message.message_id = app_room_message.message_id
WHERE message.messageID = ?
`;
const values = [messageID];
return await execQueryAsync(query, values);
// todo add members
}
async function registerMessageInThread(messageId, threadId, isSeen) {
// todo check if it is still a thread or should be a room
// todo isdm
console.log("register message in thread")
}
function updateLastUpdateThread(threadId) {
// todo
// check for parent
}
function incrementNotSeenThread(threadId) {
// todo
// also increment root room
async function registerThread(roomId, parentId, rootId) {
const query = `INSERT IGNORE INTO app_thread (room_id, parent_id, root_id) VALUES (?, ?, ?)`;
const values = [roomId, parentId, rootId];
return await execQueryAsync(query, values);
}
async function isRoomGroup(roomId) {
@@ -119,11 +132,13 @@ async function hasSameMembersAsParent(messageId, messageID) {
}
module.exports = {
getAllMembers,
registerMember,
createRoom,
registerMessageInRoom,
createThread,
registerMessageInThread,
registerThread,
isRoomGroup,
findRoomsFromMessage,
hasSameMembersAsParent,
getRoomInfo
};

View File

@@ -122,11 +122,11 @@ CREATE TABLE app_room (
room_name VARCHAR(255) NOT NULL,
owner_id INT NOT NULL,
message_id INT NOT NULL,
isGroup BOOLEAN NOT NULL DEFAULT false,
room_type INT NOT NULL DEFAULT 0,
notSeen INT NOT NULL DEFAULT 0,
lastUpdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
PRIMARY KEY (room_id),
UNIQUE KEY (owner_id, message_id, isGroup),
UNIQUE KEY (owner_id, message_id, room_type),
FOREIGN KEY (owner_id) REFERENCES address(address_id),
FOREIGN KEY (message_id) REFERENCES message(message_id)
);
@@ -134,14 +134,13 @@ CREATE TABLE app_room (
-- 12
CREATE TABLE app_thread (
room_id INT NOT NULL,
parent_room_id INT,
root_room_id INT,
isDm BOOLEAN NOT NULL DEFAULT false,
parent_id INT,
root_id INT,
PRIMARY KEY (room_id),
UNIQUE KEY (room_id, parent_room_id, root_room_id),
UNIQUE KEY (room_id, parent_id, root_id),
FOREIGN KEY (room_id) REFERENCES app_room(room_id) ON DELETE CASCADE,
FOREIGN KEY (parent_room_id) REFERENCES app_room(room_id) ON DELETE SET NULL,
FOREIGN KEY (root_room_id) REFERENCES app_room(room_id) ON DELETE SET NULL
FOREIGN KEY (parent_id) REFERENCES app_room(room_id) ON DELETE SET NULL,
FOREIGN KEY (root_id) REFERENCES app_room(room_id) ON DELETE SET NULL
);
-- 13
@@ -157,6 +156,7 @@ CREATE TABLE app_room_message (
CREATE TABLE app_room_member (
room_id INT NOT NULL,
member_id INT NOT NULL,
UNIQUE KEY (room_id, member_id),
FOREIGN KEY (room_id) REFERENCES app_room(room_id) ON DELETE CASCADE,
FOREIGN KEY (member_id) REFERENCES address(address_id)
);