add room async function

This commit is contained in:
Peter Maquiran
2024-06-07 17:00:30 +01:00
parent c9b4f2d349
commit f457fcbdd4
4 changed files with 32 additions and 7 deletions
@@ -0,0 +1,22 @@
import { TableRoom } from "../../data-source/room/rooom-local-data-source.service";
import { RoomListItemOutPutDTO } from "../../dto/room/roomListOutputDTO";
export function roomListDetermineChanges(serverRooms: RoomListItemOutPutDTO[], localRooms: TableRoom[]) {
const serverRoomMap = new Map(serverRooms.map(room => [room.id, room]));
const localRoomMap = new Map(localRooms.map(room => [room.id, room]));
const roomsToInsert = serverRooms.filter(room => !localRoomMap.has(room.id));
const roomsToUpdate = serverRooms.filter(room => {
const localRoom = localRoomMap.get(room.id);
return localRoom && (
room.roomName !== localRoom.roomName ||
room.createdBy.wxUserId !== localRoom.createdBy.wxUserId ||
room.createdAt !== localRoom.createdAt ||
room.expirationDate !== localRoom.expirationDate ||
room.roomType !== localRoom.roomType
);
});
const roomsToDelete = localRooms.filter(room => !serverRoomMap.has(room.id));
return { roomsToInsert, roomsToUpdate, roomsToDelete };
}
@@ -101,6 +101,11 @@ export class RoomLocalDataSourceService {
}
}
async getRoomList() {
return await roomDataSource.room.toArray()
}
getItemsLive(): Observable<RoomListOutPutDTO[]> {
return liveQuery(() => roomDataSource.room.toArray()) as any;
}
@@ -5,8 +5,6 @@ import { addRoom, RoomRemoteDataSourceState } from '../data-source/room/room-mem
import { Store } from '@ngrx/store';
import { AddMemberToRoomInputDTO } from '../dto/room/addMemberToRoomInputDto';
import { RoomLocalDataSourceService } from '../data-source/room/rooom-local-data-source.service';
import { HttpErrorResponse } from '@angular/common/http';
import { ZodError } from 'zod';
import { RoomByIdInputDTO } from '../dto/room/roomByIdInputDTO';
@Injectable({
@@ -22,8 +20,10 @@ export class RoomRepositoryService {
async list() {
const result = await this.roomRemoteDataSourceService.getRoomList()
// const localList = await this.roomLocalDataSourceService.getRoomList()
if(result.isOk()) {
// const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges(result.value, localList)
for( const roomData of result.value.data) {
this.roomLocalDataSourceService.createOrUpdateRoom(roomData)
}
@@ -46,8 +46,8 @@ export class RoomRepositoryService {
async create(data: RoomInputDTO) {
const result = await this.roomRemoteDataSourceService.createRoom(data)
if(result.isOk()) {
this.roomMemoryDataSourceService.dispatch(addRoom(result.value))
this.roomLocalDataSourceService.createRoom(result.value.data)
}