@@ -4,7 +4,7 @@ import { ChatsRavage } from '../models/Chat.js';
44import { User } from '../models/User.js' ;
55import { MessagesRavage } from '../models/Message.js' ;
66import { convertirObjectId } from '../utils/conversores.js' ;
7- import { getIDMongodbUsuario , getInvisibleUsuario } from '../STORAGE/Variables_sesion.js' ;
7+ import { getIDMongodbUsuario , getInvisibleUsuario , setUsuariosSilence , setUsuariosBloqueados , getUsuariosSilence , getUsuariosBloqueados } from '../STORAGE/Variables_sesion.js' ;
88import { Añadir_Entrada_Buzon_Usuario } from './BuzonRepository.js' ;
99import { descifrarListaMensajes } from '../services/messageCryptoService.js' ;
1010import { cifrarConPublica , desencriptarDatosSistema , encriptarDatosSistema } from '../services/cryptoService.js' ;
@@ -120,7 +120,7 @@ export async function obtener_datos_chat_unico(id_chat, datos_buscar = null) {
120120 // Caso: Pedir chat completo
121121 let chat_a_devolver = { ...cached , mensajes : [ ...( cached . mensajes || [ ] ) ] } ;
122122 const tieneMensajesFull = chat_a_devolver . mensajes . length > 0 && typeof chat_a_devolver . mensajes [ 0 ] === 'object' ;
123-
123+
124124 if ( ! tieneMensajesFull ) {
125125 chat_a_devolver . mensajes = await MessagesRavage . find ( { id_chat : id_chat_str } ) . sort ( { data : 1 } ) . lean ( ) ;
126126 await descifrarListaMensajes ( chat_a_devolver . mensajes , chat_a_devolver ) ;
@@ -754,16 +754,7 @@ export async function rotarClavesChat(id_chat, id_emisor) {
754754 // Reemplazar todas las entradas de este emisor en el array ratchet_keys
755755 await ChatsRavage . updateOne (
756756 { _id : id_chat_str } ,
757- {
758- $pull : { ratchet_keys : { emisor_id : id_emisor_str } }
759- }
760- ) ;
761-
762- await ChatsRavage . updateOne (
763- { _id : id_chat_str } ,
764- {
765- $push : { ratchet_keys : { $each : updates } }
766- }
757+ { $set : { ratchet_keys : updates } }
767758 ) ;
768759
769760 // Actualizar cache tras rotación de claves
@@ -790,13 +781,29 @@ export async function SILENCIAR_CHAT_USUARIO(id_chat) {
790781 const currentMuted = usr . chats [ index ] . silenciado || false ;
791782 const newMuted = ! currentMuted ;
792783
793- await User . updateOne (
794- { _id : id_propio , "chats.id" : new mongoose . Types . ObjectId ( id_chat_str ) } ,
795- { $set : { "chats.$.silenciado" : newMuted } }
784+ let resultado_silencio = [ ] ;
785+ if ( newMuted ) {
786+ const muteados = getUsuariosSilence ( ) ;
787+ resultado_silencio = [ ...muteados , id_chat_str ] ;
788+ setUsuariosSilence ( resultado_silencio ) ;
789+ } else {
790+ resultado_silencio = getUsuariosSilence ( ) . filter ( c => c !== id_chat_str ) ;
791+ setUsuariosSilence ( resultado_silencio ) ;
792+ }
793+
794+ const r = await User . updateOne (
795+ { _id : id_propio } ,
796+ {
797+ $set : {
798+ "chats.$[chat].silenciado" : newMuted ,
799+ users_silence : resultado_silencio
800+ }
801+ } ,
802+ { arrayFilters : [ { "chat.id" : new mongoose . Types . ObjectId ( id_chat_str ) } ] }
796803 ) ;
797804
798805 await actualizarCacheUsuarioPropio ( ) ;
799-
806+ log . info ( { nuevo_estado : newMuted ? "silenciado" : "no silenciado" , id_chat : id_chat_str } , "Silenciado" ) ;
800807 return { success : true , silenciado : newMuted } ;
801808 } catch ( e ) {
802809 log . error ( e ) ;
@@ -835,20 +842,31 @@ export async function BLOQUEAR_CHAT_USUARIO(id_chat) {
835842 participantes_bloqueo = chatActual . usuarios || null ;
836843 }
837844 }
838-
845+ let resultado_bloque = [ ] ;
846+ if ( newBlocked ) {
847+ const bloqueados = getUsuariosBloqueados ( ) ;
848+ resultado_bloque = [ ...bloqueados , id_chat_str ] ;
849+ setUsuariosBloqueados ( resultado_bloque ) ;
850+ } else {
851+ resultado_bloque = getUsuariosBloqueados ( ) . filter ( c => c !== id_chat_str ) ;
852+ setUsuariosBloqueados ( resultado_bloque ) ;
853+ }
839854 await User . updateOne (
840- { _id : id_propio , "chats.id" : new mongoose . Types . ObjectId ( id_chat_str ) } ,
855+ { _id : id_propio } ,
841856 {
842857 $set : {
843- "chats.$.bloqueado" : newBlocked ,
844- "chats.$.mensaje_bloqueo_id" : mensaje_bloqueo_id ,
845- "chats.$.nombre_bloqueo" : nombre_bloqueo ,
846- "chats.$.participantes_bloqueo" : participantes_bloqueo
858+ "chats.$[chat].bloqueado" : newBlocked ,
859+ "chats.$[chat].mensaje_bloqueo_id" : mensaje_bloqueo_id ,
860+ "chats.$[chat].nombre_bloqueo" : nombre_bloqueo ,
861+ "chats.$[chat].participantes_bloqueo" : participantes_bloqueo ,
862+ users_bloqueo : resultado_bloque
847863 }
848- }
864+ } ,
865+ { arrayFilters : [ { "chat.id" : new mongoose . Types . ObjectId ( id_chat_str ) } ] }
849866 ) ;
850867
851868 await actualizarCacheUsuarioPropio ( ) ;
869+ log . info ( { nuevo_estado : newBlocked ? "bloqueado" : "desbloqueado" , id_chat : id_chat_str } , "Bloqueo" ) ;
852870
853871 return { success : true , bloqueado : newBlocked } ;
854872 } catch ( e ) {
0 commit comments