diff --git a/src/app/infra/repository/dexie/dexie-repository.service.ts b/src/app/infra/repository/dexie/dexie-repository.service.ts index 3bf4a3dc7..40ac02bb9 100644 --- a/src/app/infra/repository/dexie/dexie-repository.service.ts +++ b/src/app/infra/repository/dexie/dexie-repository.service.ts @@ -4,8 +4,8 @@ import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie'; // Define a type for the Result of repository operations type RepositoryResult = Result; -export class DexieRepository { - private table: EntityTable; +export class DexieRepository { + private table: EntityTable; constructor(table: EntityTable) { this.table = table as any @@ -56,39 +56,39 @@ export class DexieRepository { } } - // async find(filter: any) { - // try { - // const documents = await this.table.where(filter).toArray(); - // return ok(documents); - // } catch (error) { - // return err(new Error('Failed to find documents: ' + error.message)); - // } - // } + async find(filter: Object) { + try { + const documents = await this.table.where(filter).toArray(); + return ok(documents); + } catch (error) { + return err(new Error('Failed to find documents: ' + error.message)); + } + } - // async findOne(filter: any): Promise> { - // try { - // const document = await this.table.where(filter).first(); - // return ok(document); - // } catch (error) { - // return err(new Error('Failed to find document: ' + error.message)); - // } - // } + async findOne(filter: Object): Promise> { + try { + const document = await this.table.where(filter).first(); + return ok(document); + } catch (error) { + return err(new Error('Failed to find document: ' + error.message)); + } + } - // async findAll(): Promise> { - // try { - // const documents = await this.table.toArray(); - // return ok(documents); - // } catch (error) { - // return err(new Error('Failed to retrieve all documents: ' + error.message)); - // } - // } + async findAll(): Promise> { + try { + const documents = await this.table.toArray(); + return ok(documents); + } catch (error) { + return err(new Error('Failed to retrieve all documents: ' + error.message)); + } + } - // async count(filter?: any): Promise> { - // try { - // const count = filter ? await this.table.where(filter).count() : await this.table.count(); - // return ok(count); - // } catch (error) { - // return err(new Error('Failed to count documents: ' + error.message)); - // } - // } + async count(filter?: Object): Promise> { + try { + const count = filter ? await this.table.where(filter).count() : await this.table.count(); + return ok(count); + } catch (error) { + return err(new Error('Failed to count documents: ' + error.message)); + } + } } diff --git a/src/app/module/chat/data/data-source/member-list/member-list-local-data-source.service.ts b/src/app/module/chat/data/data-source/member-list/member-list-local-data-source.service.ts index 4d1da80d2..9e0e818c3 100644 --- a/src/app/module/chat/data/data-source/member-list/member-list-local-data-source.service.ts +++ b/src/app/module/chat/data/data-source/member-list/member-list-local-data-source.service.ts @@ -21,7 +21,7 @@ const TableMemberListSchema = z.object({ export type ITableMemberList = z.infer -type ITableMemberListSchema = EntityTable +type ITableMemberListSchema = EntityTable // Database declaration (move this to its own module also) export const roomMemberList = new Dexie('roomMemberList') as Dexie & { memberList: EntityTable; @@ -34,7 +34,7 @@ roomMemberList.version(1).stores({ @Injectable({ providedIn: 'root' }) -export class MemberListLocalDataSourceService extends DexieRepository { +export class MemberListLocalDataSourceService extends DexieRepository { constructor() { super(roomMemberList.memberList); diff --git a/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts b/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts index 34e42a5af..0c0db5bdd 100644 --- a/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts +++ b/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts @@ -6,6 +6,7 @@ import { from, Observable, Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; import { MessageInputDTO } from '../../dto/message/messageInputDtO'; import { MessageEntity } from '../../../domain/entity/message'; +import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service'; const tableSchema = z.object({ @@ -67,12 +68,12 @@ messageDataSource.message.mapToClass(MessageEntity); @Injectable({ providedIn: 'root' }) -export class MessageLocalDataSourceService { +export class MessageLocalDataSourceService extends DexieRepository { messageSubject = new Subject(); constructor() { - + super(messageDataSource.message) // messageDataSource.message.hook('creating', (primKey, obj, trans) => { // // const newMessage = await trans.table('message').get(primKey); // this.messageSubject.next(obj); @@ -154,6 +155,17 @@ export class MessageLocalDataSourceService { } + async createManyMessage(data: MessageInputDTO[]) { + + try { + const result = await messageDataSource.message.bulkAdd(data) + this.messageSubject.next({roomId: data[0].roomId}); + return ok(result) + } catch (e) { + return err(false) + } + + } async messageExist({id}) { try { @@ -177,19 +189,6 @@ export class MessageLocalDataSourceService { } - async update(data: TableMessage ) { - - try { - console.log('update images 22222') - const result = await messageDataSource.message.update(data.$id, data) - return ok(result) - } catch (e) { - return err(false) - } - - } - - // not used async updateByMessageId(data: TableMessage ) { @@ -207,7 +206,7 @@ export class MessageLocalDataSourceService { const findResult = await this.findMessageById(data.id) if(findResult.isOk()) { - return this.update({...findResult.value, ...data}) + return this.update(findResult.value.$id, data) } else { return this.createMessage(data) } diff --git a/src/app/module/chat/data/repository/message-respository.service.ts b/src/app/module/chat/data/repository/message-respository.service.ts index c00f7f5a7..05ed52dab 100644 --- a/src/app/module/chat/data/repository/message-respository.service.ts +++ b/src/app/module/chat/data/repository/message-respository.service.ts @@ -61,9 +61,9 @@ export class MessageRepositoryService { $id : localActionResult.value } - return this.messageLocalDataSourceService.update({...clone, sending: false, roomId: entity.roomId}) + return this.messageLocalDataSourceService.update(localActionResult.value, {...clone, sending: false, roomId: entity.roomId}) } else { - await this.messageLocalDataSourceService.update({sending: false, $id: localActionResult.value}) + await this.messageLocalDataSourceService.update(localActionResult.value, {sending: false, $id: localActionResult.value}) return err('no connection') } @@ -123,8 +123,9 @@ export class MessageRepositoryService { for(const message of addedItems) { let clone: TableMessage = message clone.roomId = id - await this.messageLocalDataSourceService.createMessage(clone) + } + await this.messageLocalDataSourceService.createManyMessage(addedItems.reverse()) } return result } diff --git a/src/app/module/chat/data/service/sync-repository/sync-message-repository.service.ts b/src/app/module/chat/data/service/sync-repository/sync-message-repository.service.ts index fb2823575..0df5ef032 100644 --- a/src/app/module/chat/data/service/sync-repository/sync-message-repository.service.ts +++ b/src/app/module/chat/data/service/sync-repository/sync-message-repository.service.ts @@ -34,7 +34,7 @@ export class SyncMessageRepositoryService { const requestId = InstanceId +'@'+ uuidv4(); const DTO = MessageMapper.fromDomain(message, requestId) - await this.messageLocalDataSourceService.update({sending: true, $id: message.$id}) + await this.messageLocalDataSourceService.update(message.$id, { sending: true }) const sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage(DTO) if(sendMessageResult.isOk()) { @@ -50,9 +50,9 @@ export class SyncMessageRepositoryService { $id : message.$id } - this.messageLocalDataSourceService.update({...clone, sending: false, roomId: message.roomId}) + this.messageLocalDataSourceService.update(message.$id, {...clone, sending: false, roomId: message.roomId}) } else { - this.messageLocalDataSourceService.update({sending: false, $id: message.$id}) + this.messageLocalDataSourceService.update(message.$id, {sending: false}) } } diff --git a/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts b/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts index 0cbfb8a29..8aebf07c8 100644 --- a/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts @@ -25,7 +25,7 @@ export class SocketMessageUpdateUseCaseService { if(result.isOk()) { console.log('message exist') - return this.messageLocalDataSourceService.update({...result.value, ...incomingMessage}) + return this.messageLocalDataSourceService.update(result.value.$id, incomingMessage) } else { console.log('message else') }