reorganizde file path

This commit is contained in:
Peter Maquiran
2024-08-27 09:14:59 +01:00
parent 98975856c1
commit e80082f9e8
54 changed files with 236 additions and 454 deletions
@@ -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'
@@ -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'
@@ -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({
@@ -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'
@@ -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<MessageOutPutDataDTO>({
@@ -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<MessageOutPutDataDTO>({
method: 'SendDirectMessage',
@@ -14,7 +14,6 @@ import { Observable as DexieObservable, PromiseExtended } from 'Dexie';
})
export class MessageLocalDataSourceService extends DexieRepository<MessageTable, MessageEntity> {
messageSubject = new Subject();
constructor() {
super(chatDatabase.message, MessageTableSchema)
@@ -33,128 +32,6 @@ export class MessageLocalDataSourceService extends DexieRepository<MessageTable,
}
}
async getLastMessageByRoomId(roomId: string): Promise<Result<undefined|MessageTable, any>> {
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<Result<undefined|number, any>> {
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<MessageEntity[]> {
return chatDatabase.message.where('roomId').equals(roomId).sortBy('$id') as any
}
@@ -163,33 +40,6 @@ export class MessageLocalDataSourceService extends DexieRepository<MessageTable,
return liveQuery(() => 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<MessageTable> {
return this.messageSubject.pipe(
filter((message: MessageTable) =>
message.roomId === roomId
)
)
}
async getOfflineMessages () {
try {
const allMessages = await chatDatabase.message
@@ -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<MessageOutPutDTO>(`${this.baseUrl}/Messages`, data);
}
async reactToMessage(id: string, reaction: any) {
return await this.httpService.post<any>(`${this.baseUrl}/Messages/${id}/React`, reaction);
}
// async reactToMessage(id: string, reaction: any) {
// return await this.httpService.post<any>(`${this.baseUrl}/Messages/${id}/React`, reaction);
// }
// @APIReturn(MessageOutPutDTOSchema, 'get/Messages')
@@ -18,69 +18,6 @@ export class RoomLocalRepository extends DexieRepository<RoomTable, RoomTable>
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<RoomTable, RoomTable>
return liveQuery(() => chatDatabase.room.get(id));
}
}
@@ -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'
+8
View File
@@ -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<MessageEntity, any> {
execute(input: MessageEntity): Promise<any> {
throw new Error("Method not implemented.");
}
}
@@ -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()
@@ -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,
@@ -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'
@@ -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({
@@ -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)
}
}
@@ -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'
@@ -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'
@@ -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({
@@ -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({
@@ -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(),
@@ -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()) {
@@ -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(),
@@ -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';
@@ -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({
@@ -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({
@@ -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)
}
}
@@ -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({
@@ -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({
@@ -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'
@@ -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)
}
@@ -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");
@@ -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)
}
@@ -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)
}
@@ -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)
}
}
@@ -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)
@@ -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) {
@@ -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(),
@@ -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()) {
@@ -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")
}
@@ -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'
@@ -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()
})
+1 -1
View File
@@ -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';