send offline message

This commit is contained in:
Peter Maquiran
2024-08-07 15:23:23 +01:00
parent b0a334c9dd
commit bbacc35b08
9 changed files with 172 additions and 4 deletions
@@ -0,0 +1,16 @@
import { TestBed } from '@angular/core/testing';
import { MessageRepositoryAyncService } from './message-repository-aync.service';
describe('MessageRepositoryAyncService', () => {
let service: MessageRepositoryAyncService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(MessageRepositoryAyncService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});
@@ -0,0 +1,12 @@
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class MessageRepositoryAyncService {
constructor() {
// alert('hellor')
}
}
@@ -235,5 +235,18 @@ export class MessageLocalDataSourceService {
)
)
}
async getOfflineMessages () {
try {
const allMessages = await messageDataSource.message
.filter(msg => typeof msg.id !== 'string' && msg.sending == false)
.toArray();
return allMessages as MessageEntity[];
} catch (error) {
console.error('Error fetching messages:', error);
}
}
}
@@ -0,0 +1,51 @@
import { Injectable } from '@angular/core';
import { SignalRService } from '../../../infra/socket/signal-r.service';
import { MessageLiveDataSourceService } from '../../data-source/message/message-live-data-source.service';
import { MessageLocalDataSourceService, TableMessage } from '../../data-source/message/message-local-data-source.service';
import { MessageRemoteDataSourceService } from '../../data-source/message/message-remote-data-source.service';
import { InstanceId } from '../../../domain/chat-service.service';
import { v4 as uuidv4 } from 'uuid'
import { MessageMapper } from 'src/app/module/chat/domain/mapper/messageMapper'
@Injectable({
providedIn: 'root'
})
export class SyncMessageRepositoryService {
constructor(
private messageRemoteDataSourceService: MessageRemoteDataSourceService,
private messageLiveDataSourceService: MessageLiveDataSourceService,
private messageLiveSignalRDataSourceService: SignalRService,
private messageLocalDataSourceService: MessageLocalDataSourceService
) { }
async sendLocalMessages() {
const messages = await this.messageLocalDataSourceService.getOfflineMessages()
if(messages.length >= 1) {
console.log('to send '+ messages.length)
for(const message of messages) {
const requestId = InstanceId +'@'+ uuidv4();
const DTO = MessageMapper.fromDomain(message, requestId)
const sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage(DTO)
if(sendMessageResult.isOk()) {
if(sendMessageResult.value.sender == undefined || sendMessageResult.value.sender == null) {
delete sendMessageResult.value.sender
}
let clone: TableMessage = {
...sendMessageResult.value,
id: sendMessageResult.value.id,
$id : message.$id
}
return this.messageLocalDataSourceService.update({...clone, sending: false, roomId: message.roomId})
}
}
}
}
}