fixslow send

This commit is contained in:
Peter Maquiran
2025-01-14 14:56:57 +01:00
parent 18a8d90d99
commit 33401c37d0
42 changed files with 399 additions and 73 deletions
@@ -106,78 +106,96 @@ export class MessageCreateUseCaseService {
message.sendAttemp++;
message.requestId = InstanceId +'@'+ uuidv4();
message.sending = true;
const createMessageLocally = await this.messageLocalDataSourceService.insert(message)
const createMessageLocally = this.messageLocalDataSourceService.insert(message)
if(createMessageLocally.isOk()) {
createMessageLocally.then((value) => {
if(value.isOk()) {
message.$id = createMessageLocally.value
console.log("set image")
message.$id = value.value
if(message.hasAttachment) {
if(message.hasAttachment) {
for (const attachment of message.attachments) {
for (const attachment of message.attachments) {
if(attachment.source != MessageAttachmentSource.Webtrix) {
if(attachment.source != MessageAttachmentSource.Webtrix) {
this.AttachmentLocalRepositoryService.insert({
$messageId: createMessageLocally.value,
file: createBlobFromBase64(attachment.file, attachment.mimeType),
fileType: attachment.fileType,
source: attachment.source,
fileName: attachment.fileName,
applicationId: attachment.applicationId,
docId: attachment.docId,
mimeType: attachment.mimeType,
base64: createDataURL(attachment.file, attachment.mimeType)
}).then((e) => {
if(e.isErr()) {
Logger.error('failed to create attachment locally on send message', {
error: e.error,
data: createDataURL(attachment.file, attachment.mimeType).slice(0, 100) +'...'
})
}
this.AttachmentLocalRepositoryService.insert({
$messageId: value.value,
file: createBlobFromBase64(attachment.file, attachment.mimeType),
fileType: attachment.fileType,
source: attachment.source,
fileName: attachment.fileName,
applicationId: attachment.applicationId,
docId: attachment.docId,
mimeType: attachment.mimeType,
base64: createDataURL(attachment.file, attachment.mimeType)
}).then((e) => {
if(e.isErr()) {
Logger.error('failed to create attachment locally on send message', {
error: e.error,
data: createDataURL(attachment.file, attachment.mimeType).slice(0, 100) +'...'
})
}
})
})
attachment.safeFile = createDataURL(attachment.file, attachment.mimeType)
attachment.safeFile = createDataURL(attachment.file, attachment.mimeType)
}
}
}
}
//====================
message.sending = true
let sendMessageResult: Result<MessageOutPutDataDTO, any>
if(messageEnum == RoomType.Group) {
const DTO = MessageMapper.fromDomain(message, message.requestId)
sendMessageResult = await this.messageSocketRepositoryService.sendGroupMessage(DTO)
} else {
const DTO = MessageMapper.fromDomain(message, message.requestId)
delete DTO.roomId
sendMessageResult = await this.messageSocketRepositoryService.sendDirectMessage(DTO)
Logger.error('failed to insert locally', {
error: value.error.message
})
}
// return this sendMessageResult
});
if(sendMessageResult.isOk()) {
//====================
message.sending = true
message.id = sendMessageResult.value.id
let sendMessageResult!: Result<MessageOutPutDataDTO, any>
const start = performance.now(); // Capture the start time
if(messageEnum == RoomType.Group) {
const DTO = MessageMapper.fromDomain(message, message.requestId)
sendMessageResult = await this.messageSocketRepositoryService.sendGroupMessage(DTO)
} else {
const DTO = MessageMapper.fromDomain(message, message.requestId)
delete DTO.roomId
sendMessageResult = await this.messageSocketRepositoryService.sendDirectMessage(DTO)
}
console.log('sendMessageResult', sendMessageResult.value.id)
const end = performance.now(); // Capture the end time
const duration = end - start; // Calculate the difference
if(sendMessageResult.value.sender == undefined || sendMessageResult.value.sender == null) {
tracing.setAttribute("duration", `Execution time: ${duration}ms`);
delete sendMessageResult.value.sender
}
// return this sendMessageResult
if(sendMessageResult.isOk()) {
message.id = sendMessageResult.value.id
console.log('sendMessageResult', sendMessageResult.value.id)
if(sendMessageResult.value.sender == undefined || sendMessageResult.value.sender == null) {
delete sendMessageResult.value.sender
}
createMessageLocally.then((value) => {
console.log('sendMessageResult', (sendMessageResult as any).value)
let clone: MessageTable = {
...sendMessageResult.value,
id: sendMessageResult.value.id,
...(sendMessageResult as any).value,
id: (sendMessageResult as any).value.id,
$id : message.$id
}
console.log('set update')
this.messageLocalDataSourceService.update(message.$id, {...clone, sending: false, roomId: clone.roomId}).then((data)=> {
if(data.isOk()) {
@@ -187,20 +205,16 @@ export class MessageCreateUseCaseService {
console.log(data.error)
}
})
});
return sendMessageResult
} else {
Logger.error('failed to send message to the server', {
error: sendMessageResult.error
})
await this.messageLocalDataSourceService.update(message.$id, {sending: false, $id: message.$id})
return err('no connection')
}
return sendMessageResult
} else {
Logger.error('failed to insert locally', {
error: createMessageLocally.error.message
Logger.error('failed to send message to the server', {
error: sendMessageResult.error
})
await this.messageLocalDataSourceService.update(message.$id, {sending: false, $id: message.$id})
return err('no connection')
}
} else {
@@ -4,6 +4,9 @@ import { ValidateSchema } from 'src/app/services/decorators/validate-schema.deco
import { MessageRemoteDataSourceService } from '../../../../module/chat/data/repository/message/message-remote-data-source.service';
import { MessageSocketRepositoryService } from '../../../../module/chat/data/repository/message/message-live-signalr-data-source.service';
import { IMessageSocketRepository } from '../../repository/message/message-socket-repository';
import { zodSafeValidation } from 'src/app/utils/zodValidation';
import { Logger } from 'src/app/services/logger/main/service';
import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer';
const MessageUpdateInputDTOSchema = z.object({
@@ -26,9 +29,23 @@ export class MessageUpdateUseCaseService {
public repository: IMessageSocketRepository
) { }
@ValidateSchema(MessageUpdateInputDTOSchema)
execute(input: MessageUpdateInput) {
return this.repository.updateMessage(input);
@XTracerAsync({name:'MessageUpdateUseCaseService', module:'chat', bugPrint: true, waitNThrow: 5000})
async execute(input: MessageUpdateInput, tracing?: TracingType) {
console.log('MessageUpdateUseCaseService', input)
const validation = zodSafeValidation<MessageUpdateInput>(MessageUpdateInputDTOSchema, input)
if(validation.isOk()) {
} else {
tracing.hasError('failed to update message, validation failed')
Logger.error('failed to update message, validation failed', {
zodErrorList: validation.error.errors,
data: input
})
}
return await this.repository.updateMessage(input);
}
}