This commit is contained in:
Peter Maquiran
2024-08-30 12:41:50 +01:00
parent ac7e5ccf5b
commit d6a08c6264
33 changed files with 558 additions and 87 deletions
@@ -0,0 +1,29 @@
import { DistributionTable } from "src/app/infra/database/dexie/instance/chat/schema/destribution";
import { DistributionOutPutDTO } from "src/app/module/chat/domain/service/distribution.service";
export function distributionListDetermineChanges(____serverDistributions: DistributionOutPutDTO[], localDistributions: DistributionTable[], messageId: string) {
const serverDistribution = ____serverDistributions.map( e=> {
return {
...e,
$messageIdMemberId: messageId + e.memberId
}
})
const serverDistributionMap = new Map(serverDistribution.map(distribution => [distribution.$messageIdMemberId, distribution]));
const localDistributionMap = new Map(localDistributions.map(distribution => [distribution.$messageIdMemberId, distribution]));
const distributionToInsert = serverDistribution.filter(distribution => !localDistributionMap.has(distribution.$messageIdMemberId));
const distributionToUpdate = serverDistribution.filter(distribution => {
const localDistribution = localDistributionMap.get(distribution.$messageIdMemberId);
return localDistribution && (
distribution.deliverAt !== localDistribution.deliverAt ||
distribution.readAt !== localDistribution.readAt
)
});
const distributionToDelete = localDistributions.filter(distribution => !serverDistributionMap.has(distribution.$messageIdMemberId));
return { distributionToInsert, distributionToUpdate, distributionToDelete };
}
@@ -0,0 +1,33 @@
import { RoomTable } from "src/app/infra/database/dexie/instance/chat/schema/room";
import { RoomByIdOutputDTO } from "src/app/module/chat/domain/use-case/room/room-get-by-id-use-case.service";
import { RoomListItemOutPutDTO } from "src/app/module/chat/domain/use-case/room/room-get-list-use-case.service";
export function roomByIdDetermineChanges(serverResponse: RoomByIdOutputDTO, localRooms: RoomTable[]) {
const localRoomMap = new Map(localRooms.map(room => [room.id, room]));
let roomsToInsert:RoomByIdOutputDTO | undefined;
let roomsToUpdate: RoomByIdOutputDTO | undefined;
const fond = localRooms.filter(room => !localRoomMap.has(serverResponse.data.id));
if(!fond) {
roomsToInsert = serverResponse
}
const needToUpdate = localRooms.filter(room => {
const localRoom = localRoomMap.get(room.id);
return localRoom && (
room.roomName !== serverResponse.data.roomName ||
room.createdBy.wxUserId !== serverResponse.data.createdBy.wxUserId ||
room.createdAt !== serverResponse.data.createdAt ||
room.expirationDate !== serverResponse.data.expirationDate // ||
// room.chatRoom.roomType !== localRoom.roomType
);
});
if(needToUpdate) {
roomsToUpdate = serverResponse
}
return { roomsToInsert, roomsToUpdate };
}
@@ -1,3 +1,4 @@
import { RoomType } from "src/app/core/chat/entity/group";
import { RoomTable } from "src/app/infra/database/dexie/instance/chat/schema/room";
import { RoomListItemOutPutDTO } from "src/app/module/chat/domain/use-case/room/room-get-list-use-case.service";
@@ -8,8 +9,9 @@ export function roomListDetermineChanges(serverRooms: RoomListItemOutPutDTO[], l
const roomsToInsert = serverRooms.filter(room => !localRoomMap.has(room.chatRoom.id));
const roomsToUpdate = serverRooms.filter(room => {
const localRoom = localRoomMap.get(room.chatRoom.id);
return localRoom && (
room.chatRoom.roomName !== localRoom.roomName ||
room.chatRoom.roomName !== localRoom.roomName && room.chatRoom.roomType == RoomType.Group ||
room.chatRoom.createdBy.wxUserId !== localRoom.createdBy.wxUserId ||
room.chatRoom.createdAt !== localRoom.createdAt ||
room.chatRoom.expirationDate !== localRoom.expirationDate // ||
@@ -0,0 +1,20 @@
import { Injectable } from '@angular/core';
import { from } from "rxjs";
import { DexieRepository } from "src/app/infra/repository/dexie/dexie-repository.service";
import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie';
import { BoldTable, BoldTableSchema } from "src/app/infra/database/dexie/instance/chat/schema/bold";
import { chatDatabase } from "src/app/infra/database/dexie/service";
import { IBoldLocalRepository } from "src/app/core/chat/repository/bold/bold-local-repository";
@Injectable({
providedIn: 'root'
})
export class BoldLocalRepository extends DexieRepository<BoldTable, BoldTable> implements IBoldLocalRepository {
constructor() {
super(chatDatabase.bold, BoldTableSchema)
}
listen() {
return from(liveQuery(() => chatDatabase.bold.toArray()))
}
}
@@ -0,0 +1,14 @@
import { DistributionTable, DistributionTableSchema } from "src/app/infra/database/dexie/instance/chat/schema/destribution";
import { chatDatabase } from "src/app/infra/database/dexie/service";
import { DexieRepository } from "src/app/infra/repository/dexie/dexie-repository.service";
export class DistributionLocalRepository extends DexieRepository<DistributionTable, DistributionTable> {
constructor() {
super(chatDatabase.distribution, DistributionTableSchema)
chatDatabase.distribution.hook("creating", function (primKey, obj, transaction) {
obj.$messageIdMemberId = `${obj.messageId}${obj.memberId}`
});
}
}