add change detector for member list on getRommById on remote data source

This commit is contained in:
Peter Maquiran
2024-06-10 22:13:10 +01:00
parent 3dc6c0e249
commit 1bfe617bfd
3 changed files with 34 additions and 8 deletions
@@ -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 };
}
@@ -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<Result<any ,any>> {
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)
@@ -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