@@ -1819,7 +1819,7 @@ export class BaileysStartupService extends ChannelStartupService {
18191819 const savedLabel = labelsRepository . find ( ( l ) => l . labelId === label . id ) ;
18201820 if ( label . deleted && savedLabel ) {
18211821 await this . prismaRepository . label . delete ( {
1822- where : { labelId_instanceId : { instanceId : this . instanceId , labelId : label . id } } ,
1822+ where : { id : savedLabel . id } ,
18231823 } ) ;
18241824 this . sendDataWebhook ( Events . LABELS_EDIT , { ...label , instance : this . instance . name } ) ;
18251825 return ;
@@ -1835,11 +1835,16 @@ export class BaileysStartupService extends ChannelStartupService {
18351835 predefinedId : label . predefinedId ,
18361836 instanceId : this . instanceId ,
18371837 } ;
1838- await this . prismaRepository . label . upsert ( {
1839- where : { labelId_instanceId : { instanceId : labelData . instanceId , labelId : labelData . labelId } } ,
1840- update : labelData ,
1841- create : labelData ,
1842- } ) ;
1838+ if ( savedLabel ) {
1839+ await this . prismaRepository . label . update ( {
1840+ where : { id : savedLabel . id } ,
1841+ data : labelData ,
1842+ } ) ;
1843+ } else {
1844+ await this . prismaRepository . label . create ( {
1845+ data : labelData ,
1846+ } ) ;
1847+ }
18431848 }
18441849 }
18451850 } ,
@@ -3776,7 +3781,7 @@ export class BaileysStartupService extends ChannelStartupService {
37763781 if ( messageId ) {
37773782 const isLogicalDeleted = configService . get < Database > ( 'DATABASE' ) . DELETE_DATA . LOGICAL_MESSAGE_DELETE ;
37783783 let message = await this . prismaRepository . message . findFirst ( {
3779- where : { key : { path : [ ' id'] , equals : messageId } } ,
3784+ where : { key : { path : '$. id', equals : messageId } } ,
37803785 } ) ;
37813786 if ( isLogicalDeleted ) {
37823787 if ( ! message ) return response ;
@@ -4196,7 +4201,7 @@ export class BaileysStartupService extends ChannelStartupService {
41964201 const messageId = messageSent . message ?. protocolMessage ?. key ?. id ;
41974202 if ( messageId && this . configService . get < Database > ( 'DATABASE' ) . SAVE_DATA . NEW_MESSAGE ) {
41984203 let message = await this . prismaRepository . message . findFirst ( {
4199- where : { key : { path : [ ' id'] , equals : messageId } } ,
4204+ where : { key : { path : '$. id', equals : messageId } } ,
42004205 } ) ;
42014206 if ( ! message ) throw new NotFoundException ( 'Message not found' ) ;
42024207
@@ -4734,6 +4739,26 @@ export class BaileysStartupService extends ChannelStartupService {
47344739 private async updateMessagesReadedByTimestamp ( remoteJid : string , timestamp ?: number ) : Promise < number > {
47354740 if ( timestamp === undefined || timestamp === null ) return 0 ;
47364741
4742+ const dbProvider = String ( this . configService . get < Database > ( 'DATABASE' ) ?. PROVIDER || '' ) . toLowerCase ( ) ;
4743+
4744+ if ( dbProvider === 'mysql' ) {
4745+ const result = await this . prismaRepository . $executeRaw `
4746+ UPDATE \`Message\`
4747+ SET \`status\` = ${ status [ 4 ] }
4748+ WHERE \`instanceId\` = ${ this . instanceId }
4749+ AND JSON_UNQUOTE(JSON_EXTRACT(\`key\`, '$.remoteJid')) = ${ remoteJid }
4750+ AND JSON_EXTRACT(\`key\`, '$.fromMe') = false
4751+ AND \`messageTimestamp\` <= ${ timestamp }
4752+ AND (\`status\` IS NULL OR \`status\` = ${ status [ 3 ] } )
4753+ ` ;
4754+
4755+ if ( result && result > 0 ) {
4756+ this . updateChatUnreadMessages ( remoteJid ) ;
4757+ }
4758+
4759+ return result || 0 ;
4760+ }
4761+
47374762 // Use raw SQL to avoid JSON path issues
47384763 const result = await this . prismaRepository . $executeRaw `
47394764 UPDATE "Message"
@@ -4757,16 +4782,25 @@ export class BaileysStartupService extends ChannelStartupService {
47574782 }
47584783
47594784 private async updateChatUnreadMessages ( remoteJid : string ) : Promise < number > {
4785+ const dbProvider = String ( this . configService . get < Database > ( 'DATABASE' ) ?. PROVIDER || '' ) . toLowerCase ( ) ;
4786+
47604787 const [ chat , unreadMessages ] = await Promise . all ( [
47614788 this . prismaRepository . chat . findFirst ( { where : { remoteJid } } ) ,
4762- // Use raw SQL to avoid JSON path issues
4763- this . prismaRepository . $queryRaw `
4764- SELECT COUNT(*)::int as count FROM "Message"
4765- WHERE "instanceId" = ${ this . instanceId }
4766- AND "key"->>'remoteJid' = ${ remoteJid }
4767- AND ("key"->>'fromMe')::boolean = false
4768- AND "status" = ${ status [ 3 ] }
4769- ` . then ( ( result : any [ ] ) => result [ 0 ] ?. count || 0 ) ,
4789+ dbProvider === 'mysql'
4790+ ? this . prismaRepository . $queryRaw `
4791+ SELECT COUNT(*) as count FROM \`Message\`
4792+ WHERE \`instanceId\` = ${ this . instanceId }
4793+ AND JSON_UNQUOTE(JSON_EXTRACT(\`key\`, '$.remoteJid')) = ${ remoteJid }
4794+ AND JSON_EXTRACT(\`key\`, '$.fromMe') = false
4795+ AND \`status\` = ${ status [ 3 ] }
4796+ ` . then ( ( result : any [ ] ) => Number ( result ?. [ 0 ] ?. count || 0 ) )
4797+ : this . prismaRepository . $queryRaw `
4798+ SELECT COUNT(*)::int as count FROM "Message"
4799+ WHERE "instanceId" = ${ this . instanceId }
4800+ AND "key"->>'remoteJid' = ${ remoteJid }
4801+ AND ("key"->>'fromMe')::boolean = false
4802+ AND "status" = ${ status [ 3 ] }
4803+ ` . then ( ( result : any [ ] ) => result [ 0 ] ?. count || 0 ) ,
47704804 ] ) ;
47714805
47724806 if ( chat && chat . unreadMessages !== unreadMessages ) {
@@ -5013,7 +5047,7 @@ export class BaileysStartupService extends ChannelStartupService {
50135047 }
50145048 }
50155049
5016- public async fetchMessages ( query : Query < Message > ) {
5050+ public async fetchMessages ( query : Query < Message > ) : Promise < any > {
50175051 const keyFilters = query ?. where ?. key as ExtendedIMessageKey ;
50185052
50195053 const timestampFilter = { } ;
@@ -5034,13 +5068,13 @@ export class BaileysStartupService extends ChannelStartupService {
50345068 messageType : query ?. where ?. messageType ,
50355069 ...timestampFilter ,
50365070 AND : [
5037- keyFilters ?. id ? { key : { path : [ ' id'] , equals : keyFilters ?. id } } : { } ,
5038- keyFilters ?. fromMe ? { key : { path : [ ' fromMe'] , equals : keyFilters ?. fromMe } } : { } ,
5039- keyFilters ?. participant ? { key : { path : [ ' participant'] , equals : keyFilters ?. participant } } : { } ,
5071+ keyFilters ?. id ? { key : { path : '$. id', equals : keyFilters ?. id } } : { } ,
5072+ keyFilters ?. fromMe ? { key : { path : '$. fromMe', equals : keyFilters ?. fromMe } } : { } ,
5073+ keyFilters ?. participant ? { key : { path : '$. participant', equals : keyFilters ?. participant } } : { } ,
50405074 {
50415075 OR : [
5042- keyFilters ?. remoteJid ? { key : { path : [ ' remoteJid'] , equals : keyFilters ?. remoteJid } } : { } ,
5043- keyFilters ?. remoteJidAlt ? { key : { path : [ ' remoteJidAlt'] , equals : keyFilters ?. remoteJidAlt } } : { } ,
5076+ keyFilters ?. remoteJid ? { key : { path : '$. remoteJid', equals : keyFilters ?. remoteJid } } : { } ,
5077+ keyFilters ?. remoteJidAlt ? { key : { path : '$. remoteJidAlt', equals : keyFilters ?. remoteJidAlt } } : { } ,
50445078 ] ,
50455079 } ,
50465080 ] ,
@@ -5063,13 +5097,13 @@ export class BaileysStartupService extends ChannelStartupService {
50635097 messageType : query ?. where ?. messageType ,
50645098 ...timestampFilter ,
50655099 AND : [
5066- keyFilters ?. id ? { key : { path : [ ' id'] , equals : keyFilters ?. id } } : { } ,
5067- keyFilters ?. fromMe ? { key : { path : [ ' fromMe'] , equals : keyFilters ?. fromMe } } : { } ,
5068- keyFilters ?. participant ? { key : { path : [ ' participant'] , equals : keyFilters ?. participant } } : { } ,
5100+ keyFilters ?. id ? { key : { path : '$. id', equals : keyFilters ?. id } } : { } ,
5101+ keyFilters ?. fromMe ? { key : { path : '$. fromMe', equals : keyFilters ?. fromMe } } : { } ,
5102+ keyFilters ?. participant ? { key : { path : '$. participant', equals : keyFilters ?. participant } } : { } ,
50695103 {
50705104 OR : [
5071- keyFilters ?. remoteJid ? { key : { path : [ ' remoteJid'] , equals : keyFilters ?. remoteJid } } : { } ,
5072- keyFilters ?. remoteJidAlt ? { key : { path : [ ' remoteJidAlt'] , equals : keyFilters ?. remoteJidAlt } } : { } ,
5105+ keyFilters ?. remoteJid ? { key : { path : '$. remoteJid', equals : keyFilters ?. remoteJid } } : { } ,
5106+ keyFilters ?. remoteJidAlt ? { key : { path : '$. remoteJidAlt', equals : keyFilters ?. remoteJidAlt } } : { } ,
50735107 ] ,
50745108 } ,
50755109 ] ,
0 commit comments