Initial move
This commit is contained in:
83
backend/src/services/message-service.ts
Normal file
83
backend/src/services/message-service.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
import { db, FTS5Enabled } from "../db";
|
||||
import { events } from "../globals";
|
||||
|
||||
export const createMessage = async (channelId: string, content: string) => {
|
||||
const query = db.prepare(`INSERT INTO messages (channelId, content) VALUES ($channelId, $content)`);
|
||||
const result = query.run({ channelId: channelId, content: content });
|
||||
|
||||
const messageId = result.lastInsertRowid;
|
||||
console.log(`Adding message for search with id ${messageId}`);
|
||||
// Insert into FTS table if FTS is enabled.
|
||||
if (FTS5Enabled) {
|
||||
const query2 = db.prepare(`INSERT INTO messages_fts (rowid, content) VALUES ($rowId, $content)`);
|
||||
const result2 = query2.run({ rowId: messageId, content: content });
|
||||
}
|
||||
|
||||
events.emit('message-created', messageId, channelId, content);
|
||||
return messageId;
|
||||
}
|
||||
|
||||
export const updateMessage = async (messageId: string, content: string, append: boolean = false) => {
|
||||
const query = db.prepare(`UPDATE messages SET content = $content WHERE id = $id`);
|
||||
const result = query.run({ content: content, id: messageId });
|
||||
|
||||
|
||||
|
||||
|
||||
// Update FTS table if enabled
|
||||
if (!FTS5Enabled) {
|
||||
const query2 = db.prepare(`INSERT INTO messages_fts (rowid, content) VALUES ($rowId, $content) ON CONFLICT(rowid) DO UPDATE SET content = excluded.content`);
|
||||
const result2 = query.run({ rowId: messageId, content: content });
|
||||
}
|
||||
events.emit('message-updated', messageId, content);
|
||||
return result;
|
||||
}
|
||||
|
||||
export const deleteMessage = async (messageId: string) => {
|
||||
const query = db.prepare(`DELETE FROM messages WHERE id = $id`);
|
||||
const result = query.run({ id: messageId });
|
||||
|
||||
// Remove from FTS table if enabled
|
||||
if (FTS5Enabled) {
|
||||
const query2 = db.prepare(`DELETE FROM messages_fts WHERE rowid = $rowId`);
|
||||
const result2 = query2.run({ rowId: messageId });
|
||||
}
|
||||
events.emit('message-deleted', messageId);
|
||||
return result;
|
||||
}
|
||||
|
||||
export const getMessages = async (channelId: string) => {
|
||||
const query = db.prepare(`
|
||||
SELECT
|
||||
messages.id, messages.channelId, messages.content, messages.createdAt,
|
||||
files.id as fileId, files.filePath, files.fileType, files.createdAt as fileCreatedAt, files.originalName, files.fileSize
|
||||
FROM
|
||||
messages
|
||||
LEFT JOIN
|
||||
files
|
||||
ON
|
||||
messages.fileId = files.id
|
||||
WHERE
|
||||
messages.channelId = $channelId
|
||||
`);
|
||||
const rows = query.all({ channelId: channelId });
|
||||
return rows;
|
||||
}
|
||||
|
||||
export const getMessage = async (id: string) => {
|
||||
const query = db.prepare(`
|
||||
SELECT
|
||||
messages.id, messages.channelId, messages.content, messages.createdAt,
|
||||
files.id as fileId, files.filePath, files.fileType, files.createdAt as fileCreatedAt, files.originalName, files.fileSize
|
||||
FROM
|
||||
messages
|
||||
LEFT JOIN
|
||||
files
|
||||
ON
|
||||
messages.fileId = files.id
|
||||
WHERE
|
||||
messages.id = $id
|
||||
`);
|
||||
const row = query.get({ id: id });
|
||||
return row;
|
||||
}
|
Reference in New Issue
Block a user