mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
add change detector for member list on getRommById on remote data source
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
import { TableMemberList } from "../../data-source/room/rooom-local-data-source.service";
|
import { TableMemberList } from "../../data-source/room/rooom-local-data-source.service";
|
||||||
import { RoomByIdMemberItemOutputDTO } from "../../dto/room/roomByIdOutputDTO";
|
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 {
|
return {
|
||||||
...e,
|
...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 serverRoomMap = new Map(PServerRooms.map(room => [room.$roomIdUserId, room]));
|
||||||
const localRoomMap = new Map(localRooms.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 membersToInsert = PServerRooms.filter(room => !localRoomMap.has(room.$roomIdUserId));
|
||||||
const membersToUpdate = serverRooms.filter(room => {
|
const membersToUpdate = PServerRooms.filter(room => {
|
||||||
const localRoom = localRoomMap.get(room.id);
|
const localRoom = localRoomMap.get(room.$roomIdUserId);
|
||||||
return localRoom && (
|
return localRoom && (
|
||||||
room.user.wxUserId !== localRoom.user.wxUserId ||
|
room.user.wxUserId !== localRoom.user.wxUserId ||
|
||||||
room.user.userPhoto !== localRoom.user.userPhoto ||
|
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 };
|
return { membersToInsert, membersToUpdate, membersToDelete };
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-1
@@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO';
|
import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO';
|
||||||
import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie';
|
import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie';
|
||||||
import { err, ok } from 'neverthrow';
|
import { err, ok, Result } from 'neverthrow';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
|
|
||||||
const tableSchema = z.object({
|
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) {
|
async getRoomById(id: any) {
|
||||||
try {
|
try {
|
||||||
const result = await roomDataSource.room.get(id)
|
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)
|
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})
|
this.roomLocalDataSourceService.addMember({...user, roomId:id})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(const user of membersToDelete) {
|
||||||
|
this.roomLocalDataSourceService.removeMemberFromRoom(user.$roomIdUserId)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|||||||
Reference in New Issue
Block a user