diff --git a/gabinete-digital-fo.code-workspace b/gabinete-digital-fo.code-workspace index 092707a98..e88069d31 100644 --- a/gabinete-digital-fo.code-workspace +++ b/gabinete-digital-fo.code-workspace @@ -30,6 +30,9 @@ }, { "path": "../ionic7" + }, + { + "path": "../../../Downloads/nestjs-microservice-boilerplate-api-master" } ], "settings": { diff --git a/src/app/core/chat/entity/message.ts b/src/app/core/chat/entity/message.ts index ed82fbe68..aa684c253 100644 --- a/src/app/core/chat/entity/message.ts +++ b/src/app/core/chat/entity/message.ts @@ -14,6 +14,7 @@ export const MessageEntitySchema = z.object({ oneShot: z.boolean(), sentAt: z.string().optional(), requireUnlock: z.boolean(), + isDeleted: z.boolean().optional(), editedAt: z.string().nullable().optional(), sender: z.object({ wxUserId: z.number(), @@ -21,6 +22,12 @@ export const MessageEntitySchema = z.object({ wxeMail: z.string(), userPhoto: z.string(), }), + reactions: z.object({ + id: z.string(), + reactedAt: z.string(), + reaction: z.string(), + sender: z.object({}), + }).array().optional(), info: z.array(z.object({ memberId: z.number(), readAt: z.string().nullable(), @@ -35,7 +42,9 @@ export const MessageEntitySchema = z.object({ applicationId: z.number().optional(), docId: z.string().optional(), id: z.string().optional(), - mimeType: z.string().optional() + mimeType: z.string().optional(), + safeFile: z.any().optional(), + description: z.string().optional() })).optional() }) @@ -53,36 +62,15 @@ export class MessageEntity { oneShot: boolean = false sentAt?: string requireUnlock: boolean = false - info: { - memberId?: number - readAt?: string, - deliverAt?: string - }[] = [] - sender!: { - wxUserId: number, - wxFullName: string, - wxeMail: string, - userPhoto: string, - } + info: typeof MessageEntitySchema._type.info = [] + sender!: typeof MessageEntitySchema._type.sender sending: boolean = false sendAttemp = 0 - attachments: { - safeFile?: SafeResourceUrl; - fileType: MessageAttachmentFileType, - source: MessageAttachmentSource, - file?: string, - fileName: string, - applicationId?: number, - docId?: string, - mimeType?: string, - description?: string - id?: string - }[] = [] - - reactions = [] - + attachments: typeof MessageEntitySchema._type.attachments = [] + reactions: typeof MessageEntitySchema._type.reactions = [] requestId!: string + isDeleted: typeof MessageEntitySchema._type.isDeleted = false constructor() {} diff --git a/src/app/module/chat/data/repository/attachment-local-repository.service.ts b/src/app/module/chat/data/repository/attachment/attachment-local-repository.service.ts similarity index 70% rename from src/app/module/chat/data/repository/attachment-local-repository.service.ts rename to src/app/module/chat/data/repository/attachment/attachment-local-repository.service.ts index 6f1a8abf2..73f471b9d 100644 --- a/src/app/module/chat/data/repository/attachment-local-repository.service.ts +++ b/src/app/module/chat/data/repository/attachment/attachment-local-repository.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service'; -import { chatDatabase } from '../../infra/database/dexie/service'; -import { AttachmentTable, AttachmentTableSchema } from '../../infra/database/dexie/schema/attachment'; +import { chatDatabase } from '../../../infra/database/dexie/service'; +import { AttachmentTable, AttachmentTableSchema } from '../../../infra/database/dexie/schema/attachment'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/data/repository/attachment-remote-repository.service.ts b/src/app/module/chat/data/repository/attachment/attachment-remote-repository.service.ts similarity index 75% rename from src/app/module/chat/data/repository/attachment-remote-repository.service.ts rename to src/app/module/chat/data/repository/attachment/attachment-remote-repository.service.ts index 5e73816f3..5bae9a564 100644 --- a/src/app/module/chat/data/repository/attachment-remote-repository.service.ts +++ b/src/app/module/chat/data/repository/attachment/attachment-remote-repository.service.ts @@ -1,8 +1,8 @@ import { Injectable, Input } from '@angular/core'; import { HttpService } from 'src/app/services/http.service'; import { DataSourceReturn } from 'src/app/services/Repositorys/type'; -import { MessageOutPutDTO } from '../dto/message/messageOutputDTO'; -import { MessageAttachmentByMessageIdInput } from '../../domain/use-case/message-attachment-by-message-id.service'; +import { MessageOutPutDTO } from '../../dto/message/messageOutputDTO'; +import { MessageAttachmentByMessageIdInput } from '../../../domain/use-case/message/message-attachment-by-message-id.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/data/repository/member-list-local-repository.service.ts b/src/app/module/chat/data/repository/member/member-list-local-repository.service.ts similarity index 91% rename from src/app/module/chat/data/repository/member-list-local-repository.service.ts rename to src/app/module/chat/data/repository/member/member-list-local-repository.service.ts index e72208a8d..539cc456c 100644 --- a/src/app/module/chat/data/repository/member-list-local-repository.service.ts +++ b/src/app/module/chat/data/repository/member/member-list-local-repository.service.ts @@ -2,11 +2,11 @@ import { Injectable } from '@angular/core'; import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie'; import { z } from 'zod'; import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service'; -import { chatDatabase } from '../../infra/database/dexie/service'; +import { chatDatabase } from '../../../infra/database/dexie/service'; import { ok } from 'neverthrow'; import { err, Result } from 'neverthrow'; -import { MemberListUPdateStatusInputDTO } from '../../domain/use-case/socket/member-list-update-status-use-case.service'; -import { MemberTable, MemberTableSchema } from '../../infra/database/dexie/schema/members'; +import { MemberListUPdateStatusInputDTO } from '../../../domain/use-case/socket/member-list-update-status-use-case.service'; +import { MemberTable, MemberTableSchema } from '../../../infra/database/dexie/schema/members'; import { from } from 'rxjs'; @Injectable({ diff --git a/src/app/module/chat/data/repository/member-list-remote-repository.service.ts b/src/app/module/chat/data/repository/member/member-list-remote-repository.service.ts similarity index 92% rename from src/app/module/chat/data/repository/member-list-remote-repository.service.ts rename to src/app/module/chat/data/repository/member/member-list-remote-repository.service.ts index 1ac249968..c97aee1cc 100644 --- a/src/app/module/chat/data/repository/member-list-remote-repository.service.ts +++ b/src/app/module/chat/data/repository/member/member-list-remote-repository.service.ts @@ -3,8 +3,8 @@ import { Result } from 'neverthrow'; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; import { HttpService } from 'src/app/services/http.service'; import { DataSourceReturn } from 'src/app/services/Repositorys/type'; -import { AddMemberToRoomInputDTOSchema, AddMemberToRoomInputDTO } from '../dto/room/addMemberToRoomInputDto'; -import { UserRemoveListInputDTOSchema, UserRemoveListInputDTO } from '../dto/room/userRemoveListInputDTO'; +import { AddMemberToRoomInputDTOSchema, AddMemberToRoomInputDTO } from '../../dto/room/addMemberToRoomInputDto'; +import { UserRemoveListInputDTOSchema, UserRemoveListInputDTO } from '../../dto/room/userRemoveListInputDTO'; @Injectable({ providedIn: 'root' 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 4267e5c5b..c63d0efc0 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 @@ -5,10 +5,10 @@ import { SessionStore } from 'src/app/store/session.service'; import { MessageDeleteInputDTO } from '../../dto/message/messageDeleteInputDTO'; import { v4 as uuidv4 } from 'uuid' import { InstanceId } from '../../../domain/chat-service.service'; -import { MessageUpdateInput } from '../../../domain/use-case/message-update-by-id-use-case.service'; +import { MessageUpdateInput } from '../../../domain/use-case/message/message-update-by-id-use-case.service'; import { MessageOutPutDataDTO } from '../../dto/message/messageOutputDTO'; import { MessageInputDTO } from '../../dto/message/messageInputDtO'; -import { MessageReactionInput } from '../../../domain/use-case/message-reaction-by-id-use-case.service'; +import { MessageReactionInput } from '../../../domain/use-case/message/message-reaction-by-id-use-case.service'; interface msgObj { roomId: string; @@ -56,8 +56,8 @@ export class MessageSocketRepositoryService { async sendGroupMessage(data: MessageInputDTO) { - if(data['requestId']) { - data['requestId'] = InstanceId +'@'+ uuidv4(); + if(!data.requestId) { + data.requestId = InstanceId +'@'+ uuidv4(); } const result = await this.socket.sendData({ @@ -70,8 +70,8 @@ export class MessageSocketRepositoryService { async sendDirectMessage(data: MessageInputDTO) { - if(data['requestId']) { - data['requestId'] = InstanceId +'@'+ uuidv4(); + if(!data.requestId) { + data.requestId = InstanceId +'@'+ uuidv4(); } const result = await this.socket.sendData({ method: 'SendDirectMessage', 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 0118ce827..df365962a 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 @@ -14,7 +14,6 @@ import { Observable as DexieObservable, PromiseExtended } from 'Dexie'; }) export class MessageLocalDataSourceService extends DexieRepository { - messageSubject = new Subject(); constructor() { super(chatDatabase.message, MessageTableSchema) @@ -33,128 +32,6 @@ export class MessageLocalDataSourceService extends DexieRepository> { - try { - console.log({roomId}) - const lastMessage = await chatDatabase.message - .where('roomId') - .equals(roomId) - .reverse() - .sortBy('id'); - - return ok(lastMessage[0]); // Get the last message - } catch (error) { - return err(error); - } - } - - async deleteByMessageId(id: string): Promise> { - try { - console.log(id) - const lastMessage = await chatDatabase.message - .where('id') - .equals(id).delete() - - return ok(lastMessage[0]); // Get the last message - } catch (error) { - return err(error); - } - } - - - async sendMessage(data: MessageTable) { - - const dataValidation = MessageTableSchema.safeParse(data) - if(dataValidation.success) { - - const safeData = dataValidation.data - safeData.sending = true - - try { - const result = await chatDatabase.message.add(safeData) - this.messageSubject.next({roomId: safeData.roomId}); - return ok(result as number) - } catch (e) { - return err(false) - } - - } else { - console.log(dataValidation) - return err(dataValidation) - } - } - - - // @ValidateSchema(tableSchema) - async createMessage(data: MessageTable) { - - try { - const result = await chatDatabase.message.add(data) - this.messageSubject.next({roomId: data.roomId}); - return ok(result) - } catch (e) { - return err(false) - } - - } - - async createManyMessage(data: MessageTable[]) { - - try { - const result = await chatDatabase.message.bulkAdd(data) - this.messageSubject.next({roomId: data[0].roomId}); - return ok(result) - } catch (e) { - return err(false) - } - - } - - async messageExist({id}) { - try { - - console.log({id}); - - const existingMessage = await chatDatabase.message - .where('id') - .equals(id) - .first(); - - if (existingMessage) { - return ok(existingMessage) - } else { - return err(false) - } - - } catch (error) { - return err(false); - } - - } - - // not used - async updateByMessageId(data: MessageTable ) { - - try { - const result = await chatDatabase.message.update(data.id as any, data) - return ok(result) - } catch (e) { - return err(false) - } - - } - - - async findOrUpdate(data: MessageTable) { - const findResult = await this.findMessageById(data.id) - - if(findResult.isOk()) { - return this.update(findResult.value.$id, data) - } else { - return this.createMessage(data) - } - } - getItems(roomId: string): PromiseExtended { return chatDatabase.message.where('roomId').equals(roomId).sortBy('$id') as any } @@ -163,33 +40,6 @@ export class MessageLocalDataSourceService extends DexieRepository chatDatabase.message.where('roomId').equals(roomId).sortBy('$id') as any) } - - async findMessageById(id: string) { - try { - const a = await chatDatabase.message.where('id').equals(id).first() - - if(a) { - return ok(a) - } else { - return err('not found') - } - - } catch (e) { - return err('DB error') - } - - } - - - subscribeToNewMessage(roomId: string): Observable { - return this.messageSubject.pipe( - filter((message: MessageTable) => - message.roomId === roomId - ) - ) - } - - async getOfflineMessages () { try { const allMessages = await chatDatabase.message diff --git a/src/app/module/chat/data/repository/message/message-remote-data-source.service.ts b/src/app/module/chat/data/repository/message/message-remote-data-source.service.ts index 361ae59b0..24201ea91 100644 --- a/src/app/module/chat/data/repository/message/message-remote-data-source.service.ts +++ b/src/app/module/chat/data/repository/message/message-remote-data-source.service.ts @@ -6,7 +6,7 @@ import { APIReturn } from 'src/app/services/decorators/api-validate-schema.decor import { MessageOutPutDataDTOSchema, MessageOutPutDTO, MessageOutPutDTOSchema } from '../../dto/message/messageOutputDTO'; import { DataSourceReturn } from 'src/app/services/Repositorys/type'; import { SignalRService } from '../../../infra/socket/signal-r.service'; -import { MessageUpdateInput } from '../../../domain/use-case/message-update-by-id-use-case.service'; +import { MessageUpdateInput } from '../../../domain/use-case/message/message-update-by-id-use-case.service'; import { SessionStore } from 'src/app/store/session.service'; import { MessageDeleteInputDTO } from '../../dto/message/messageDeleteInputDTO'; import { InstanceId } from '../../../domain/chat-service.service'; @@ -30,9 +30,9 @@ export class MessageRemoteDataSourceService { return await this.httpService.post(`${this.baseUrl}/Messages`, data); } - async reactToMessage(id: string, reaction: any) { - return await this.httpService.post(`${this.baseUrl}/Messages/${id}/React`, reaction); - } + // async reactToMessage(id: string, reaction: any) { + // return await this.httpService.post(`${this.baseUrl}/Messages/${id}/React`, reaction); + // } // @APIReturn(MessageOutPutDTOSchema, 'get/Messages') diff --git a/src/app/module/chat/data/repository/room/room-local-repository.service.ts b/src/app/module/chat/data/repository/room/room-local-repository.service.ts index 9cef4edf1..d7281cec7 100644 --- a/src/app/module/chat/data/repository/room/room-local-repository.service.ts +++ b/src/app/module/chat/data/repository/room/room-local-repository.service.ts @@ -18,69 +18,6 @@ export class RoomLocalRepository extends DexieRepository super(chatDatabase.room, RoomTableSchema) } - async removeUserTyping() {} - - @ValidateSchema(RoomTableSchema) - async createRoom(data: RoomTable) { - try { - const result = await chatDatabase.room.add(data) - return ok(result) - } catch (e) { - return err(false) - } - } - - - async deleteRoomById(id: string) { - try { - const result = await chatDatabase.room.delete(id) - return ok(result) - } catch (e) { - return err(false) - } - } - - - async leaveRoom(id: string) { - return this.deleteRoomById(id) - } - - async updateRoom(data: RoomTable) { - try { - const result = await chatDatabase.room.update(data.id, data); - - return ok(result) - } catch (e) { - return err(false) - } - } - - async createOrUpdateRoom(data: RoomTable) { - const createResult = await this.createRoom(data) - - if(createResult.isOk()) { - return createResult - } else { - return this.updateRoom(data) - } - } - - - async getRoomById(id: any) { - try { - const result = await chatDatabase.room.get(id) - return ok(result) - } catch (e) { - return err(false) - } - } - - - async getRoomList() { - return await this.findAll() - } - - getItemsLive(){ return from (liveQuery(() => chatDatabase.room.toArray())); } @@ -89,6 +26,5 @@ export class RoomLocalRepository extends DexieRepository return liveQuery(() => chatDatabase.room.get(id)); } - } diff --git a/src/app/module/chat/data/repository/room/room-remote-repository.service.ts b/src/app/module/chat/data/repository/room/room-remote-repository.service.ts index f764cedc3..93716e6af 100644 --- a/src/app/module/chat/data/repository/room/room-remote-repository.service.ts +++ b/src/app/module/chat/data/repository/room/room-remote-repository.service.ts @@ -14,7 +14,7 @@ import { RoomUpdateInputDTO, RoomUpdateInputDTOSchema } from '../../dto/room/roo import { RoomUpdateOutputDTO } from '../../dto/room/roomUpdateOutputDTO'; import { DataSourceReturn } from 'src/app/services/Repositorys/type'; import { SessionStore } from 'src/app/store/session.service'; -import { MemberSetAdminDTO } from '../../../domain/use-case/member-admin-use-case.service'; +import { MemberSetAdminDTO } from '../../../domain/use-case/member/member-admin-use-case.service'; import { SignalRService } from '../../../infra/socket/signal-r.service'; import { v4 as uuidv4 } from 'uuid' diff --git a/src/app/module/chat/domain/adapter.ts b/src/app/module/chat/domain/adapter.ts new file mode 100644 index 000000000..134316c47 --- /dev/null +++ b/src/app/module/chat/domain/adapter.ts @@ -0,0 +1,8 @@ +import { MessageEntity } from "src/app/core/chat/entity/message"; +import { UseCase } from "src/app/utils/use-case-interface"; + +export abstract class ITemplateCreateAdapter implements UseCase { + execute(input: MessageEntity): Promise { + throw new Error("Method not implemented."); + } +} \ No newline at end of file diff --git a/src/app/module/chat/domain/chat-service.service.ts b/src/app/module/chat/domain/chat-service.service.ts index 1d5bb7780..31f419fa8 100644 --- a/src/app/module/chat/domain/chat-service.service.ts +++ b/src/app/module/chat/domain/chat-service.service.ts @@ -1,39 +1,39 @@ import { Injectable } from '@angular/core'; -import { MessageDeleteLiveUseCaseService } from 'src/app/module/chat/domain/use-case/message-delete-by-id-live-use-case.service' +import { MessageDeleteLiveUseCaseService } from 'src/app/module/chat/domain/use-case/message/message-delete-by-id-live-use-case.service' import { SessionStore } from 'src/app/store/session.service'; -import { MessageReactionInput, MessageReactionUseCaseService } from 'src/app/module/chat/domain/use-case/message-reaction-by-id-use-case.service'; -import { MessageUpdateInput, MessageUpdateUseCaseService } from 'src/app/module/chat/domain/use-case/message-update-by-id-use-case.service'; -import { MemberAdminUseCaseService, MemberSetAdminDTO } from 'src/app/module/chat/domain/use-case/member-admin-use-case.service'; -import { MessageCreateUseCaseService, MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; +import { MessageReactionInput, MessageReactionUseCaseService } from 'src/app/module/chat/domain/use-case/message/message-reaction-by-id-use-case.service'; +import { MessageUpdateInput, MessageUpdateUseCaseService } from 'src/app/module/chat/domain/use-case/message/message-update-by-id-use-case.service'; +import { MemberAdminUseCaseService, MemberSetAdminDTO } from 'src/app/module/chat/domain/use-case/member/member-admin-use-case.service'; +import { MessageCreateUseCaseService, MessageEnum } from 'src/app/module/chat/domain/use-case/message/message-create-use-case.service'; import { SignalRService } from '../infra/socket/signal-r.service'; import { SocketMessageDeleteUseCaseService } from 'src/app/module/chat/domain/use-case/socket/socket-message-delete-use-case.service'; import { SocketMessageUpdateUseCaseService } from 'src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service'; import { SocketMessageCreateUseCaseService } from 'src/app/module/chat/domain/use-case/socket/socket-message-create-use-case.service'; -import { DownloadMessageAttachmentUserCaseService } from 'src/app/module/chat/domain/use-case/message-download-attachment-user-case.service'; -import { ListenMessageByRoomIdNewUseCase } from 'src/app/module/chat/domain/use-case/listen-message-by-roomId.service'; +import { DownloadMessageAttachmentUserCaseService } from 'src/app/module/chat/domain/use-case/message/message-download-attachment-user-case.service'; +import { ListenMessageByRoomIdNewUseCase } from 'src/app/module/chat/domain/use-case/message/listen-message-by-roomId.service'; import { MemberListUpdateStatusUseCaseService } from 'src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.service'; -import { ListenMessageDeleteByRoomIdService } from './use-case/listene-message-delete-by-roomId.service'; -import { ListenMessageUpdateByRoomIdUseCase } from './use-case/listen-message-update-by-roomId.service'; -import { GetRoomByIdUseCaseService } from './use-case/room-get-by-id-use-case.service'; -import { DeleteRoomUseCaseService } from './use-case/room-delete-by-id-use-case.service'; -import { CreateRoomUseCaseService } from './use-case/room-create-use-case.service'; -import { RoomLeaveUseCase } from './use-case/room-leave-by-id-use-case.service'; -import { SyncAllRoomMessagesService } from './use-case/sync-all-room-messages.service'; -import { ListenSendMessageUseCase } from './use-case/listen-send-message.service' -import { MessageReadAtByIdUseCaseService } from './use-case/message-read-at-by-id-use-case.service' -import { SendLocalMessagesUseCaseService } from './use-case/messages-send-offline-use-case.service' +import { ListenMessageDeleteByRoomIdService } from './use-case/message/listene-message-delete-by-roomId.service'; +import { ListenMessageUpdateByRoomIdUseCase } from './use-case/message/listen-message-update-by-roomId.service'; +import { GetRoomByIdUseCaseService } from './use-case/room/room-get-by-id-use-case.service'; +import { DeleteRoomUseCaseService } from './use-case/room/room-delete-by-id-use-case.service'; +import { CreateRoomUseCaseService } from './use-case/room/room-create-use-case.service'; +import { RoomLeaveUseCase } from './use-case/room/room-leave-by-id-use-case.service'; +import { SyncAllRoomMessagesService } from './use-case/message/sync-all-room-messages.service'; +import { ListenSendMessageUseCase } from './use-case/message/listen-send-message.service' +import { MessageReadAtByIdUseCaseService } from './use-case/message/message-read-at-by-id-use-case.service' +import { SendLocalMessagesUseCaseService } from './use-case/message/messages-send-offline-use-case.service' import { RemoveMemberUseCaseService } from './use-case/member/-use-case.service' -import { AddMemberUseCaseService } from './use-case/member-add-use-case.service' -import { UpdateRoomByIdUseCaseService } from './use-case/room-update-by-id-use-case.service' +import { AddMemberUseCaseService } from './use-case/member/member-add-use-case.service' +import { UpdateRoomByIdUseCaseService } from './use-case/room/room-update-by-id-use-case.service' import { SocketConnectUseCaseService } from './use-case/socket-connect-use-case.service' import { MessageMarkAsReadUseCaseService } from './use-case/message/message-mark-as-read-use-case.service' import { MessageMarkAllMessageAsReadByRoomIdInputSchema, MessageMarkAllMessageAsReadByRoomIdService } from './use-case/message/message-mark-all-message-as-read-by-room-id.service' -import { GetMessageAttachmentLocallyUseCaseService } from 'src/app/module/chat/domain/use-case/message-get-attachment-localy-use-case.service'; -import { GetRoomListUseCaseService } from 'src/app/module/chat/domain/use-case/room-get-list-use-case.service'; +import { GetMessageAttachmentLocallyUseCaseService } from 'src/app/module/chat/domain/use-case/message/message-get-attachment-localy-use-case.service'; +import { GetRoomListUseCaseService } from 'src/app/module/chat/domain/use-case/room/room-get-list-use-case.service'; import { filter } from 'rxjs/operators'; import { v4 as uuidv4 } from 'uuid' import { MessageEntity } from '../../../core/chat/entity/message'; -import { MessageAttachmentByMessageIdInput, MessageAttachmentByMessageIdUseCase } from './use-case/message-attachment-by-message-id.service'; +import { MessageAttachmentByMessageIdInput, MessageAttachmentByMessageIdUseCase } from './use-case/message/message-attachment-by-message-id.service'; import { RoomInputDTO } from '../data/dto/room/roomInputDTO'; import { UserRemoveListInputDTO } from '../data/dto/room/userRemoveListInputDTO'; import { AddMemberToRoomInputDTO } from '../data/dto/room/addMemberToRoomInputDto'; @@ -214,9 +214,9 @@ export class ChatServiceService { return this.UpdateRoomByIdUseCaseService.execute(data) } - messageMarkAsRead(roomId) { - return this.MessageReadAtByIdUseCaseService.execute({roomId}) - } + // messageMarkAsRead(roomId) { + // return this.MessageReadAtByIdUseCaseService.execute({roomId}) + // } sendLocalMessages() { return this.SendLocalMessagesUseCaseService.execute() diff --git a/src/app/module/chat/domain/mapper/messageMapper.ts b/src/app/module/chat/domain/mapper/messageMapper.ts index c13644c77..f5097e49f 100644 --- a/src/app/module/chat/domain/mapper/messageMapper.ts +++ b/src/app/module/chat/domain/mapper/messageMapper.ts @@ -17,7 +17,7 @@ export class MessageMapper { requireUnlock: entity.requireUnlock, roomId: entity.roomId, senderId: entity.sender.wxUserId, - requestId: requestId, + requestId: entity.requestId || requestId, attachment: entity.attachments.map((e)=>({ fileType:e.fileType, source: e.source, diff --git a/src/app/module/chat/domain/use-case/member-add-use-case.service.ts b/src/app/module/chat/domain/use-case/member/member-add-use-case.service.ts similarity index 75% rename from src/app/module/chat/domain/use-case/member-add-use-case.service.ts rename to src/app/module/chat/domain/use-case/member/member-add-use-case.service.ts index b7c3c527d..b4d0d5203 100644 --- a/src/app/module/chat/domain/use-case/member-add-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/member/member-add-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync'; -import { AddMemberToRoomInputDTO } from '../../data/dto/room/addMemberToRoomInputDto'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; +import { AddMemberToRoomInputDTO } from '../../../data/dto/room/addMemberToRoomInputDto'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/domain/use-case/member-admin-use-case.service.ts b/src/app/module/chat/domain/use-case/member/member-admin-use-case.service.ts similarity index 85% rename from src/app/module/chat/domain/use-case/member-admin-use-case.service.ts rename to src/app/module/chat/domain/use-case/member/member-admin-use-case.service.ts index d1610962d..d2aead1ee 100644 --- a/src/app/module/chat/domain/use-case/member-admin-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/member/member-admin-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { z } from "zod"; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; // Define the schema for the entire response const MemberSetAdminDTOSchema = z.object({ diff --git a/src/app/module/chat/domain/use-case/message-read-at-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/message-read-at-by-id-use-case.service.ts deleted file mode 100644 index 7976e969d..000000000 --- a/src/app/module/chat/domain/use-case/message-read-at-by-id-use-case.service.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Injectable } from '@angular/core'; -import { err, ok } from 'neverthrow'; -import { SessionStore } from 'src/app/store/session.service'; -import { MessageLocalDataSourceService } from '../../data/repository/message/message-local-data-source.service'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; -import { MessageRemoteDataSourceService } from '../../data/repository/message/message-remote-data-source.service'; -import { SignalRService } from '../../infra/socket/signal-r.service'; - -@Injectable({ - providedIn: 'root' -}) -export class MessageReadAtByIdUseCaseService { - - constructor( - private MessageSocketRepositoryService: MessageSocketRepositoryService, - private messageLiveSignalRDataSourceService: SignalRService, - private messageLocalDataSourceService: MessageLocalDataSourceService, - ) { } - - async execute({roomId}) { - const result = await this.messageLocalDataSourceService.getLastMessageByRoomId(roomId) - if(result.isOk()) { - if(result.value) { - - return await this.MessageSocketRepositoryService.sendReadAt({roomId, memberId: SessionStore.user.UserId, messageId: result.value.id, requestId: ''}) - } - return ok(true) - } - return err(false) - } -} diff --git a/src/app/module/chat/domain/use-case/listen-message-by-roomId.service.ts b/src/app/module/chat/domain/use-case/message/listen-message-by-roomId.service.ts similarity index 78% rename from src/app/module/chat/domain/use-case/listen-message-by-roomId.service.ts rename to src/app/module/chat/domain/use-case/message/listen-message-by-roomId.service.ts index 9a33e52a9..62faaded9 100644 --- a/src/app/module/chat/domain/use-case/listen-message-by-roomId.service.ts +++ b/src/app/module/chat/domain/use-case/message/listen-message-by-roomId.service.ts @@ -1,8 +1,9 @@ import { Injectable } from '@angular/core'; import { filter, map } from 'rxjs/operators'; -import { InstanceId } from '../chat-service.service'; +import { InstanceId } from '../../chat-service.service'; import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service' -import { MessageEntity } from '../../../../core/chat/entity/message'; +import { MessageEntity } from '../../../../../core/chat/entity/message'; +import { UseCase } from 'src/app/utils/use-case-interface'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/domain/use-case/listen-message-update-by-roomId.service.ts b/src/app/module/chat/domain/use-case/message/listen-message-update-by-roomId.service.ts similarity index 78% rename from src/app/module/chat/domain/use-case/listen-message-update-by-roomId.service.ts rename to src/app/module/chat/domain/use-case/message/listen-message-update-by-roomId.service.ts index 1102b7e02..1b7cdffb8 100644 --- a/src/app/module/chat/domain/use-case/listen-message-update-by-roomId.service.ts +++ b/src/app/module/chat/domain/use-case/message/listen-message-update-by-roomId.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { filter } from 'rxjs/operators'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/domain/use-case/listen-send-message.service.ts b/src/app/module/chat/domain/use-case/message/listen-send-message.service.ts similarity index 92% rename from src/app/module/chat/domain/use-case/listen-send-message.service.ts rename to src/app/module/chat/domain/use-case/message/listen-send-message.service.ts index b13d457db..6caf12205 100644 --- a/src/app/module/chat/domain/use-case/listen-send-message.service.ts +++ b/src/app/module/chat/domain/use-case/message/listen-send-message.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { MessageSocketRepositoryService } from 'src/app/module/chat/data/repository/message/message-live-signalr-data-source.service' -import { InstanceId } from '../chat-service.service'; +import { InstanceId } from '../../chat-service.service'; import { filter, map } from 'rxjs/operators'; @Injectable({ diff --git a/src/app/module/chat/domain/use-case/listene-message-delete-by-roomId.service.ts b/src/app/module/chat/domain/use-case/message/listene-message-delete-by-roomId.service.ts similarity index 86% rename from src/app/module/chat/domain/use-case/listene-message-delete-by-roomId.service.ts rename to src/app/module/chat/domain/use-case/message/listene-message-delete-by-roomId.service.ts index a9e9569ae..a09870f31 100644 --- a/src/app/module/chat/domain/use-case/listene-message-delete-by-roomId.service.ts +++ b/src/app/module/chat/domain/use-case/message/listene-message-delete-by-roomId.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { SignalRService } from '../../infra/socket/signal-r.service'; +import { SignalRService } from '../../../infra/socket/signal-r.service'; import { filter } from 'rxjs/operators'; @Injectable({ diff --git a/src/app/module/chat/domain/use-case/message-attachment-by-message-id.service.ts b/src/app/module/chat/domain/use-case/message/message-attachment-by-message-id.service.ts similarity index 92% rename from src/app/module/chat/domain/use-case/message-attachment-by-message-id.service.ts rename to src/app/module/chat/domain/use-case/message/message-attachment-by-message-id.service.ts index 21a6cbe10..317b0fb88 100644 --- a/src/app/module/chat/domain/use-case/message-attachment-by-message-id.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-attachment-by-message-id.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; -import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/repository/attachment-remote-repository.service' -import { AttachmentLocalDataSource } from 'src/app/module/chat/data/repository/attachment-local-repository.service' +import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/repository/attachment/attachment-remote-repository.service' +import { AttachmentLocalDataSource } from 'src/app/module/chat/data/repository/attachment/attachment-local-repository.service' import { convertBlobToDataURL } from 'src/app/utils/ToBase64'; import { Result } from 'neverthrow'; import { Logger } from 'src/app/services/logger/main/service'; -import { MessageEntity } from '../../../../core/chat/entity/message'; +import { MessageEntity } from '../../../../../core/chat/entity/message'; const MessageAttachmentByMessageIdSchema = z.object({ $messageId: z.number(), diff --git a/src/app/module/chat/domain/use-case/message-create-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts similarity index 89% rename from src/app/module/chat/domain/use-case/message-create-use-case.service.ts rename to src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts index ddc1f99d0..87f126169 100644 --- a/src/app/module/chat/domain/use-case/message-create-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts @@ -1,21 +1,21 @@ import { Injectable } from '@angular/core'; -import { MessageEntity, MessageEntitySchema, } from '../../../../core/chat/entity/message'; -import { AttachmentLocalDataSource } from "src/app/module/chat/data/repository/attachment-local-repository.service"; +import { MessageEntity, MessageEntitySchema, } from '../../../../../core/chat/entity/message'; +import { AttachmentLocalDataSource } from "src/app/module/chat/data/repository/attachment/attachment-local-repository.service"; import { z } from 'zod'; import { v4 as uuidv4 } from 'uuid'; -import { InstanceId } from '../chat-service.service'; +import { InstanceId } from '../../chat-service.service'; import { createDataURL } from 'src/app/utils/ToBase64'; import { zodSafeValidation } from 'src/app/utils/zodValidation'; import { Logger } from 'src/app/services/logger/main/service'; -import { MessageAttachmentSource, MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO'; -import { MessageLocalDataSourceService } from '../../data/repository/message/message-local-data-source.service'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageAttachmentSource, MessageOutPutDataDTO } from '../../../data/dto/message/messageOutputDTO'; +import { MessageLocalDataSourceService } from '../../../data/repository/message/message-local-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; import { err, Result } from 'neverthrow'; -import { MessageTable } from '../../infra/database/dexie/schema/message'; -import { MessageMapper } from '../mapper/messageMapper'; +import { MessageTable } from '../../../infra/database/dexie/schema/message'; +import { MessageMapper } from '../../mapper/messageMapper'; import { RoomType } from "src/app/core/chat/entity/group"; import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' import { SessionStore } from 'src/app/store/session.service'; const MessageInputUseCaseSchema = z.object({ @@ -54,9 +54,9 @@ export class MessageCreateUseCaseService { message.sendAttemp++; message.requestId = InstanceId +'@'+ uuidv4(); + message.sending = true; - - const createMessageLocally = await this.messageLocalDataSourceService.sendMessage(message) + const createMessageLocally = await this.messageLocalDataSourceService.insert(message) if(createMessageLocally.isOk()) { diff --git a/src/app/module/chat/domain/use-case/message-delete-by-id-live-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-delete-by-id-live-use-case.service.ts similarity index 80% rename from src/app/module/chat/domain/use-case/message-delete-by-id-live-use-case.service.ts rename to src/app/module/chat/domain/use-case/message/message-delete-by-id-live-use-case.service.ts index 58cc0e923..9885f3c2c 100644 --- a/src/app/module/chat/domain/use-case/message-delete-by-id-live-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-delete-by-id-live-use-case.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; import { SafeValidateSchema, ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; -import { MessageRemoteDataSourceService } from '../../data/repository/message/message-remote-data-source.service'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageRemoteDataSourceService } from '../../../data/repository/message/message-remote-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; import { XTracerAsync, TracingType } from 'src/app/services/monitoring/opentelemetry/tracer'; export const MessageDeleteInputDTOSchema = z.object({ requestId: z.string().optional(), diff --git a/src/app/module/chat/domain/use-case/message-download-attachment-user-case.service.ts b/src/app/module/chat/domain/use-case/message/message-download-attachment-user-case.service.ts similarity index 90% rename from src/app/module/chat/domain/use-case/message-download-attachment-user-case.service.ts rename to src/app/module/chat/domain/use-case/message/message-download-attachment-user-case.service.ts index 341434f6a..d0534dcdc 100644 --- a/src/app/module/chat/domain/use-case/message-download-attachment-user-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-download-attachment-user-case.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; -import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/repository/attachment-remote-repository.service' +import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/repository/attachment/attachment-remote-repository.service' import { Logger } from 'src/app/services/logger/main/service'; import { convertBlobToDataURL } from 'src/app/utils/ToBase64'; -import { AttachmentLocalDataSource } from 'src/app/module/chat/data/repository/attachment-local-repository.service' +import { AttachmentLocalDataSource } from 'src/app/module/chat/data/repository/attachment/attachment-local-repository.service' import { MessageAttachmentByMessageIdInput } from './message-attachment-by-message-id.service'; diff --git a/src/app/module/chat/domain/use-case/message-get-attachment-localy-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-get-attachment-localy-use-case.service.ts similarity index 88% rename from src/app/module/chat/domain/use-case/message-get-attachment-localy-use-case.service.ts rename to src/app/module/chat/domain/use-case/message/message-get-attachment-localy-use-case.service.ts index 2058e794a..bec62739c 100644 --- a/src/app/module/chat/domain/use-case/message-get-attachment-localy-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-get-attachment-localy-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { MessageAttachmentByMessageIdInput } from './message-attachment-by-message-id.service'; -import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/repository/attachment-remote-repository.service' -import { AttachmentLocalDataSource } from 'src/app/module/chat/data/repository/attachment-local-repository.service' +import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/repository/attachment/attachment-remote-repository.service' +import { AttachmentLocalDataSource } from 'src/app/module/chat/data/repository/attachment/attachment-local-repository.service' import { err, Result } from 'neverthrow'; @Injectable({ diff --git a/src/app/module/chat/domain/use-case/message-reaction-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-reaction-by-id-use-case.service.ts similarity index 75% rename from src/app/module/chat/domain/use-case/message-reaction-by-id-use-case.service.ts rename to src/app/module/chat/domain/use-case/message/message-reaction-by-id-use-case.service.ts index 04784173c..cf77e7559 100644 --- a/src/app/module/chat/domain/use-case/message-reaction-by-id-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-reaction-by-id-use-case.service.ts @@ -1,8 +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 '../../data/repository/message/message-remote-data-source.service'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageRemoteDataSourceService } from '../../../data/repository/message/message-remote-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; const MessageReactionInputDTOSchema = z.object({ diff --git a/src/app/module/chat/domain/use-case/message/message-read-at-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-read-at-by-id-use-case.service.ts new file mode 100644 index 000000000..bd7ebe0e1 --- /dev/null +++ b/src/app/module/chat/domain/use-case/message/message-read-at-by-id-use-case.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { err, ok } from 'neverthrow'; +import { SessionStore } from 'src/app/store/session.service'; +import { MessageLocalDataSourceService } from '../../../data/repository/message/message-local-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageRemoteDataSourceService } from '../../../data/repository/message/message-remote-data-source.service'; +import { SignalRService } from '../../../infra/socket/signal-r.service'; + +@Injectable({ + providedIn: 'root' +}) +export class MessageReadAtByIdUseCaseService { + + constructor( + private MessageSocketRepositoryService: MessageSocketRepositoryService, + private messageLiveSignalRDataSourceService: SignalRService, + private messageLocalDataSourceService: MessageLocalDataSourceService, + ) { } + + async execute({roomId}) { + // const result = await this.messageLocalDataSourceService.getLastMessageByRoomId(roomId) + // if(result.isOk()) { + // if(result.value) { + + // return await this.MessageSocketRepositoryService.sendReadAt({roomId, memberId: SessionStore.user.UserId, messageId: result.value.id, requestId: ''}) + // } + // return ok(true) + // } + // return err(false) + } +} diff --git a/src/app/module/chat/domain/use-case/message-send-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-send-use-case.service.ts similarity index 88% rename from src/app/module/chat/domain/use-case/message-send-use-case.service.ts rename to src/app/module/chat/domain/use-case/message/message-send-use-case.service.ts index b0651c34c..268bea286 100644 --- a/src/app/module/chat/domain/use-case/message-send-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-send-use-case.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { MessageEntity } from '../../../../core/chat/entity/message'; +import { MessageEntity } from '../../../../../core/chat/entity/message'; import { z } from 'zod'; const MessageInputUseCaseSchema = z.object({ diff --git a/src/app/module/chat/domain/use-case/message-to-async-ui.service.ts b/src/app/module/chat/domain/use-case/message/message-to-async-ui.service.ts similarity index 100% rename from src/app/module/chat/domain/use-case/message-to-async-ui.service.ts rename to src/app/module/chat/domain/use-case/message/message-to-async-ui.service.ts diff --git a/src/app/module/chat/domain/use-case/message-update-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-update-by-id-use-case.service.ts similarity index 75% rename from src/app/module/chat/domain/use-case/message-update-by-id-use-case.service.ts rename to src/app/module/chat/domain/use-case/message/message-update-by-id-use-case.service.ts index 9944ccf83..452a9cdaa 100644 --- a/src/app/module/chat/domain/use-case/message-update-by-id-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-update-by-id-use-case.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; -import { MessageRemoteDataSourceService } from '../../data/repository/message/message-remote-data-source.service'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageRemoteDataSourceService } from '../../../data/repository/message/message-remote-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; const MessageUpdateInputDTOSchema = z.object({ diff --git a/src/app/module/chat/domain/use-case/messages-send-offline-use-case.service.ts b/src/app/module/chat/domain/use-case/message/messages-send-offline-use-case.service.ts similarity index 83% rename from src/app/module/chat/domain/use-case/messages-send-offline-use-case.service.ts rename to src/app/module/chat/domain/use-case/message/messages-send-offline-use-case.service.ts index 8b7cdc9d8..fc0e0b254 100644 --- a/src/app/module/chat/domain/use-case/messages-send-offline-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/messages-send-offline-use-case.service.ts @@ -1,17 +1,17 @@ import { Injectable } from '@angular/core'; -import { MessageLocalDataSourceService } from '../../data/repository/message/message-local-data-source.service'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; -import { MessageTable } from '../../infra/database/dexie/schema/message'; -import { InstanceId } from '../chat-service.service'; -import { MessageMapper } from '../mapper/messageMapper'; +import { MessageLocalDataSourceService } from '../../../data/repository/message/message-local-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageTable } from '../../../infra/database/dexie/schema/message'; +import { InstanceId } from '../../chat-service.service'; +import { MessageMapper } from '../../mapper/messageMapper'; import { v4 as uuidv4 } from 'uuid' -import { AttachmentLocalDataSource } from '../../data/repository/attachment-local-repository.service'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { AttachmentLocalDataSource } from '../../../data/repository/attachment/attachment-local-repository.service'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' import { Result } from 'neverthrow'; import { RoomType } from 'src/app/core/chat/entity/group'; import { SessionStore } from 'src/app/store/session.service'; -import { MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO'; +import { MessageOutPutDataDTO } from '../../../data/dto/message/messageOutputDTO'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/domain/use-case/sync-all-room-messages.service.ts b/src/app/module/chat/domain/use-case/message/sync-all-room-messages.service.ts similarity index 60% rename from src/app/module/chat/domain/use-case/sync-all-room-messages.service.ts rename to src/app/module/chat/domain/use-case/message/sync-all-room-messages.service.ts index e186ba4a9..2137b104b 100644 --- a/src/app/module/chat/domain/use-case/sync-all-room-messages.service.ts +++ b/src/app/module/chat/domain/use-case/message/sync-all-room-messages.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; -import { MessageLocalDataSourceService } from '../../data/repository/message/message-local-data-source.service'; -import { messageListDetermineChanges } from '../../data/async/list/rooms/messageListChangedetector'; -import { MessageTable } from '../../infra/database/dexie/schema/message'; -import { MessageRemoteDataSourceService } from '../../data/repository/message/message-remote-data-source.service'; -import { MessageSocketRepositoryService } from '../../data/repository/message/message-live-signalr-data-source.service'; +import { MessageLocalDataSourceService } from '../../../data/repository/message/message-local-data-source.service'; +import { messageListDetermineChanges } from '../../../data/async/list/rooms/messageListChangedetector'; +import { MessageTable } from '../../../infra/database/dexie/schema/message'; +import { MessageRemoteDataSourceService } from '../../../data/repository/message/message-remote-data-source.service'; +import { MessageSocketRepositoryService } from '../../../data/repository/message/message-live-signalr-data-source.service'; import { ok } from 'neverthrow'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; import { SessionStore } from 'src/app/store/session.service'; import { Logger } from 'src/app/services/logger/main/service'; import { XTracerAsync, TracingType } from 'src/app/services/monitoring/opentelemetry/tracer'; @@ -53,7 +53,7 @@ export class SyncAllRoomMessagesService { let clone: MessageTable = message clone.roomId = room.id - this.messageLocalDataSourceService.findOrUpdate(clone) + this.messageLocalDataSourceService.update(clone.$id, clone) const me = message.info.find(e => e.memberId == SessionStore.user.UserId && typeof e.deliverAt == 'string' ) @@ -69,32 +69,27 @@ export class SyncAllRoomMessagesService { } } - // for(const message of addedItems) { - // let clone: MessageTable = message - // clone.roomId = room.id + for(const message of addedItems) { + let clone: MessageTable = message + clone.roomId = room.id - // const me = message.info.find(e => e.memberId == SessionStore.user.UserId && typeof e.deliverAt == 'string' ) - // if(!me) { - // this.MessageSocketRepositoryService.sendDeliverAt({ - // memberId: SessionStore.user.UserId, - // messageId: message.id, - // roomId: message.roomId, - // requestId: uuidv4() - // }) + // const me = message.info.find(e => e.memberId == SessionStore.user.UserId && typeof e.deliverAt == 'string' ) + // if(!me) { + // this.MessageSocketRepositoryService.sendDeliverAt({ + // memberId: SessionStore.user.UserId, + // messageId: message.id, + // roomId: message.roomId, + // requestId: uuidv4() + // }) - // tracing.addEvent('send delever roomId'+ room.id) + // tracing.addEvent('send delever roomId'+ room.id) - // } // } - - - this.messageLocalDataSourceService.createManyMessage(addedItems.reverse()) - - - for(const message of deletedItems) { - this.messageLocalDataSourceService.deleteByMessageId(message.id) } + + this.messageLocalDataSourceService.insertMany(addedItems.reverse()) + } else { Logger.error('failed to get room message '+room.id) } diff --git a/src/app/module/chat/domain/use-case/room-create-use-case.service.ts b/src/app/module/chat/domain/use-case/room/room-create-use-case.service.ts similarity index 79% rename from src/app/module/chat/domain/use-case/room-create-use-case.service.ts rename to src/app/module/chat/domain/use-case/room/room-create-use-case.service.ts index 449730e96..7dae8f332 100644 --- a/src/app/module/chat/domain/use-case/room-create-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-create-use-case.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; import { create } from 'domain'; import { SessionStore } from 'src/app/store/session.service'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; -import { RoomSocketRepositoryService } from '../../data/repository/room/room-socket-repository.service'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; +import { RoomSocketRepositoryService } from '../../../data/repository/room/room-socket-repository.service'; import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync'; -import { RoomInputDTO } from '../../data/dto/room/roomInputDTO'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; +import { RoomInputDTO } from '../../../data/dto/room/roomInputDTO'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; @Injectable({ @@ -41,7 +41,7 @@ export class CreateRoomUseCaseService { dataObject = result.value } - const localResult = await this.roomLocalDataSourceService.createRoom(result.value) + const localResult = await this.roomLocalDataSourceService.insert(result.value) return localResult.map(e => result.value) } else { tracing.hasError("socket close"); diff --git a/src/app/module/chat/domain/use-case/room-delete-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/room/room-delete-by-id-use-case.service.ts similarity index 75% rename from src/app/module/chat/domain/use-case/room-delete-by-id-use-case.service.ts rename to src/app/module/chat/domain/use-case/room/room-delete-by-id-use-case.service.ts index 671056f27..27ddbc449 100644 --- a/src/app/module/chat/domain/use-case/room-delete-by-id-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-delete-by-id-use-case.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync'; import { isHttpResponse } from 'src/app/services/http.service'; -import { RoomByIdInputDTO } from '../../data/dto/room/roomByIdInputDTO'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; +import { RoomByIdInputDTO } from '../../../data/dto/room/roomByIdInputDTO'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; @Injectable({ providedIn: 'root' @@ -23,7 +23,7 @@ export class DeleteRoomUseCaseService { if(result.isOk()) { - const result = await this.roomLocalDataSourceService.deleteRoomById(id) + const result = await this.roomLocalDataSourceService.delete(id) // this.messageLiveDataSourceService.sendMessage({ // type: 'createRoom', // payload: {a: '5'} @@ -32,7 +32,7 @@ export class DeleteRoomUseCaseService { return result } else if (isHttpResponse(result.error)) { if(result.error.status == 404) { - await this.roomLocalDataSourceService.deleteRoomById(id) + await this.roomLocalDataSourceService.delete(id) } // this.httpErrorHandle.httpStatusHandle(result.error) } diff --git a/src/app/module/chat/domain/use-case/room-get-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/room/room-get-by-id-use-case.service.ts similarity index 73% rename from src/app/module/chat/domain/use-case/room-get-by-id-use-case.service.ts rename to src/app/module/chat/domain/use-case/room/room-get-by-id-use-case.service.ts index 3fe01b1ff..a51b60aee 100644 --- a/src/app/module/chat/domain/use-case/room-get-by-id-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-get-by-id-use-case.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@angular/core'; import { id } from 'date-fns/locale'; import { isHttpResponse } from 'src/app/services/http.service'; -import { roomListDetermineChanges } from '../../data/async/list/rooms/roomListChangeDetector'; -import { roomMemberListDetermineChanges } from '../../data/async/list/rooms/roomMembersChangeDetector'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; -import { MemberListLocalRepository } from '../../data/repository/member-list-local-repository.service'; -import { MemberListMapper } from '../mapper/memberLIstMapper'; +import { roomListDetermineChanges } from '../../../data/async/list/rooms/roomListChangeDetector'; +import { roomMemberListDetermineChanges } from '../../../data/async/list/rooms/roomMembersChangeDetector'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; +import { MemberListLocalRepository } from '../../../data/repository/member/member-list-local-repository.service'; +import { MemberListMapper } from '../../mapper/memberLIstMapper'; import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync'; @Injectable({ @@ -27,7 +27,7 @@ export class GetRoomByIdUseCaseService { if(result.isOk()) { - const localListRoom = await this.roomLocalDataSourceService.getRoomList() + const localListRoom = await this.roomLocalDataSourceService.findAll() if(localListRoom.isOk()) { const object = { chatRoom: result.value.data @@ -35,7 +35,7 @@ export class GetRoomByIdUseCaseService { const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([object], localListRoom.value) for( const roomData of roomsToUpdate) { - this.roomLocalDataSourceService.updateRoom(roomData.chatRoom) + this.roomLocalDataSourceService.update(roomData.chatRoom.id, roomData.chatRoom) } // ============================ @@ -59,7 +59,7 @@ export class GetRoomByIdUseCaseService { } else if (isHttpResponse(result.error) ) { if(result.error.status == 404) { - await this.roomLocalDataSourceService.deleteRoomById(id) + await this.roomLocalDataSourceService.delete(id) } // this.httpErrorHandle.httpStatusHandle(result.error) } diff --git a/src/app/module/chat/domain/use-case/room-get-list-use-case.service.ts b/src/app/module/chat/domain/use-case/room/room-get-list-use-case.service.ts similarity index 70% rename from src/app/module/chat/domain/use-case/room-get-list-use-case.service.ts rename to src/app/module/chat/domain/use-case/room/room-get-list-use-case.service.ts index 7571b788f..563abddc1 100644 --- a/src/app/module/chat/domain/use-case/room-get-list-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-get-list-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; -import { roomListDetermineChanges } from '../../data/async/list/rooms/roomListChangeDetector'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; +import { roomListDetermineChanges } from '../../../data/async/list/rooms/roomListChangeDetector'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync'; import { isHttpResponse } from 'src/app/services/http.service'; import { CronJobService } from 'src/app/utils/task-scheduler' @@ -21,14 +21,14 @@ export class GetRoomListUseCaseService { async execute() { const result = await this.roomRemoteDataSourceService.getRoomList() - const localList = await this.roomLocalDataSourceService.getRoomList() + const localList = await this.roomLocalDataSourceService.findAll() if(localList.isOk()) { if(result.isOk()) { const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges(result.value.data, localList.value) for( const roomData of roomsToInsert) { - this.roomLocalDataSourceService.createRoom(roomData.chatRoom) + this.roomLocalDataSourceService.insert(roomData.chatRoom) if(roomData.chatRoom.expirationDate) { console.log('room expiration date schedule') @@ -38,11 +38,11 @@ export class GetRoomListUseCaseService { } for( const roomData of roomsToUpdate) { - this.roomLocalDataSourceService.updateRoom(roomData.chatRoom) + this.roomLocalDataSourceService.update(roomData.chatRoom.id, roomData.chatRoom) } for( const roomData of roomsToDelete) { - this.roomLocalDataSourceService.deleteRoomById(roomData.id) + this.roomLocalDataSourceService.delete(roomData.id) } } diff --git a/src/app/module/chat/domain/use-case/room-leave-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/room/room-leave-by-id-use-case.service.ts similarity index 62% rename from src/app/module/chat/domain/use-case/room-leave-by-id-use-case.service.ts rename to src/app/module/chat/domain/use-case/room/room-leave-by-id-use-case.service.ts index 5d01cfb74..88c33ebac 100644 --- a/src/app/module/chat/domain/use-case/room-leave-by-id-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-leave-by-id-use-case.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; -import { UserRemoveListInputDTO } from '../../data/dto/room/userRemoveListInputDTO'; +import { UserRemoveListInputDTO } from '../../../data/dto/room/userRemoveListInputDTO'; import { isHttpResponse } from 'src/app/services/http.service'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; @Injectable({ providedIn: 'root' @@ -20,10 +20,10 @@ export class RoomLeaveUseCase { const result = await this.roomRemoteDataSourceService.removeMemberFromRoom(data) if(result.isOk()) { - this.roomLocalDataSourceService.leaveRoom(data.id) + this.roomLocalDataSourceService.delete(data.id) } else if (isHttpResponse(result.error)) { if(result.error.status == 404) { - await this.roomLocalDataSourceService.deleteRoomById(data.id) + await this.roomLocalDataSourceService.delete(data.id) } // this.httpErrorHandle.httpStatusHandle(result.error) diff --git a/src/app/module/chat/domain/use-case/room-update-by-id-use-case.service.ts b/src/app/module/chat/domain/use-case/room/room-update-by-id-use-case.service.ts similarity index 73% rename from src/app/module/chat/domain/use-case/room-update-by-id-use-case.service.ts rename to src/app/module/chat/domain/use-case/room/room-update-by-id-use-case.service.ts index caa173171..9ce515560 100644 --- a/src/app/module/chat/domain/use-case/room-update-by-id-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-update-by-id-use-case.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync'; -import { RoomUpdateInputDTO } from '../../data/dto/room/roomUpdateInputDTO'; -import { RoomRemoteDataSourceService } from '../../data/repository/room/room-remote-repository.service'; -import { RoomLocalRepository } from '../../data/repository/room/room-local-repository.service'; +import { RoomUpdateInputDTO } from '../../../data/dto/room/roomUpdateInputDTO'; +import { RoomRemoteDataSourceService } from '../../../data/repository/room/room-remote-repository.service'; +import { RoomLocalRepository } from '../../../data/repository/room/room-local-repository.service'; @Injectable({ providedIn: 'root' @@ -21,7 +21,7 @@ export class UpdateRoomByIdUseCaseService { const result = await this.roomRemoteDataSourceService.updateRoom(data) if(result.isOk()) { - const localList = await this.roomLocalDataSourceService.getRoomList() + const localList = await this.roomLocalDataSourceService.findAll() // const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([result.value.data], localList) // for( const roomData of roomsToUpdate) { diff --git a/src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.service.ts b/src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.service.ts index d141979e3..23b22e939 100644 --- a/src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' export const MemberListUPdateStatus = z.object({ key: z.string(), diff --git a/src/app/module/chat/domain/use-case/socket/socket-message-create-use-case.service.ts b/src/app/module/chat/domain/use-case/socket/socket-message-create-use-case.service.ts index 63883ab6a..e43f8e36e 100644 --- a/src/app/module/chat/domain/use-case/socket/socket-message-create-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/socket/socket-message-create-use-case.service.ts @@ -26,7 +26,7 @@ export class SocketMessageCreateUseCaseService { console.log('create message', {incomingMessage}); tracing?.addEvent("Message Create start") - const result = await this.messageLocalDataSourceService.createMessage(incomingMessage) + const result = await this.messageLocalDataSourceService.insert(incomingMessage) tracing?.addEvent("Message Create end") if(result.isOk()) { diff --git a/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts b/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts index 94d5ef0d3..6418914cc 100644 --- a/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/socket/socket-message-update-use-case.service.ts @@ -20,19 +20,20 @@ export class SocketMessageUpdateUseCaseService { ParamsValidation(MessageOutPutDataDTOSchema, data, tracing) tracing?.addEvent("Message existe?") - const result = await this.messageLocalDataSourceService.messageExist({id: data.id}) + const result = await this.messageLocalDataSourceService.findOne({id: data.id}) const incomingMessage = { ...data, sending: false } - if(result.isOk()) { + if(result.isOk() && result.value) { + tracing?.addEvent("Message found") const updateResult = await this.messageLocalDataSourceService.update(result.value.$id, incomingMessage) tracing.setAttribute('outcome', 'success') return updateResult - } else { + } else if(result.isOk() && !result.value) { tracing?.addEvent("Message not found") } diff --git a/src/app/module/chat/domain/use-case/typing-send-use-case.service.ts b/src/app/module/chat/domain/use-case/typing/typing-send-use-case.service.ts similarity index 66% rename from src/app/module/chat/domain/use-case/typing-send-use-case.service.ts rename to src/app/module/chat/domain/use-case/typing/typing-send-use-case.service.ts index ed8e052bc..aa3ac90eb 100644 --- a/src/app/module/chat/domain/use-case/typing-send-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/typing/typing-send-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; -import { SignalRService } from '../../infra/socket/signal-r.service'; +import { SignalRService } from '../../../infra/socket/signal-r.service'; import { SessionStore } from 'src/app/store/session.service'; -import { UserTypingRemoteRepositoryService } from '../../data/repository/typing/user-typing-live-data-source.service'; +import { UserTypingRemoteRepositoryService } from '../../../data/repository/typing/user-typing-live-data-source.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/infra/database/dexie/schema/message.ts b/src/app/module/chat/infra/database/dexie/schema/message.ts index 02b674c28..a856bb370 100644 --- a/src/app/module/chat/infra/database/dexie/schema/message.ts +++ b/src/app/module/chat/infra/database/dexie/schema/message.ts @@ -40,7 +40,7 @@ export const MessageTableSchema = z.object({ applicationId: z.number().optional(), docId: z.string().optional(), id: z.string().optional(), - description: z.string().optional(), + description: z.string().nullable().optional(), mimeType: z.string().optional() })).optional() }) diff --git a/src/app/module/chat/infra/socket/signalR.ts b/src/app/module/chat/infra/socket/signalR.ts index 40fc5210a..28dc89131 100644 --- a/src/app/module/chat/infra/socket/signalR.ts +++ b/src/app/module/chat/infra/socket/signalR.ts @@ -7,7 +7,7 @@ import { v4 as uuidv4 } from 'uuid' import { UserTypingDTO } from '../../data/dto/typing/typingInputDTO'; import { MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO'; import { MessageDeleteInputDTO } from '../../data/dto/message/messageDeleteInputDTO'; -import { MessageReactionInput } from '../../domain/use-case/message-reaction-by-id-use-case.service'; +import { MessageReactionInput } from '../../domain/use-case/message/message-reaction-by-id-use-case.service'; import { ISignalRInput } from './signal-r.service'; diff --git a/src/app/ui/chat/component/contacts/contacts.page.ts b/src/app/ui/chat/component/contacts/contacts.page.ts index cc2c5834c..5925b1866 100644 --- a/src/app/ui/chat/component/contacts/contacts.page.ts +++ b/src/app/ui/chat/component/contacts/contacts.page.ts @@ -8,7 +8,7 @@ import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.serv import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'; import { ToastService } from 'src/app/services/toast.service'; import { SessionStore } from 'src/app/store/session.service'; -import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; +import { MessageEnum } from 'src/app/module/chat/domain/use-case/message/message-create-use-case.service'; import { MessageEntity } from 'src/app/core/chat/entity/message'; // import { ChatSystemService } from 'src/app/services/chat/chat-system.service' import { RoomType } from "src/app/core/chat/entity/group"; diff --git a/src/app/ui/chat/component/group-messages/group-contacts/group-contacts.page.ts b/src/app/ui/chat/component/group-messages/group-contacts/group-contacts.page.ts index a4efb7bfd..8fe3d4da8 100644 --- a/src/app/ui/chat/component/group-messages/group-contacts/group-contacts.page.ts +++ b/src/app/ui/chat/component/group-messages/group-contacts/group-contacts.page.ts @@ -9,7 +9,7 @@ import { ZodError } from 'zod'; import { HttpResponse } from '@microsoft/signalr'; import { ToastService } from 'src/app/services/toast.service'; import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'; -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' @Component({ selector: 'app-group-contacts', diff --git a/src/app/ui/chat/component/messages/messages.page.html b/src/app/ui/chat/component/messages/messages.page.html index 9bb74d8c3..9b4bb0692 100644 --- a/src/app/ui/chat/component/messages/messages.page.html +++ b/src/app/ui/chat/component/messages/messages.page.html @@ -126,12 +126,6 @@
- -
diff --git a/src/app/ui/chat/component/messages/messages.page.ts b/src/app/ui/chat/component/messages/messages.page.ts index 89f30e9e3..19956c4f5 100644 --- a/src/app/ui/chat/component/messages/messages.page.ts +++ b/src/app/ui/chat/component/messages/messages.page.ts @@ -23,7 +23,7 @@ import { PermissionService } from 'src/app/services/permission.service'; import { Observable as DexieObservable } from 'Dexie'; import { Observable, Subscription } from 'rxjs'; import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room/room-local-repository.service' -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' import { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message'; import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'; import { EditMessagePage } from 'src/app/modals/edit-message/edit-message.page'; @@ -340,6 +340,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy listenToIncomingMessage() { this.messageReceiveSubject?.unsubscribe(); this.messageReceiveSubject = this.chatServiceService.listenToIncomingMessage(this.roomId).subscribe(async (message) => { + this.messages1[this.roomId].push(message as MessageEntity) if(message.hasAttachment) { @@ -367,14 +368,14 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy console.log('delete class', deleteMessage); const index = this.messages1[this.roomId].findIndex(e => e?.id === deleteMessage.id); // Use triple equals for comparison - - if (index !== -1) { // Check if the item was found - console.log('delete ==') - this.messages1[this.roomId].splice(index, 1); - // console.log('removed index', index); - } else { - // console.log('message not found'); - } + this.messages1[this.roomId][index].isDeleted = true + // if (index !== -1) { // Check if the item was found + // console.log('delete ==') + // this.messages1[this.roomId].splice(index, 1); + // // console.log('removed index', index); + // } else { + // // console.log('message not found'); + // } }); } @@ -401,6 +402,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy this.messageSendSubject = this.chatServiceService.listenToSendMessage(this.roomId).subscribe((updateMessage) => { + console.log({updateMessage},'=--=-=-=--=', this.messages1[this.roomId]) const index = this.messages1[this.roomId].findIndex(e => e?.requestId === updateMessage.requestId); // Use triple equals for comparison if (index !== -1) { // Check if the item was found @@ -417,7 +419,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } } else { - // console.log('message not found'); + console.log('not found message to update ui'); } }); } diff --git a/src/app/ui/chat/modal/messages/contacts/contacts.page.ts b/src/app/ui/chat/modal/messages/contacts/contacts.page.ts index e060979b7..7fba6b76a 100644 --- a/src/app/ui/chat/modal/messages/contacts/contacts.page.ts +++ b/src/app/ui/chat/modal/messages/contacts/contacts.page.ts @@ -8,7 +8,7 @@ import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'; import { ToastService } from 'src/app/services/toast.service'; import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service' import { MessageEntity } from 'src/app/core/chat/entity/message'; -import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; +import { MessageEnum } from 'src/app/module/chat/domain/use-case/message/message-create-use-case.service'; import { RoomType } from "src/app/core/chat/entity/group"; @Component({ diff --git a/src/app/ui/chat/modal/messages/messages.page.ts b/src/app/ui/chat/modal/messages/messages.page.ts index 6832a9a82..bdb1b0a2b 100644 --- a/src/app/ui/chat/modal/messages/messages.page.ts +++ b/src/app/ui/chat/modal/messages/messages.page.ts @@ -41,11 +41,11 @@ import { FilePickerWebService } from 'src/app/infra/file-picker/web/file-picker- import { allowedDocExtension } from 'src/app/utils/allowedDocExtension'; import { JSFileToDataUrl } from 'src/app/utils/ToBase64'; import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room/room-local-repository.service' -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' import { UserTypingLocalRepository } from 'src/app/module/chat/data/repository/typing/user-typing-local-data-source.service'; import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repository/typing/user-typing-live-data-source.service'; import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service'; -import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service'; +import { MessageEnum } from 'src/app/module/chat/domain/use-case/message/message-create-use-case.service'; import { RoomType } from "src/app/core/chat/entity/group"; import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room'; diff --git a/src/app/ui/chat/modal/room-info/room-info.page.ts b/src/app/ui/chat/modal/room-info/room-info.page.ts index febb26b4f..1897c6752 100644 --- a/src/app/ui/chat/modal/room-info/room-info.page.ts +++ b/src/app/ui/chat/modal/room-info/room-info.page.ts @@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core'; import { ModalController, NavParams, PopoverController } from '@ionic/angular'; import { Observable } from 'rxjs'; import { MemberTable } from 'src/app/module/chat/infra/database/dexie/schema/members'; -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' import { Observable as DexieObservable } from 'Dexie'; import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room'; import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room/room-local-repository.service' diff --git a/src/app/ui/chat/modal/set-room-owner/set-room-owner.page.ts b/src/app/ui/chat/modal/set-room-owner/set-room-owner.page.ts index c2fe7c174..f94ce401a 100644 --- a/src/app/ui/chat/modal/set-room-owner/set-room-owner.page.ts +++ b/src/app/ui/chat/modal/set-room-owner/set-room-owner.page.ts @@ -7,7 +7,7 @@ import { ToastService } from 'src/app/services/toast.service'; import { Observable as DexieObservable } from 'Dexie'; import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'; import { MemberTable } from 'src/app/module/chat/infra/database/dexie/schema/members'; -import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service' @Component({ selector: 'app-set-room-owner', diff --git a/src/app/utils/use-case-interface.ts b/src/app/utils/use-case-interface.ts index 3ed737fb0..f8e4fd4c3 100644 --- a/src/app/utils/use-case-interface.ts +++ b/src/app/utils/use-case-interface.ts @@ -2,3 +2,7 @@ export interface UseCase { execute(input: Input): Promise; } + +export interface UseCaseObservable { + execute(input: Input): Promise; +}