chore(auto): task completed - unknown
This commit is contained in:
@@ -13,6 +13,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
getMessageById,
|
getMessageById,
|
||||||
insertAttachment,
|
insertAttachment,
|
||||||
|
insertMessageEdit,
|
||||||
updateMessageAsDeleted,
|
updateMessageAsDeleted,
|
||||||
updateMessageAsEdited,
|
updateMessageAsEdited,
|
||||||
upsertMessageForCapture,
|
upsertMessageForCapture,
|
||||||
@@ -293,6 +294,15 @@ export function registerMessageCapture(client: Client): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const editedAt = Date.now();
|
const editedAt = Date.now();
|
||||||
|
const oldContent = existing.edited_content ?? existing.content ?? "";
|
||||||
|
|
||||||
|
// Save edit history snapshot before overwriting
|
||||||
|
if (oldContent) {
|
||||||
|
insertMessageEdit(newMessage.id, oldContent, editedAt).catch((err: unknown) => {
|
||||||
|
logger.error({ messageId: newMessage.id, error: err }, "Failed to save edit history");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await updateMessageAsEdited(
|
await updateMessageAsEdited(
|
||||||
newMessage.id,
|
newMessage.id,
|
||||||
getDisplayContent(newMessage as Message),
|
getDisplayContent(newMessage as Message),
|
||||||
|
|||||||
@@ -51,6 +51,12 @@ export class MessageStore {
|
|||||||
this.retention = new RetentionDb(db, logger);
|
this.retention = new RetentionDb(db, logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Edit History ────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
insertMessageEdit(messageId: string, oldContent: string, editedAt: number): Promise<void> {
|
||||||
|
return this.messages.insertMessageEdit(messageId, oldContent, editedAt);
|
||||||
|
}
|
||||||
|
|
||||||
// ── Messages ───────────────────────────────────────────────────────────
|
// ── Messages ───────────────────────────────────────────────────────────
|
||||||
|
|
||||||
insertMessage(message: MessageRecord): Promise<void> {
|
insertMessage(message: MessageRecord): Promise<void> {
|
||||||
@@ -303,6 +309,12 @@ export class MessageStore {
|
|||||||
// These delegate to a lazy singleton MessageStore instance so existing
|
// These delegate to a lazy singleton MessageStore instance so existing
|
||||||
// code that imports individual functions continues to work unchanged.
|
// code that imports individual functions continues to work unchanged.
|
||||||
|
|
||||||
|
export const insertMessageEdit = (
|
||||||
|
messageId: string,
|
||||||
|
oldContent: string,
|
||||||
|
editedAt: number,
|
||||||
|
): Promise<void> => getInstance().insertMessageEdit(messageId, oldContent, editedAt);
|
||||||
|
|
||||||
// Messages
|
// Messages
|
||||||
export const insertMessage = (message: MessageRecord): Promise<void> =>
|
export const insertMessage = (message: MessageRecord): Promise<void> =>
|
||||||
getInstance().insertMessage(message);
|
getInstance().insertMessage(message);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { createChildLogger, type Logger } from "@bete/shared/logger";
|
|||||||
import { and, desc, eq, or, type SQL } from "drizzle-orm";
|
import { and, desc, eq, or, type SQL } from "drizzle-orm";
|
||||||
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
||||||
import type * as schema from "../../shared/database/schema.js";
|
import type * as schema from "../../shared/database/schema.js";
|
||||||
import { messagesTable } from "../../shared/database/schema.js";
|
import { messagesTable, messageEditsTable } from "../../shared/database/schema.js";
|
||||||
import type { MessageRecord } from "../message-capture/types.js";
|
import type { MessageRecord } from "../message-capture/types.js";
|
||||||
|
|
||||||
// ─── Shared Helpers ──────────────────────────────────────────────────────────
|
// ─── Shared Helpers ──────────────────────────────────────────────────────────
|
||||||
@@ -141,6 +141,28 @@ export class MessagesCrud {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── EDIT HISTORY ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
async insertMessageEdit(
|
||||||
|
messageId: string,
|
||||||
|
oldContent: string,
|
||||||
|
editedAt: number,
|
||||||
|
): Promise<void> {
|
||||||
|
this.logger.debug({ messageId }, "insertMessageEdit entry");
|
||||||
|
try {
|
||||||
|
await this.db
|
||||||
|
.insert(messageEditsTable)
|
||||||
|
.values({ message_id: messageId, old_content: oldContent, edited_at: editedAt })
|
||||||
|
.onConflictDoNothing();
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(
|
||||||
|
{ messageId, error: error instanceof Error ? error.message : String(error) },
|
||||||
|
"Failed to insert message edit",
|
||||||
|
);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ── GET ─────────────────────────────────────────────────────────────────────
|
// ── GET ─────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
async getMessagesByChannel(
|
async getMessagesByChannel(
|
||||||
|
|||||||
@@ -126,6 +126,12 @@ export class MessagesDb {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Edit History ─────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
insertMessageEdit(messageId: string, oldContent: string, editedAt: number): Promise<void> {
|
||||||
|
return this.crud.insertMessageEdit(messageId, oldContent, editedAt);
|
||||||
|
}
|
||||||
|
|
||||||
// ── Search ──────────────────────────────────────────────────────────────
|
// ── Search ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
searchMessages(input: {
|
searchMessages(input: {
|
||||||
|
|||||||
Reference in New Issue
Block a user