/** * GET /api/messages/:instanceId/:chatId * Get messages for a chat */ import { query } from '../../../../utils/database' interface MessageRow { id: string message_id: string from_jid: string from_me: boolean message_type: string content: string | null caption: string | null media_url: string | null timestamp: Date status: string } export default defineEventHandler(async (event) => { const username = getHeader(event, 'x-authentik-username') if (!username) { throw createError({ statusCode: 401, message: 'Unauthorized' }) } const instanceId = getRouterParam(event, 'instanceId') const chatId = getRouterParam(event, 'chatId') // Get query params for pagination const queryParams = getQuery(event) const limit = Math.min(parseInt(queryParams.limit as string) || 50, 100) const offset = parseInt(queryParams.offset as string) || 0 // Verify chat exists and belongs to instance const chatCheck = await query( 'SELECT id FROM chats WHERE id = $1 AND instance_id = $2', [chatId, instanceId] ) if (chatCheck.rows.length === 0) { throw createError({ statusCode: 404, message: 'Chat not found' }) } // Get messages const result = await query( `SELECT id, message_id, from_jid, from_me, message_type, content, caption, media_url, timestamp, status FROM messages WHERE chat_id = $1 ORDER BY timestamp DESC LIMIT $2 OFFSET $3`, [chatId, limit, offset] ) // Mark as read await query( 'UPDATE chats SET unread_count = 0 WHERE id = $1', [chatId] ) return result.rows.map(row => ({ id: row.id, messageId: row.message_id, fromJid: row.from_jid, fromMe: row.from_me, type: row.message_type, content: row.content, caption: row.caption, mediaUrl: row.media_url, timestamp: row.timestamp, status: row.status })) })