61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
// modules/helpdesk/helpdesk.message.service.ts
|
|
import { FastifyInstance } from 'fastify'
|
|
|
|
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 { data: message, error } = await server.supabase
|
|
.from('helpdesk_messages')
|
|
.insert({
|
|
tenant_id,
|
|
conversation_id,
|
|
author_user_id,
|
|
direction,
|
|
payload,
|
|
raw_meta,
|
|
created_at: new Date().toISOString(),
|
|
})
|
|
.select()
|
|
.single()
|
|
|
|
if (error) throw error
|
|
|
|
// Letzte Nachricht aktualisieren
|
|
await server.supabase
|
|
.from('helpdesk_conversations')
|
|
.update({ last_message_at: new Date().toISOString() })
|
|
.eq('id', conversation_id)
|
|
|
|
return message
|
|
}
|
|
|
|
export async function getMessages(server: FastifyInstance, conversation_id: string) {
|
|
const { data, error } = await server.supabase
|
|
.from('helpdesk_messages')
|
|
.select('*')
|
|
.eq('conversation_id', conversation_id)
|
|
.order('created_at', { ascending: true })
|
|
|
|
if (error) throw error
|
|
return data
|
|
}
|