diff --git a/src/app/services/Repositorys/chat/async/rooms/roomMembersChangeDetector.ts b/src/app/services/Repositorys/chat/async/rooms/roomMembersChangeDetector.ts index 455e8f58b..dcce269d4 100644 --- a/src/app/services/Repositorys/chat/async/rooms/roomMembersChangeDetector.ts +++ b/src/app/services/Repositorys/chat/async/rooms/roomMembersChangeDetector.ts @@ -1,9 +1,9 @@ import { TableMemberList } from "../../data-source/room/rooom-local-data-source.service"; import { RoomByIdMemberItemOutputDTO } from "../../dto/room/roomByIdOutputDTO"; -export function roomMemberListDetermineChanges(serverRooms: RoomByIdMemberItemOutputDTO[], localRooms: TableMemberList[], roomId: string) { +export function roomMemberListDetermineChanges(____serverRooms: RoomByIdMemberItemOutputDTO[], localRooms: TableMemberList[], roomId: string) { - const PServerRooms: (RoomByIdMemberItemOutputDTO & {$roomIdUserId: string}[]) = serverRooms.map( e=> { + const PServerRooms: (RoomByIdMemberItemOutputDTO & {$roomIdUserId: string})[] = ____serverRooms.map( e=> { return { ...e, @@ -11,12 +11,14 @@ export function roomMemberListDetermineChanges(serverRooms: RoomByIdMemberItemOu } }) + console.log({PServerRooms, localRooms}) + const serverRoomMap = new Map(PServerRooms.map(room => [room.$roomIdUserId, room])); const localRoomMap = new Map(localRooms.map(room => [room.$roomIdUserId, room])); - const membersToInsert = serverRooms.filter(room => !localRoomMap.has(room.id)); - const membersToUpdate = serverRooms.filter(room => { - const localRoom = localRoomMap.get(room.id); + const membersToInsert = PServerRooms.filter(room => !localRoomMap.has(room.$roomIdUserId)); + const membersToUpdate = PServerRooms.filter(room => { + const localRoom = localRoomMap.get(room.$roomIdUserId); return localRoom && ( room.user.wxUserId !== localRoom.user.wxUserId || room.user.userPhoto !== localRoom.user.userPhoto || @@ -24,7 +26,7 @@ export function roomMemberListDetermineChanges(serverRooms: RoomByIdMemberItemOu ) }); - const membersToDelete = localRooms.filter(room => !serverRoomMap.has(room.id)); + const membersToDelete = localRooms.filter(room => !serverRoomMap.has(room.$roomIdUserId)); return { membersToInsert, membersToUpdate, membersToDelete }; } diff --git a/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts index 4d07dc695..4cce0475b 100644 --- a/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts +++ b/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO'; import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie'; -import { err, ok } from 'neverthrow'; +import { err, ok, Result } from 'neverthrow'; import { z } from 'zod'; const tableSchema = z.object({ @@ -89,6 +89,26 @@ export class RoomLocalDataSourceService { } } + + async removeMemberFromRoom($roomIdUserId): Promise> { + try { + + const member = await roomDataSource.memberList.where({ $roomIdUserId: $roomIdUserId }).first(); + + if (member) { + const result = await ok(roomDataSource.memberList.delete($roomIdUserId)); + console.log(`Member with $roomIdUserId ${$roomIdUserId} removed from room ${member.roomId}.`); + return result + } else { + console.log(`No member found with $roomIdUserId ${$roomIdUserId}`); + return + } + + } catch (e) { + return err(false) + } + } + async getRoomById(id: any) { try { const result = await roomDataSource.room.get(id) diff --git a/src/app/services/Repositorys/chat/repository/room-repository.service.ts b/src/app/services/Repositorys/chat/repository/room-repository.service.ts index 8ac7df9aa..7a79d5726 100644 --- a/src/app/services/Repositorys/chat/repository/room-repository.service.ts +++ b/src/app/services/Repositorys/chat/repository/room-repository.service.ts @@ -50,10 +50,14 @@ export class RoomRepositoryService { const { membersToInsert, membersToUpdate, membersToDelete } = roomMemberListDetermineChanges(result.value.data.members, localList, id) - for (const user of result.value.data.members) { + for (const user of membersToInsert) { this.roomLocalDataSourceService.addMember({...user, roomId:id}) } + for(const user of membersToDelete) { + this.roomLocalDataSourceService.removeMemberFromRoom(user.$roomIdUserId) + } + } return result