diff --git a/doc/process.md b/doc/process.md new file mode 100644 index 000000000..f8eb05ad8 --- /dev/null +++ b/doc/process.md @@ -0,0 +1 @@ +api/Tasks/ListKnowledge?ProcessName=Expediente&OnlyCount=false&pageNum=1&pageSize=25&status=3 diff --git a/src/app/core/chat/usecase/message/message-reaction-by-id-use-case.service.ts b/src/app/core/chat/usecase/message/message-reaction-by-id-use-case.service.ts index 7fb44f0e3..faf4a235e 100644 --- a/src/app/core/chat/usecase/message/message-reaction-by-id-use-case.service.ts +++ b/src/app/core/chat/usecase/message/message-reaction-by-id-use-case.service.ts @@ -1,10 +1,8 @@ import { Injectable } from '@angular/core'; -import { object, z } from 'zod'; -import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; -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 { z } from 'zod'; import { IMessageSocketRepository } from '../../repository/message/message-socket-repository'; - +import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; +import { zodSafeValidation } from 'src/app/utils/zodValidation'; const MessageReactionInputDTOSchema = z.object({ memberId: z.number(), @@ -25,8 +23,23 @@ export class MessageReactionUseCaseService { public repository: IMessageSocketRepository ) { } - @ValidateSchema(MessageReactionInputDTOSchema) - execute(input: MessageReactionInput) { - return this.repository.reactToMessageSocket(input) + @XTracerAsync({name:'MessageReactionUseCaseService', module:'chat', bugPrint: true, waitNThrow: 5000}) + async execute(input: MessageReactionInput, tracing?: TracingType) { + + const validation = zodSafeValidation(MessageReactionInputDTOSchema, input) + + if(validation.isOk()) { + const result = await this.repository.reactToMessageSocket(input) + + // console.log('result', result) + + return result + } else { + tracing.hasError('invalid input', { + error: validation.error + }) + } + + } } diff --git a/src/app/core/notification/use-case/notification-receive.service.ts b/src/app/core/notification/use-case/notification-receive.service.ts new file mode 100644 index 000000000..78c9ed324 --- /dev/null +++ b/src/app/core/notification/use-case/notification-receive.service.ts @@ -0,0 +1,43 @@ +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs'; +import { FirebasePushNotificationService } from 'src/app/module/notification/data/datasource/firebase-push-notification.service'; +import { NotificationLive } from 'src/app/module/notification/data/dto/NotificationLiveOutputDTO'; +import { NotificationMapper } from 'src/app/module/notification/domain/mapper/notificationMapper'; +import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; +import { + SpanStatus, SpanStatusCode +} from '@opentelemetry/api'; + +@Injectable({ + providedIn: 'root' +}) +export class NotificationReceiveService { + + constructor( + private FirebasePushNotificationService: FirebasePushNotificationService, + ) { } + + @XTracerAsync({name:'NotificationReceiveService', module:'notification', bugPrint: true}) + async execute(func:Function,tracing?: TracingType) { + + const notificationSubject: Subject = new Subject(); + + this.FirebasePushNotificationService.onReceiveForeground(async (data)=> { + + try { + func(NotificationMapper(data)); + } catch (error) { + const NewTracing = tracing.newTracer({name:'NotificationReceiveService-item-error'}) + NewTracing.setAttribute('notification-item-error', 'true') + NewTracing.hasError('NotificationMapper', { + notificationData: data + }) + NewTracing.log('invalid notification', data); + NewTracing.finish() + } + + }) + + return notificationSubject + } +} diff --git a/src/app/infra/socket/signalR/signal-r.service.ts b/src/app/infra/socket/signalR/signal-r.service.ts index b3bc62eb1..341ebeb67 100644 --- a/src/app/infra/socket/signalR/signal-r.service.ts +++ b/src/app/infra/socket/signalR/signal-r.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable, Subject, timer } from 'rxjs'; import { Platform } from '@ionic/angular'; -import { SignalRConnection, SocketMessage } from './signalR'; +import { SignalRConnection } from './signalR'; import { Plugins } from '@capacitor/core'; import { switchMap } from 'rxjs/operators'; import { err, Result } from 'neverthrow'; diff --git a/src/app/module/chat/data/repository/message/message-live-signalr-data-source.service.ts b/src/app/module/chat/data/repository/message/message-live-signalr-data-source.service.ts index 1b4316bec..5897df911 100644 --- a/src/app/module/chat/data/repository/message/message-live-signalr-data-source.service.ts +++ b/src/app/module/chat/data/repository/message/message-live-signalr-data-source.service.ts @@ -11,7 +11,7 @@ import { MessageCreateOutPutDataDTO, MessageInputDTO } from '../../../../../core import { MessageMarkAsReadInput } from '../../../../../core/chat/usecase/message/message-mark-as-read-use-case.service'; import { MessageOutPutDataDTO } from 'src/app/core/chat/repository/dto/messageOutputDTO'; import { MessageDeleteInputDTO } from '../../../../../core/chat/usecase/message/message-delete-by-id-live-use-case.service'; -import { BehaviorSubject, Observable } from 'rxjs'; +import { BehaviorSubject } from 'rxjs'; interface sendDeliverAt { memberId: number, @@ -140,13 +140,17 @@ export class MessageSocketRepositoryService implements IMessageSocketRepository reactToMessageSocket(data: MessageReactionInput) { - this.socket.sendData({ + data['requestId'] = InstanceId +'@'+ uuidv4(); + + return this.socket.sendData({ method: 'ReactMessage', data }) } updateMessage(input: MessageUpdateInput) { + input['requestId'] = InstanceId +'@'+ uuidv4(); + this.socket.sendData({ method: 'EditMessage', data: input, diff --git a/src/app/module/chat/data/repository/message/message-local-data-source.service.ts b/src/app/module/chat/data/repository/message/message-local-data-source.service.ts index 44bb98957..0443e1319 100644 --- a/src/app/module/chat/data/repository/message/message-local-data-source.service.ts +++ b/src/app/module/chat/data/repository/message/message-local-data-source.service.ts @@ -2,12 +2,12 @@ import { Injectable } from '@angular/core'; import { liveQuery } from 'Dexie'; import { MessageEntity } from '../../../../../core/chat/entity/message'; import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service'; -import { Observable as DexieObservable, PromiseExtended } from 'Dexie'; +import { PromiseExtended } from 'Dexie'; import { DexieMessageTable, MessageTable, MessageTableSchema } from 'src/app/infra/database/dexie/instance/chat/schema/message'; import { chatDatabase } from 'src/app/infra/database/dexie/instance/chat/service'; import { IDirectMessages, IMessageLocalRepository } from 'src/app/core/chat/repository/message/message-local-repository'; -import { BehaviorSubject, combineLatest, from, Observable, Subject } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { combineLatest, from, Observable, Subject } from 'rxjs'; +import { map } from 'rxjs/operators'; import { v4 as uuidv4 } from 'uuid' import { err, ok } from 'neverthrow'; diff --git a/src/app/module/notification/data/notification-repository.service.ts b/src/app/module/notification/data/notification-repository.service.ts index 376296337..b75d5a560 100644 --- a/src/app/module/notification/data/notification-repository.service.ts +++ b/src/app/module/notification/data/notification-repository.service.ts @@ -8,9 +8,8 @@ import { NotificationListMapper } from '../domain/mapper/notificationListMapper' import { NotificationTable } from './infra/db/notification.db'; import { Observable, Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; -import { NotificationMapper } from '../domain/mapper/notificationMapper'; import { NotificationLive } from './dto/NotificationLiveOutputDTO'; - +import { NotificationReceiveService } from 'src/app/core/notification/use-case/notification-receive.service' @Injectable({ providedIn: 'root' }) @@ -21,16 +20,15 @@ export class NotificationRepositoryService { constructor( private RemoteNotificationService: RemoteNotificationService, private FirebasePushNotificationService: FirebasePushNotificationService, - private LocalNotificationService: LocalNotificationService + private LocalNotificationService: LocalNotificationService, + private NotificationReceiveService: NotificationReceiveService ) { - this.FirebasePushNotificationService.onReceiveForeground(async (data)=> { - this.notificationSubject.next(NotificationMapper(data)); + this.NotificationReceiveService.execute((data) => { console.log('FirebasePushNotificationService', data) - this.init() + this.init(); }) - if(SessionStore.user.UserId) { this.init() } diff --git a/src/app/services/monitoring/opentelemetry/tracer.ts b/src/app/services/monitoring/opentelemetry/tracer.ts index 6932b344f..d1f0c2069 100644 --- a/src/app/services/monitoring/opentelemetry/tracer.ts +++ b/src/app/services/monitoring/opentelemetry/tracer.ts @@ -165,6 +165,9 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish, waitNThrow = }, createSpan: (name, parent?: any) => { return tracerInstance.startSpan(name, { root: false }, parent) as Span; + }, + newTracer({bugPrint = false, name, autoFinish =false, waitNThrow = 0}) { + return createTracingInstance({bugPrint, name, module, autoFinish, waitNThrow}) } } @@ -285,6 +288,7 @@ export type TracingType = { finish: () => void; hasError:(message: string, obj?: Object) => void; createSpan:(name, parent?: any) => Span; + newTracer:({name, bugPrint, autoFinish, daley, waitNThrow}: {name:string, bugPrint?:any, autoFinish?:any, daley?:any, waitNThrow?:any}) => TracingType; }; export interface UserInteraction { diff --git a/src/app/shared/gabinete-digital/generic/task-details/task-details.page.ts b/src/app/shared/gabinete-digital/generic/task-details/task-details.page.ts index 95fdba62e..b03e2940b 100644 --- a/src/app/shared/gabinete-digital/generic/task-details/task-details.page.ts +++ b/src/app/shared/gabinete-digital/generic/task-details/task-details.page.ts @@ -61,35 +61,46 @@ export class TaskDetailsPage implements OnInit { setTimeout(() => { console.log('change', this.task.Note); // this.task.Note = this.sanitizeHtml(this.task.Note) as any - (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + if(this.text.nativeElement) { + (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + } + }, 10) setTimeout(() => { console.log('change', this.task.Note); // this.task.Note = this.sanitizeHtml(this.task.Note) as any - (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + if(this.text.nativeElement) { + (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + } }, 100) setTimeout(() => { console.log('change', this.task.Note); // this.task.Note = this.sanitizeHtml(this.task.Note) as any - (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + if(this.text.nativeElement) { + (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + } }, 500) setTimeout(() => { console.log('change', this.task.Note); // this.task.Note = this.sanitizeHtml(this.task.Note) as any - (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + if(this.text.nativeElement) { + (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + } }, 1000) setTimeout(() => { console.log('change', this.task.Note); // this.task.Note = this.sanitizeHtml(this.task.Note) as any - (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + if(this.text.nativeElement) { + (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + } }, 2000) @@ -97,7 +108,9 @@ export class TaskDetailsPage implements OnInit { setTimeout(() => { console.log('change', this.task.Note); // this.task.Note = this.sanitizeHtml(this.task.Note) as any - (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + if(this.text.nativeElement) { + (this.text.nativeElement as HTMLDivElement).innerHTML = this.decode(this.task.Note) + } }, 4000) diff --git a/src/app/ui/chat/chat.page.html b/src/app/ui/chat/chat.page.html index acd0e5582..0681d79d6 100644 --- a/src/app/ui/chat/chat.page.html +++ b/src/app/ui/chat/chat.page.html @@ -89,7 +89,7 @@ audio - {{ room.messages[0].attachments[0].description }} + {{ room.messages[0].attachments[0].description }}