@@ -682,13 +682,6 @@ export class ChannelStartupService {
682682 : createJid ( query . where ?. remoteJid )
683683 : null ;
684684
685- const limit =
686- query . offset && ! query . page
687- ? Prisma . sql ` LIMIT ${ query . offset } `
688- : query . offset && query . page
689- ? Prisma . sql ` LIMIT ${ query . offset } OFFSET ${ ( ( query . page as number ) - 1 ) * query . offset } `
690- : Prisma . sql `` ;
691-
692685 const where = {
693686 instanceId : this . instanceId ,
694687 } ;
@@ -700,91 +693,88 @@ export class ChannelStartupService {
700693 const timestampFilter =
701694 query ?. where ?. messageTimestamp ?. gte && query ?. where ?. messageTimestamp ?. lte
702695 ? Prisma . sql `
703- AND "Message"."messageTimestamp" >= ${ Math . floor ( new Date ( query . where . messageTimestamp . gte ) . getTime ( ) / 1000 ) }
704- AND "Message"."messageTimestamp" <= ${ Math . floor ( new Date ( query . where . messageTimestamp . lte ) . getTime ( ) / 1000 ) } `
696+ AND "Message"."messageTimestamp" >= ${ Math . floor ( new Date ( query . where . messageTimestamp . gte ) . getTime ( ) / 1000 ) }
697+ AND "Message"."messageTimestamp" <= ${ Math . floor ( new Date ( query . where . messageTimestamp . lte ) . getTime ( ) / 1000 ) } `
705698 : Prisma . sql `` ;
706699
707700 const results = await this . prismaRepository . $queryRaw `
708- WITH rankedMessages AS (
709- SELECT DISTINCT ON ("Contact"."remoteJid")
710- "Contact"."id",
711- "Contact"."remoteJid",
712- "Contact"."pushName",
713- "Contact"."profilePicUrl",
714- COALESCE(
715- to_timestamp("Message"."messageTimestamp"::double precision),
716- "Contact"."updatedAt"
717- ) as "updatedAt",
718- "Chat"."name" as "chatName",
719- "Chat"."createdAt" as "windowStart",
720- "Chat"."createdAt" + INTERVAL '24 hours' as "windowExpires",
721- CASE
722- WHEN "Chat"."createdAt" + INTERVAL '24 hours' > NOW() THEN true
723- ELSE false
724- END as "windowActive",
725- "Message"."id" AS lastMessageId,
726- "Message"."key" AS lastMessage_key,
727- "Message"."pushName" AS lastMessagePushName,
728- "Message"."participant" AS lastMessageParticipant,
729- "Message"."messageType" AS lastMessageMessageType,
730- "Message"."message" AS lastMessageMessage,
731- "Message"."contextInfo" AS lastMessageContextInfo,
732- "Message"."source" AS lastMessageSource,
733- "Message"."messageTimestamp" AS lastMessageMessageTimestamp,
734- "Message"."instanceId" AS lastMessageInstanceId,
735- "Message"."sessionId" AS lastMessageSessionId,
736- "Message"."status" AS lastMessageStatus
737- FROM "Contact"
738- INNER JOIN "Message" ON "Message"."key"->>'remoteJid' = "Contact"."remoteJid"
739- LEFT JOIN "Chat" ON "Chat"."remoteJid" = "Contact"."remoteJid"
740- AND "Chat"."instanceId" = "Contact"."instanceId"
741- WHERE
742- "Contact"."instanceId" = ${ this . instanceId }
743- AND "Message"."instanceId" = ${ this . instanceId }
744- ${ remoteJid ? Prisma . sql `AND "Contact"."remoteJid" = ${ remoteJid } ` : Prisma . sql `` }
745- ${ timestampFilter }
746- ORDER BY
747- "Contact"."remoteJid",
748- "Message"."messageTimestamp" DESC
749- ${ limit }
750- )
751- SELECT * FROM rankedMessages
752- ORDER BY "updatedAt" DESC NULLS LAST;
701+ WITH rankedMessages AS (
702+ SELECT DISTINCT ON ("Message"."key"->>'remoteJid')
703+ "Contact"."id" as "contactId",
704+ "Message"."key"->>'remoteJid' as "remoteJid",
705+ COALESCE("Contact"."pushName", "Message"."pushName") as "pushName",
706+ "Contact"."profilePicUrl",
707+ COALESCE(
708+ to_timestamp("Message"."messageTimestamp"::double precision),
709+ "Contact"."updatedAt"
710+ ) as "updatedAt",
711+ "Chat"."createdAt" as "windowStart",
712+ "Chat"."createdAt" + INTERVAL '24 hours' as "windowExpires",
713+ CASE WHEN "Chat"."createdAt" + INTERVAL '24 hours' > NOW() THEN true ELSE false END as "windowActive",
714+ "Message"."id" AS lastMessageId,
715+ "Message"."key" AS lastMessage_key,
716+ "Message"."pushName" AS lastMessagePushName,
717+ "Message"."participant" AS lastMessageParticipant,
718+ "Message"."messageType" AS lastMessageMessageType,
719+ "Message"."message" AS lastMessageMessage,
720+ "Message"."contextInfo" AS lastMessageContextInfo,
721+ "Message"."source" AS lastMessageSource,
722+ "Message"."messageTimestamp" AS lastMessageMessageTimestamp,
723+ "Message"."instanceId" AS lastMessageInstanceId,
724+ "Message"."sessionId" AS lastMessageSessionId,
725+ "Message"."status" AS lastMessageStatus
726+ FROM "Message"
727+ LEFT JOIN "Contact" ON "Contact"."remoteJid" = "Message"."key"->>'remoteJid' AND "Contact"."instanceId" = "Message"."instanceId"
728+ LEFT JOIN "Chat" ON "Chat"."remoteJid" = "Message"."key"->>'remoteJid' AND "Chat"."instanceId" = "Message"."instanceId"
729+ WHERE "Message"."instanceId" = ${ this . instanceId }
730+ ${ remoteJid ? Prisma . sql `AND "Message"."key"->>'remoteJid' = ${ remoteJid } ` : Prisma . sql `` }
731+ ${ timestampFilter }
732+ ORDER BY "Message"."key"->>'remoteJid', "Message"."messageTimestamp" DESC
733+ )
734+ SELECT * FROM rankedMessages
735+ ORDER BY "updatedAt" DESC NULLS LAST;
753736 ` ;
754737
755- if ( results && isArray ( results ) && results . length > 0 ) {
756- const mappedResults = results . map ( ( contact ) => {
757- const lastMessage = contact . lastMessageId
738+ if ( results && Array . isArray ( results ) && results . length > 0 ) {
739+ const mappedResults = results . map ( ( item ) => {
740+ const lastMessage = item . lastMessageId
758741 ? {
759- id : contact . lastMessageId ,
760- key : contact . lastMessageKey ,
761- pushName : contact . lastMessagePushName ,
762- participant : contact . lastMessageParticipant ,
763- messageType : contact . lastMessageMessageType ,
764- message : contact . lastMessageMessage ,
765- contextInfo : contact . lastMessageContextInfo ,
766- source : contact . lastMessageSource ,
767- messageTimestamp : contact . lastMessageMessageTimestamp ,
768- instanceId : contact . lastMessageInstanceId ,
769- sessionId : contact . lastMessageSessionId ,
770- status : contact . lastMessageStatus ,
742+ id : item . lastMessageId ,
743+ key : item . lastMessage_key ,
744+ pushName : item . lastMessagePushName ,
745+ participant : item . lastMessageParticipant ,
746+ messageType : item . lastMessageMessageType ,
747+ message : item . lastMessageMessage ,
748+ contextInfo : item . lastMessageContextInfo ,
749+ source : item . lastMessageSource ,
750+ messageTimestamp : item . lastMessageMessageTimestamp ,
751+ instanceId : item . lastMessageInstanceId ,
752+ sessionId : item . lastMessageSessionId ,
753+ status : item . lastMessageStatus ,
771754 }
772755 : undefined ;
773756
774757 return {
775- id : contact . id ,
776- remoteJid : contact . remoteJid ,
777- pushName : contact . pushName ,
778- chatName : contact . chatName ,
779- profilePicUrl : contact . profilePicUrl ,
780- updatedAt : contact . updatedAt ,
781- windowStart : contact . windowStart ,
782- windowExpires : contact . windowExpires ,
783- windowActive : contact . windowActive ,
758+ id : item . contactId || null ,
759+ remoteJid : item . remoteJid ,
760+ pushName : item . pushName ,
761+ profilePicUrl : item . profilePicUrl ,
762+ updatedAt : item . updatedAt ,
763+ windowStart : item . windowStart ,
764+ windowExpires : item . windowExpires ,
765+ windowActive : item . windowActive ,
784766 lastMessage : lastMessage ? this . cleanMessageData ( lastMessage ) : undefined ,
767+ unreadCount : 0 ,
768+ isSaved : ! ! item . contactId ,
785769 } ;
786770 } ) ;
787771
772+ if ( query ?. take && query ?. skip ) {
773+ const skip = query . skip || 0 ;
774+ const take = query . take || 20 ;
775+ return mappedResults . slice ( skip , skip + take ) ;
776+ }
777+
788778 return mappedResults ;
789779 }
790780
0 commit comments