import { resolver } from "blitz"; import db, { Direction, Message, Prisma } from "../../../db"; import getCurrentCustomer from "../../customers/queries/get-current-customer"; import { decrypt } from "../../../db/_encryption"; export default resolver.pipe(resolver.authorize(), async (_ = null, context) => { const customer = await getCurrentCustomer(null, context); const messages = await db.message.findMany({ where: { customerId: customer!.id }, orderBy: { sentAt: Prisma.SortOrder.asc }, }); let conversations: Record = {}; for (const message of messages) { let recipient: string; if (message.direction === Direction.Outbound) { recipient = message.to; } else { recipient = message.from; } if (!conversations[recipient]) { conversations[recipient] = []; } conversations[recipient]!.push({ ...message, content: decrypt(message.content, customer!.encryptionKey), }); conversations[recipient]!.sort((a, b) => a.sentAt.getTime() - b.sentAt.getTime()); } conversations = Object.fromEntries( Object.entries(conversations).sort( ([, a], [, b]) => b[b.length - 1]!.sentAt.getTime() - a[a.length - 1]!.sentAt.getTime() ) ); return conversations; });