Files
doneit-web/src/app/module/chat/data/repository/message/message-local-data-source.service.ts
T

56 lines
1.8 KiB
TypeScript
Raw Normal View History

2024-06-05 10:28:38 +01:00
import { Injectable } from '@angular/core';
2024-08-13 10:52:35 +01:00
import { liveQuery } from 'Dexie';
2024-07-18 16:19:30 +01:00
import { err, ok, Result } from 'neverthrow';
2024-08-13 10:52:35 +01:00
import { Observable, Subject } from 'rxjs';
2024-08-06 12:01:59 +01:00
import { filter } from 'rxjs/operators';
2024-08-26 14:47:03 +01:00
import { MessageEntity } from '../../../../../core/chat/entity/message';
2024-08-07 16:31:31 +01:00
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
2024-08-13 10:52:35 +01:00
import { Observable as DexieObservable, PromiseExtended } from 'Dexie';
2024-08-27 10:15:00 +01:00
import { MessageTable, MessageTableSchema } from 'src/app/infra/database/dexie/instance/chat/schema/message';
import { chatDatabase } from 'src/app/infra/database/dexie/service';
2024-06-05 10:28:38 +01:00
@Injectable({
providedIn: 'root'
})
2024-08-26 14:47:03 +01:00
export class MessageLocalDataSourceService extends DexieRepository<MessageTable, MessageEntity> {
2024-06-05 10:28:38 +01:00
2024-06-13 12:11:17 +01:00
constructor() {
2024-08-13 17:05:46 +01:00
super(chatDatabase.message, MessageTableSchema)
2024-08-15 10:26:20 +01:00
this.setAllSenderToFalse();
2024-06-13 12:11:17 +01:00
}
2024-06-05 10:28:38 +01:00
async setAllSenderToFalse() {
try {
2024-08-07 19:30:20 +01:00
await chatDatabase.transaction('rw', chatDatabase.message, async () => {
// Perform the update operation within the transaction
2024-08-07 19:30:20 +01:00
await chatDatabase.message.toCollection().modify({ sending: false });
});
} catch (error) {
console.error('Error updating messages:', error);
}
}
2024-06-05 10:28:38 +01:00
2024-08-13 10:52:35 +01:00
getItems(roomId: string): PromiseExtended<MessageEntity[]> {
return chatDatabase.message.where('roomId').equals(roomId).sortBy('$id') as any
2024-08-06 16:53:13 +01:00
}
2024-08-13 10:52:35 +01:00
getItemsLive(roomId: string): DexieObservable<MessageEntity[]> {
return liveQuery(() => chatDatabase.message.where('roomId').equals(roomId).sortBy('$id') as any)
2024-06-05 10:28:38 +01:00
}
2024-08-07 15:23:23 +01:00
async getOfflineMessages () {
try {
2024-08-07 19:30:20 +01:00
const allMessages = await chatDatabase.message
2024-08-07 15:23:23 +01:00
.filter(msg => typeof msg.id !== 'string' && msg.sending == false)
.toArray();
return allMessages as MessageEntity[];
} catch (error) {
console.error('Error fetching messages:', error);
}
}
2024-06-05 10:28:38 +01:00
}