78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
// modules/helpdesk/helpdesk.message.service.ts
|
|
import { FastifyInstance } from 'fastify'
|
|
import { asc, eq } from "drizzle-orm";
|
|
import { helpdesk_conversations, helpdesk_messages } from "../../../db/schema";
|
|
|
|
export async function addMessage(
|
|
server: FastifyInstance,
|
|
{
|
|
tenant_id,
|
|
conversation_id,
|
|
author_user_id = null,
|
|
direction = 'incoming',
|
|
payload,
|
|
raw_meta = null,
|
|
external_message_id = null,
|
|
}: {
|
|
tenant_id: number
|
|
conversation_id: string
|
|
author_user_id?: string | null
|
|
direction?: 'incoming' | 'outgoing' | 'internal' | 'system'
|
|
payload: any
|
|
raw_meta?: any
|
|
external_message_id?: string
|
|
}
|
|
) {
|
|
if (!payload?.text) throw new Error('Message payload requires text content')
|
|
|
|
const inserted = await server.db
|
|
.insert(helpdesk_messages)
|
|
.values({
|
|
tenantId: tenant_id,
|
|
conversationId: conversation_id,
|
|
authorUserId: author_user_id,
|
|
direction,
|
|
payload,
|
|
rawMeta: raw_meta,
|
|
externalMessageId: external_message_id,
|
|
receivedAt: new Date(),
|
|
})
|
|
.returning()
|
|
|
|
const message = inserted[0]
|
|
|
|
// Letzte Nachricht aktualisieren
|
|
await server.db
|
|
.update(helpdesk_conversations)
|
|
.set({ lastMessageAt: new Date() })
|
|
.where(eq(helpdesk_conversations.id, conversation_id))
|
|
|
|
return {
|
|
...message,
|
|
author_user_id: message.authorUserId,
|
|
conversation_id: message.conversationId,
|
|
created_at: message.createdAt,
|
|
external_message_id: message.externalMessageId,
|
|
raw_meta: message.rawMeta,
|
|
tenant_id: message.tenantId,
|
|
}
|
|
}
|
|
|
|
export async function getMessages(server: FastifyInstance, conversation_id: string) {
|
|
const data = await server.db
|
|
.select()
|
|
.from(helpdesk_messages)
|
|
.where(eq(helpdesk_messages.conversationId, conversation_id))
|
|
.orderBy(asc(helpdesk_messages.createdAt))
|
|
|
|
return data.map((message) => ({
|
|
...message,
|
|
author_user_id: message.authorUserId,
|
|
conversation_id: message.conversationId,
|
|
created_at: message.createdAt,
|
|
external_message_id: message.externalMessageId,
|
|
raw_meta: message.rawMeta,
|
|
tenant_id: message.tenantId,
|
|
}))
|
|
}
|