fix chage duplicate message

This commit is contained in:
peter.maquiran
2025-09-04 15:40:45 +01:00
parent cfc7330e72
commit 430adf394d
54 changed files with 206 additions and 330 deletions
@@ -11,13 +11,14 @@ import { HttpService } from 'src/app/services/http.service';
import { TracingType } from 'src/app/services/monitoring/opentelemetry/tracer';
import { IGetDraftListByProcessIdOutput, IGetDraftListByProcessIdSchema } from '../../domain/usecase/getDraft-list-by-process-id.service';
import { IDraftSaveByIdInput } from '../../domain/usecase/draft-save-by-id-use-case.service';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class AgendaDataService {
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2'; // Your base URL
private baseUrl = `${environment.apiURLStage.slice(0, -1)}`; // Your base URL
constructor(
private http: HttpClient,
@@ -3,11 +3,12 @@ import { IAttachmentRemoteRepository } from 'src/app/core/chat/repository/attach
import { HttpService } from 'src/app/services/http.service';
import { DataSourceReturn } from 'src/app/services/Repositorys/type';
import { HttpAdapter } from 'src/app/infra/http/adapter'
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class AttachmentRemoteDataSourceService implements IAttachmentRemoteRepository {
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL
private baseUrl = `${environment.apiURLStage.slice(0, -1)}`; // Your base URL
constructor(
private httpService: HttpService,
@@ -7,12 +7,13 @@ import { IMemberRemoteRepository } from 'src/app/core/chat/repository/member/mem
import { UserRemoveListInputDTOSchema, UserRemoveListInputDTO } from '../../../../../core/chat/usecase/room/room-leave-by-id-use-case.service';
import { AddMemberToRoomInputDTOSchema, AddMemberToRoomInputDTO } from 'src/app/core/chat/usecase/member/member-add-use-case.service';
import { MemberSetAdminDTO } from 'src/app/core/chat/usecase/member/member-admin-use-case.service';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class MemberListRemoteRepository implements IMemberRemoteRepository {
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL
private baseUrl = `${environment.apiURLStage.slice(0, -1)}/Chat`; // Your base URL
constructor(private httpService: HttpService) { }
@@ -1,7 +1,6 @@
import { Injectable } from '@angular/core';
import { SignalRService } from 'src/app/infra/socket/signalR/signal-r.service';
import { IMemberSocketRepository } from 'src/app/core/chat/repository/member/member-socket-repository';
import { InstanceId } from '../../../domain/chat-service.service';
import { v4 as uuidv4 } from 'uuid'
import { filter, map, tap } from 'rxjs/operators';
import { SocketMessage } from 'src/app/infra/socket/signalR/signalR';
@@ -19,11 +18,12 @@ export class MemberSocketRepositoryService implements IMemberSocketRepository {
}
async removeMember(data: RemoveRoomMemberInput) {
const id = uuidv4();
const result = await this.socket.sendData<any>({
method: 'RemoveRoomMember',
data: {
...data,
requestId: InstanceId +'@'+ uuidv4()
requestId: id
},
})
@@ -1,6 +1,5 @@
import { Injectable } from '@angular/core';
import { v4 as uuidv4 } from 'uuid'
import { InstanceId } from '../../../domain/chat-service.service';
import { MessageUpdateInput } from '../../../../../core/chat/usecase/message/message-update-by-id-use-case.service';
import { MessageReactionInput } from '../../../../../core/chat/usecase/message/message-reaction-by-id-use-case.service';
import { SignalRService } from 'src/app/infra/socket/signalR/signal-r.service';
@@ -43,7 +42,8 @@ export class MessageSocketRepositoryService implements IMessageSocketRepository
async sendGroupMessage(data: MessageInputDTO) {
if(!data.requestId) {
data.requestId = InstanceId +'@'+ uuidv4();
//data['requestId'] = InstanceId +'@'+ uuidv4();
data['requestId'] = uuidv4();
}
const result = await this.socket.sendData<MessageCreateOutPutDataDTO>({
@@ -62,7 +62,8 @@ export class MessageSocketRepositoryService implements IMessageSocketRepository
async sendDirectMessage(data: MessageInputDTO) {
if(!data.requestId) {
data.requestId = InstanceId +'@'+ uuidv4();
//data['requestId'] = InstanceId +'@'+ uuidv4();
data['requestId'] = uuidv4();
}
const result = await this.socket.sendData<MessageOutPutDataDTO>({
method: 'SendDirectMessage',
@@ -140,7 +141,8 @@ export class MessageSocketRepositoryService implements IMessageSocketRepository
reactToMessageSocket(data: MessageReactionInput) {
data['requestId'] = InstanceId +'@'+ uuidv4();
//data['requestId'] = InstanceId +'@'+ uuidv4();
data['requestId'] = uuidv4();
return this.socket.sendData({
method: 'ReactMessage',
@@ -149,7 +151,8 @@ export class MessageSocketRepositoryService implements IMessageSocketRepository
}
updateMessage(input: MessageUpdateInput) {
input['requestId'] = InstanceId +'@'+ uuidv4();
//data['requestId'] = InstanceId +'@'+ uuidv4();
input['requestId'] = uuidv4();
this.socket.sendData({
method: 'EditMessage',
@@ -160,7 +163,8 @@ export class MessageSocketRepositoryService implements IMessageSocketRepository
sendMessageDelete(data: MessageDeleteInputDTO) {
data['requestId'] = InstanceId +'@'+ uuidv4();
//data['requestId'] = InstanceId +'@'+ uuidv4();
data['requestId'] = uuidv4();
const result = this.socket.sendData<any>({
method: 'DeleteMessage',
@@ -8,13 +8,14 @@ import { IGetMessagesFromRoomParams, IMessageRemoteRepository } from 'src/app/co
import { HttpErrorResponse } from '@angular/common/http';
import { Result } from 'neverthrow';
import { HttpResult } from 'src/app/infra/http/type';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class MessageRemoteDataSourceService implements IMessageRemoteRepository {
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL
private baseUrl = `${environment.apiURLStage}Chat`; // Your base URL
constructor(
private httpService: HttpService,
@@ -13,6 +13,7 @@ import { RoomListItemOutPutDTO, RoomListItemSchema, RoomListOutPutDTO } from '..
import { z } from 'zod';
import { HttpAdapter } from 'src/app/infra/http/adapter';
import { AddMemberToRoomInputDTO } from 'src/app/core/chat/usecase/member/member-add-use-case.service';
import { environment } from 'src/environments/environment';
const RoomByIdInputDTOSchema = z.string()
type RoomByIdInputDTO = z.infer<typeof RoomByIdInputDTOSchema>
@@ -23,7 +24,7 @@ type RoomByIdInputDTO = z.infer<typeof RoomByIdInputDTOSchema>
})
export class RoomRemoteDataSourceService implements IRoomRemoteRepository {
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL
private baseUrl = `${environment.apiURLStage}chat`; // Your base URL
constructor(
private httpService: HttpService,
@@ -5,7 +5,6 @@ import { filter, map } from 'rxjs/operators';
import { SocketMessage } from 'src/app/infra/socket/signalR/signalR';
import { ITypingRemoteRepository } from 'src/app/core/chat/repository/typing/typing-remote-repository';
import { z } from "zod"
import { InstanceId } from '../../../domain/chat-service.service';
import { v4 as uuidv4 } from 'uuid'
export const UserTypingDTOSchema = z.object({
@@ -28,13 +27,14 @@ export class UserTypingRemoteRepositoryService implements ITypingRemoteRepositor
) { }
sendTyping(roomId: string) {
const id = uuidv4();
return this.socket.sendData({
method: 'Typing',
data: {
roomId,
UserName:SessionStore.user.FullName,
userId:SessionStore.user.UserId,
requestId: InstanceId +'@'+ uuidv4(),
requestId: id,
},
})
}
@@ -52,7 +52,6 @@ import { IMessageLocalGetByIdServiceInput, MessageLocalGetByIdService } from 'sr
import { ContactListService } from 'src/app/core/chat/usecase/contact/contact-list.service';
import { IRoomGetLocalByIdServiceInput, RoomGetLocalByIdService } from '../../../core/chat/usecase/room/room-getlocal-by-id.service';
export const getInstanceId = (): string => {
const storageKey = 'instanceId'; // Key for localStorage
let instanceId = localStorage.getItem(storageKey);
@@ -66,8 +65,6 @@ export const getInstanceId = (): string => {
return instanceId;
};
export const InstanceId = getInstanceId();
@Injectable({
providedIn: 'root'
})
@@ -129,9 +126,7 @@ export class ChatServiceService {
})
this.MessageSocketRepositoryService.listenToUpdateMessages().pipe(
filter((message) => {
return !message?.requestId?.startsWith(InstanceId)
})
filter((message) => message.deviceId != getInstanceId())
).subscribe(async (message) => {
if(message?.id) {
this.SocketMessageUpdateUseCaseService.execute(message)
@@ -140,12 +135,7 @@ export class ChatServiceService {
this.MessageSocketRepositoryService.listenToMessages().pipe(
map(message => message.data),
filter((message) => {
if(!message?.requestId?.startsWith(InstanceId) == false) {
// console.log('exclude my message---')
}
return !message?.requestId?.startsWith(InstanceId)
})
filter((message) => message.deviceId != getInstanceId())
).subscribe(async (message) => {
if(message?.id) {
this.SocketMessageCreateUseCaseService.execute(message)
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
import { filter, map } from 'rxjs/operators';
import { MessageEntity } from 'src/app/core/chat/entity/message';
import { IMessageSocketRepository } from 'src/app/core/chat/repository/message/message-socket-repository';
import { InstanceId } from '../chat-service.service';
import { getInstanceId } from '../chat-service.service';
import { IRoomLocalRepository } from 'src/app/core/chat/repository/room/room-local-repository';
@Injectable({
@@ -20,7 +20,7 @@ export class RoomLastMessageService {
listenToIncomingMessage() {
return this.MessageSocketRepositoryService.listenToMessages().pipe(
map(message => message.data),
filter((message) => !message?.requestId?.startsWith(InstanceId)),
filter((message) => message.deviceId != getInstanceId()),
map(message => Object.assign(new MessageEntity(), message))
).subscribe(async (message) => {
this.roomLocalRepository.update(message.roomId, {
@@ -3,13 +3,14 @@ import { HttpService } from 'src/app/services/http.service';
import { NotificationInputDTO } from '../dto/NotificationInputDTO';
import { NotificationOutputDTO, NotificationOutputDTOSchema } from '../dto/NotificationOutputDTO';
import { APIReturn } from 'src/app/services/decorator/api-validate-schema.decorator';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class RemoteNotificationService {
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2';
private baseUrl = `${environment.apiURLStage.slice(0, -1)}`;
constructor(
private httpService: HttpService
@@ -13,8 +13,8 @@ import { SessionStore } from 'src/app/store/session.service';
})
export class UserRemoteRepositoryService {
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2'; // Your base URL
private baseUrl = `${environment.apiURLStage.slice(0, -1)}`; // Your base URL
constructor(
private httpService: HttpService,
private http: HttpAdapter,