diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 0064d16d6..482f4c9fa 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -95,7 +95,6 @@ import { DeplomaOptionsPageModule } from './shared/popover/deploma-options/deplo import { DiplomaOptionsPage } from './shared/popover/deploma-options/deploma-options.page'; import { ImageCropperModule } from 'ngx-image-cropper'; import { createAction, createReducer, on, StoreModule } from '@ngrx/store'; -import { typingReducer } from './module/chat/data/data-source/userTyping/user-typing-memory-data-source.service'; import { ChatModule } from './module/chat/chat.module'; // import { ServiceWorkerModule } from '@angular/service-worker'; // import { AngularFireModule } from '@angular/fire'; @@ -155,7 +154,7 @@ export function counterReducer(state, action) { @NgModule({ declarations: [AppComponent, PopupQuestionPipe, InputFilterDirective], imports: [ - StoreModule.forRoot({ userTyping: typingReducer }), + // StoreModule.forRoot({ userTyping: typingReducer }), BrowserModule, CommonModule, FormsModule, diff --git a/src/app/module/chat/chat.module.ts b/src/app/module/chat/chat.module.ts index de30e1dd1..c7169db22 100644 --- a/src/app/module/chat/chat.module.ts +++ b/src/app/module/chat/chat.module.ts @@ -1,34 +1,61 @@ import { NgModule } from '@angular/core'; import { SignalRService } from 'src/app/module/chat/infra/socket/signal-r.service' -import { SyncMessageRepositoryService } from './data/service/sync-repository/sync-message-repository.service'; -import { UserTypingAsyncService } from 'src/app/module/chat/data/async/socket/user-typing-async.service' import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service' -import { skip } from 'rxjs/operators'; +import { skip, switchMap } from 'rxjs/operators'; import { SessionStore } from 'src/app/store/session.service'; +import { Subject, timer } from 'rxjs'; +import { UserTypingLocalRepository } from './data/repository/user-typing-local-data-source.service'; @NgModule({ - imports: [ - - ], - providers: [ - SyncMessageRepositoryService - ], + imports: [], + providers: [], declarations: [], schemas: [], entryComponents: [] }) export class ChatModule { + typingCallback: {[key: string]: Subject } = {} + constructor( - private message: SyncMessageRepositoryService, private SignalRService: SignalRService, - private UserTypingAsyncService: UserTypingAsyncService, - private ChatServiceService: ChatServiceService + private ChatServiceService: ChatServiceService, + private signalR: SignalRService, + private localDataSource: UserTypingLocalRepository, ) { this.syncMessage() + this.listenToTyping() } + async listenToTyping() { + this.signalR.getTyping().subscribe(async (e) => { + if(e?.roomId) { + + // this.memoryDataSource.dispatch(removeUserTyping({data: {...e} as any})) + // this.memoryDataSource.dispatch(addUserTyping({data: {...e} as any})) + // + const value = await this.localDataSource.addUserTyping(e); + + const id = e.roomId + '@' + e.userName + if(!this.typingCallback[id]) { + this.typingCallback[id] = new Subject() + this.typingCallback[id].pipe( + switchMap(() => timer(2000)), + ).subscribe(() => { + console.log('111111==============') + // this.memoryDataSource.dispatch(removeUserTyping({data: {...e} as any})) + this.localDataSource.removeUserTyping(e) + }) + } else { + this.typingCallback[id].next() + } + + } else { + console.log('e--', e) + } + }) + } async syncMessage() { const connection = this.SignalRService.getConnectionState() @@ -45,8 +72,7 @@ export class ChatModule { connection.subscribe((value) => { if(value) { // on connect - console.log('send local image') - this.message.sendLocalMessages() + this.ChatServiceService.sendLocalMessages() } }) diff --git a/src/app/module/chat/data/async/repository/message-repository-aync.service.ts b/src/app/module/chat/data/async/repository/message-repository-aync.service.ts deleted file mode 100644 index 12f1223fc..000000000 --- a/src/app/module/chat/data/async/repository/message-repository-aync.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable({ - providedIn: 'root' -}) -export class MessageRepositorySyncService { - - constructor() { - - } -} diff --git a/src/app/module/chat/data/async/socket/user-typing-async.service.ts b/src/app/module/chat/data/async/socket/user-typing-async.service.ts deleted file mode 100644 index b0a890236..000000000 --- a/src/app/module/chat/data/async/socket/user-typing-async.service.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Injectable } from '@angular/core'; -import { UserTypingLiveDataSourceService } from '../../data-source/userTyping/user-typing-live-data-source.service'; -import { UserTypingLocalDataSourceService } from '../../data-source/userTyping/user-typing-local-data-source.service'; -import { SignalRService } from '../../../infra/socket/signal-r.service'; -import { interval, Subject, timer } from 'rxjs'; -import { switchMap } from 'rxjs/operators'; -import { addUserTyping, removeUserTyping, TypingState } from '../../data-source/userTyping/user-typing-memory-data-source.service'; -import { Store } from '@ngrx/store'; - -@Injectable({ - providedIn: 'root' -}) -export class UserTypingAsyncService { - - typingCallback: {[key: string]: Subject } = {} - - constructor( - private localDataSource: UserTypingLocalDataSourceService, - private liveDataSource: UserTypingLiveDataSourceService, - private memoryDataSource: Store, - private signalR: SignalRService, - ) { - - this.signalR.getTyping().subscribe(async (e) => { - if(e?.roomId) { - - this.memoryDataSource.dispatch(removeUserTyping({data: {...e} as any})) - this.memoryDataSource.dispatch(addUserTyping({data: {...e} as any})) - // - const value = await this.localDataSource.addUserTyping(e); - - const id = e.roomId + '@' + e.userName - if(!this.typingCallback[id]) { - this.typingCallback[id] = new Subject() - this.typingCallback[id].pipe( - switchMap(() => timer(2000)), - ).subscribe(() => { - console.log('111111==============') - this.memoryDataSource.dispatch(removeUserTyping({data: {...e} as any})) - this.localDataSource.removeUserTyping(e) - }) - } else { - this.typingCallback[id].next() - } - - } else { - console.log('e--', e) - } - }) - } -} diff --git a/src/app/module/chat/data/data-source/message/message-live-data-source.service.ts b/src/app/module/chat/data/data-source/message/message-live-data-source.service.ts deleted file mode 100644 index 2ddde368f..000000000 --- a/src/app/module/chat/data/data-source/message/message-live-data-source.service.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Injectable } from '@angular/core'; -import { err, ok } from 'neverthrow'; -import { WebSocketMessage, WebSocketService } from '../../../infra/socket/socket'; -import { SignalRService } from '../../../infra/socket/signal-r.service'; -@Injectable({ - providedIn: 'root' -}) -export class MessageLiveDataSourceService { - - constructor( - // public socket: WebSocketService, - private signalR: SignalRService) {} - - // async sendMessage(data: WebSocketMessage) { - - // // try { - - // // const result = await this.socket.sendMessage(data).toPromise() - - // // return ok(result) - // // } catch (e) { - // // return err(e) - // // } - - // } - -} diff --git a/src/app/module/chat/data/data-source/message/message-memory-data-source.service.ts b/src/app/module/chat/data/data-source/message/message-memory-data-source.service.ts deleted file mode 100644 index 8f5e2b11b..000000000 --- a/src/app/module/chat/data/data-source/message/message-memory-data-source.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable({ - providedIn: 'root' -}) -export class MessageMemoryDataSourceService { - - messages: {[roomId: string]: string[]} = {} - - constructor() {} -} diff --git a/src/app/module/chat/data/data-source/userTyping/user-typing-memory-data-source.service.ts b/src/app/module/chat/data/data-source/userTyping/user-typing-memory-data-source.service.ts deleted file mode 100644 index 7c265461f..000000000 --- a/src/app/module/chat/data/data-source/userTyping/user-typing-memory-data-source.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { createAction, createFeatureSelector, createReducer, createSelector, on, props } from '@ngrx/store'; -import { TypingTable } from '../../../infra/database/dexie/schema/typing'; - - -export const addUserTyping = createAction( - '[Typing] Add User Typing', - props<{ data: TypingTable }>() -); - -export const removeUserTyping = createAction( - '[Typing] Remove User Typing', - props<{ data: TypingTable }>() -); - -export const loadUserTyping = createAction('[Typing] Load User Typing'); - -export const loadUserTypingSuccess = createAction( - '[Typing] Load User Typing Success', - props<{ data: TypingTable[] }>() -); - -export const loadUserTypingFailure = createAction( - '[Typing] Load User Typing Failure', - props<{ error: any }>() -); - - -export interface TypingState { - typingList: TypingTable[]; - error: any; -} - -export const initialState: TypingState = { - typingList: [], - error: null -}; - -export const typingReducer = createReducer( - initialState, - on(loadUserTypingSuccess, (state, { data }) => ({ - ...state, - typingList: data - })), - on(loadUserTypingFailure, (state, { error }) => ({ - ...state, - error - })), - on(addUserTyping, (state, { data }) => ({ - ...state, - typingList: [...state.typingList, data] - })), - on(removeUserTyping, (state, { data }) => ({ - ...state, - typingList: state.typingList.filter( - typing => typing.chatRoomId !== data.chatRoomId || typing.userName !== data.userName - ) - })) -); - -export const selectCalendarState = createFeatureSelector('userTyping'); - -export const selectAllUserSource = createSelector( - selectCalendarState, - (state: TypingState) => state.typingList -); - -export const selectUserTypingTable = () => createSelector( - selectAllUserSource, - (typingList) => typingList -); diff --git a/src/app/module/chat/data/data-source/attachment/attachment-local-data-source.service.ts b/src/app/module/chat/data/repository/attachment-local-repository.service.ts similarity index 69% rename from src/app/module/chat/data/data-source/attachment/attachment-local-data-source.service.ts rename to src/app/module/chat/data/repository/attachment-local-repository.service.ts index 1b597ee7c..5b76bd42e 100644 --- a/src/app/module/chat/data/data-source/attachment/attachment-local-data-source.service.ts +++ b/src/app/module/chat/data/repository/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/data-source/attachment/attachment-remote-data-source.service.ts b/src/app/module/chat/data/repository/attachment-remote-repository.service.ts similarity index 75% rename from src/app/module/chat/data/data-source/attachment/attachment-remote-data-source.service.ts rename to src/app/module/chat/data/repository/attachment-remote-repository.service.ts index c4ec9af32..5e73816f3 100644 --- a/src/app/module/chat/data/data-source/attachment/attachment-remote-data-source.service.ts +++ b/src/app/module/chat/data/repository/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-attachment-by-message-id.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/module/chat/data/repository/attachment-repository.service.ts b/src/app/module/chat/data/repository/attachment-repository.service.ts deleted file mode 100644 index 5dbb93e8e..000000000 --- a/src/app/module/chat/data/repository/attachment-repository.service.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Injectable } from '@angular/core'; -import { AttachmentLocalDataSource } from 'src/app/module/chat/data/data-source/attachment/attachment-local-data-source.service' -import { AttachmentTable } from '../../infra/database/dexie/schema/attachment'; - -@Injectable({ - providedIn: 'root' -}) -export class AttachmentRepositoryService { - - constructor( - private AttachmentLocalDataSourceService: AttachmentLocalDataSource - ) { } - - create(data: AttachmentTable) { - return this.AttachmentLocalDataSourceService.insert(data) - } - - get findOne() { - return this.AttachmentLocalDataSourceService.findOne - } - - get insert() { - return this.AttachmentLocalDataSourceService.insert - } - - get update() { - return this.AttachmentLocalDataSourceService.update - } - - -} diff --git a/src/app/module/chat/data/data-source/message/message-live-signalr-data-source.service.ts b/src/app/module/chat/data/repository/message-live-signalr-data-source.service.ts similarity index 92% rename from src/app/module/chat/data/data-source/message/message-live-signalr-data-source.service.ts rename to src/app/module/chat/data/repository/message-live-signalr-data-source.service.ts index 64b204b24..572735cf4 100644 --- a/src/app/module/chat/data/data-source/message/message-live-signalr-data-source.service.ts +++ b/src/app/module/chat/data/repository/message-live-signalr-data-source.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { err, ok } from 'neverthrow'; -import { SignalRService } from '../../../infra/socket/signal-r.service'; +import { SignalRService } from '../../infra/socket/signal-r.service'; interface msgObj { roomId: string; diff --git a/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts b/src/app/module/chat/data/repository/message-local-data-source.service.ts similarity index 97% rename from src/app/module/chat/data/data-source/message/message-local-data-source.service.ts rename to src/app/module/chat/data/repository/message-local-data-source.service.ts index 1ae2adf8a..3b46f57a5 100644 --- a/src/app/module/chat/data/data-source/message/message-local-data-source.service.ts +++ b/src/app/module/chat/data/repository/message-local-data-source.service.ts @@ -3,10 +3,10 @@ import { liveQuery } from 'Dexie'; import { err, ok, Result } from 'neverthrow'; import { Observable, Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; -import { MessageEntity } from '../../../domain/entity/message'; +import { MessageEntity } from '../../domain/entity/message'; import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service'; import { MessageTable, MessageTableSchema } from 'src/app/module/chat/infra/database/dexie/schema/message'; -import { chatDatabase } from '../../../infra/database/dexie/service'; +import { chatDatabase } from '../../infra/database/dexie/service'; import { Observable as DexieObservable, PromiseExtended } from 'Dexie'; @Injectable({ diff --git a/src/app/module/chat/data/data-source/message/message-remote-data-source.service.ts b/src/app/module/chat/data/repository/message-remote-data-source.service.ts similarity index 53% rename from src/app/module/chat/data/data-source/message/message-remote-data-source.service.ts rename to src/app/module/chat/data/repository/message-remote-data-source.service.ts index f03ab14b9..1626e9de0 100644 --- a/src/app/module/chat/data/data-source/message/message-remote-data-source.service.ts +++ b/src/app/module/chat/data/repository/message-remote-data-source.service.ts @@ -1,10 +1,16 @@ import { Injectable } from '@angular/core'; import { HttpService } from 'src/app/services/http.service'; -import { MessageInputDTO, MessageInputDTOSchema } from '../../dto/message/messageInputDtO'; +import { MessageInputDTO, MessageInputDTOSchema } from '../dto/message/messageInputDtO'; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; import { APIReturn } from 'src/app/services/decorators/api-validate-schema.decorator'; -import { MessageOutPutDataDTOSchema, MessageOutPutDTO, MessageOutPutDTOSchema } from '../../dto/message/messageOutputDTO'; +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 { SessionStore } from 'src/app/store/session.service'; +import { MessageDeleteInputDTO } from '../dto/message/messageDeleteInputDTO'; +import { InstanceId } from '../../domain/chat-service.service'; +import { v4 as uuidv4 } from 'uuid' @Injectable({ providedIn: 'root' @@ -13,7 +19,10 @@ export class MessageRemoteDataSourceService { private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL - constructor(private httpService: HttpService) {} + constructor( + private httpService: HttpService, + private socket: SignalRService, + ) {} @APIReturn(MessageOutPutDTOSchema, 'post/Messages') @ValidateSchema(MessageInputDTOSchema) @@ -37,4 +46,35 @@ export class MessageRemoteDataSourceService { return await this.httpService.get(`${this.baseUrl}/attachment/${id}`); } + reactToMessageSocket(data) { + this.socket.sendData({ + method: 'ReactMessage', + data + }) + } + + updateMessage(input: MessageUpdateInput) { + this.socket.sendData({ + method: 'EditMessage', + data: input, + }) + } + + sendTyping(roomId) { + return this.socket.sendTyping({ + roomId, + UserName:SessionStore.user.FullName, + userId: SessionStore.user.UserId + }) + } + + + sendMessageDelete(data: MessageDeleteInputDTO) { + + data['requestId'] = InstanceId +'@'+ uuidv4(); + + return this.socket.sendMessageDelete(data) + } + + } diff --git a/src/app/module/chat/data/repository/message-respository.service.ts b/src/app/module/chat/data/repository/message-respository.service.ts deleted file mode 100644 index f7df09b1a..000000000 --- a/src/app/module/chat/data/repository/message-respository.service.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Injectable } from '@angular/core'; -import { MessageRemoteDataSourceService } from '../data-source/message/message-remote-data-source.service'; -import { SessionStore } from 'src/app/store/session.service'; -import { SignalRService } from '../../infra/socket/signal-r.service'; -import { v4 as uuidv4 } from 'uuid' -import { err, ok } from 'neverthrow'; -import { MessageDeleteInputDTO } from '../../domain/use-case/message-delete-by-id-live-use-case.service'; -import { MessageUpdateInput } from '../../domain/use-case/message-update-by-id-use-case.service'; -import { InstanceId } from '../../domain/chat-service.service'; -import { MessageLocalDataSourceService } from '../data-source/message/message-local-data-source.service'; -import { MessageLiveDataSourceService } from '../data-source/message/message-live-signalr-data-source.service'; -import { AttachmentLocalDataSource } from 'src/app/module/chat/data/data-source/attachment/attachment-local-data-source.service' - -@Injectable({ - providedIn: 'root' -}) -export class MessageRepositoryService { - - constructor( - private messageRemoteDataSourceService: MessageRemoteDataSourceService, - private messageLiveDataSourceService: MessageLiveDataSourceService, - private messageLiveSignalRDataSourceService: SignalRService, - private messageLocalDataSourceService: MessageLocalDataSourceService, - private AttachmentLocalDataSourceService: AttachmentLocalDataSource - ) {} - - sendMessageDelete(data: MessageDeleteInputDTO) { - - data['requestId'] = InstanceId +'@'+ uuidv4(); - - return this.messageLiveSignalRDataSourceService.sendMessageDelete(data) - } - - async sendReadAt({roomId}) { - const result = await this.messageLocalDataSourceService.getLastMessageByRoomId(roomId) - if(result.isOk()) { - if(result.value) { - - return await this.messageLiveSignalRDataSourceService.sendReadAt({roomId, memberId: SessionStore.user.UserId, chatMessageId: result.value.id}) - } - return ok(true) - } - return err(false) - } - - reactToMessage(data) { - this.messageLiveSignalRDataSourceService.sendData({ - method: 'ReactMessage', - data - }) - } - - updateMessage(input: MessageUpdateInput) { - this.messageLiveSignalRDataSourceService.sendData({ - method: 'EditMessage', - data: input, - }) - } - - - getItemsLive (roomId: string) { - return this.messageLocalDataSourceService.getItemsLive(roomId) - } - - getItems (roomId: string) { - return this.messageLocalDataSourceService.getItems(roomId) - } - - subscribeToNewMessages(roomId: any) { - return this.messageLocalDataSourceService.subscribeToNewMessage(roomId) - } - - sendTyping(roomId) { - return this.messageLiveSignalRDataSourceService.sendTyping({ - roomId, - UserName:SessionStore.user.FullName, - userId: SessionStore.user.UserId - }) - } - - - attachment(roomId: string) { - console.log('attachment') - return this.messageRemoteDataSourceService.getAttachment(roomId) - } -} diff --git a/src/app/module/chat/data/data-source/userTyping/user-typing-live-data-source.service.ts b/src/app/module/chat/data/repository/user-typing-live-data-source.service.ts similarity index 77% rename from src/app/module/chat/data/data-source/userTyping/user-typing-live-data-source.service.ts rename to src/app/module/chat/data/repository/user-typing-live-data-source.service.ts index 1935edee6..9f057a032 100644 --- a/src/app/module/chat/data/data-source/userTyping/user-typing-live-data-source.service.ts +++ b/src/app/module/chat/data/repository/user-typing-live-data-source.service.ts @@ -1,11 +1,11 @@ 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'; @Injectable({ providedIn: 'root' }) -export class UserTypingLiveDataSourceService { +export class UserTypingRemoteRepositoryService { constructor( private SignalRLiveDataSourceService: SignalRService diff --git a/src/app/module/chat/data/data-source/userTyping/user-typing-local-data-source.service.ts b/src/app/module/chat/data/repository/user-typing-local-data-source.service.ts similarity index 83% rename from src/app/module/chat/data/data-source/userTyping/user-typing-local-data-source.service.ts rename to src/app/module/chat/data/repository/user-typing-local-data-source.service.ts index 43661b562..fef77c0db 100644 --- a/src/app/module/chat/data/data-source/userTyping/user-typing-local-data-source.service.ts +++ b/src/app/module/chat/data/repository/user-typing-local-data-source.service.ts @@ -2,15 +2,15 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie'; import { err, ok } from 'neverthrow'; -import { chatDatabase } from '../../../infra/database/dexie/service'; -import { TypingTable } from '../../../infra/database/dexie/schema/typing'; +import { chatDatabase } from '../../infra/database/dexie/service'; +import { TypingTable } from '../../infra/database/dexie/schema/typing'; @Injectable({ providedIn: 'root' }) -export class UserTypingLocalDataSourceService { +export class UserTypingLocalRepository { constructor() { this.clear(); diff --git a/src/app/module/chat/data/repository/user-typing-repository.service.ts b/src/app/module/chat/data/repository/user-typing-repository.service.ts deleted file mode 100644 index 613f9d350..000000000 --- a/src/app/module/chat/data/repository/user-typing-repository.service.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Injectable } from '@angular/core'; -import { UserTypingLocalDataSourceService } from '../data-source/userTyping/user-typing-local-data-source.service'; -import { UserTypingLiveDataSourceService } from '../data-source/userTyping/user-typing-live-data-source.service'; -import { TypingTable } from '../../infra/database/dexie/schema/typing'; - -@Injectable({ - providedIn: 'root' -}) -export class UserTypingServiceRepository { - - constructor( - private localDataSource: UserTypingLocalDataSourceService, - private liveDataSource: UserTypingLiveDataSourceService - ) { } - - async addUserTyping(ChatRoomId: any) { - return await this.liveDataSource.sendTyping(ChatRoomId) - } - - async removeUserTyping(data: TypingTable) { - return await this.localDataSource.removeUserTyping(data) - } - - - getUserTypingLive() { - return this.localDataSource.getUserTypingLive() - } -} diff --git a/src/app/module/chat/data/service/sync-repository/sync-message-repository.service.ts b/src/app/module/chat/data/service/sync-repository/sync-message-repository.service.ts deleted file mode 100644 index f7ed07dda..000000000 --- a/src/app/module/chat/data/service/sync-repository/sync-message-repository.service.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Injectable } from '@angular/core'; -import { SignalRService } from '../../../infra/socket/signal-r.service'; -import { MessageLiveDataSourceService } from '../../data-source/message/message-live-data-source.service'; -import { MessageLocalDataSourceService } from '../../data-source/message/message-local-data-source.service'; -import { MessageRemoteDataSourceService } from '../../data-source/message/message-remote-data-source.service'; -import { InstanceId } from '../../../domain/chat-service.service'; -import { v4 as uuidv4 } from 'uuid' -import { MessageMapper } from 'src/app/module/chat/domain/mapper/messageMapper' -import { MessageOutPutDataDTO } from '../../dto/message/messageOutputDTO'; -import { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message'; - -@Injectable({ - providedIn: 'root' -}) -export class SyncMessageRepositoryService { - - constructor( - private messageRemoteDataSourceService: MessageRemoteDataSourceService, - private messageLiveDataSourceService: MessageLiveDataSourceService, - private messageLiveSignalRDataSourceService: SignalRService, - private messageLocalDataSourceService: MessageLocalDataSourceService - ) { - - // this.messageLocalDataSourceService.setAllSenderToFalse(); - } - - async sendLocalMessages() { - const messages = await this.messageLocalDataSourceService.getOfflineMessages() - - if(messages.length >= 1) { - - for(const message of messages) { - - console.log('to upload', messages) - const requestId = InstanceId +'@'+ uuidv4(); - const DTO = MessageMapper.fromDomain(message, requestId) - - await this.messageLocalDataSourceService.update(message.$id, { sending: true }) - const sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage(DTO) - - if(sendMessageResult.isOk()) { - - if(sendMessageResult.value.sender == undefined || sendMessageResult.value.sender == null) { - - delete sendMessageResult.value.sender - } - - let clone: MessageTable = { - ...sendMessageResult.value, - id: sendMessageResult.value.id, - $id : message.$id - } - - console.log('send message local '+ messages.length) - - this.messageLocalDataSourceService.update(message.$id, {...clone, sending: false, roomId: message.roomId}) - } else { - - console.log('erro send message') - this.messageLocalDataSourceService.update(message.$id, {sending: false}) - } - } - - } - } -} diff --git a/src/app/module/chat/domain/chat-service.service.ts b/src/app/module/chat/domain/chat-service.service.ts index a3343cae9..3193faf3f 100644 --- a/src/app/module/chat/domain/chat-service.service.ts +++ b/src/app/module/chat/domain/chat-service.service.ts @@ -20,6 +20,8 @@ import { CreateRoomUseCaseService } from './use-case/room-create-use-case.servic 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 { 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' @@ -68,7 +70,9 @@ export class ChatServiceService { private RoomLeaveUseCase: RoomLeaveUseCase, private AddMemberUseCaseService: AddMemberUseCaseService, private UpdateRoomByIdUseCaseService: UpdateRoomByIdUseCaseService, - private RemoveMemberUseCaseService: RemoveMemberUseCaseService + private RemoveMemberUseCaseService: RemoveMemberUseCaseService, + private MessageReadAtByIdUseCaseService: MessageReadAtByIdUseCaseService, + private SendLocalMessagesUseCaseService: SendLocalMessagesUseCaseService ) { this.messageLiveSignalRDataSourceService.getMessageDelete() .pipe() @@ -197,6 +201,13 @@ export class ChatServiceService { return this.UpdateRoomByIdUseCaseService.execute(data) } + messageMarkAsRead(roomId) { + return this.MessageReadAtByIdUseCaseService.execute({roomId}) + } + + sendLocalMessages() { + return this.SendLocalMessagesUseCaseService.execute() + } removeMember() { } diff --git a/src/app/module/chat/domain/use-case/listen-message-by-roomId.service.ts b/src/app/module/chat/domain/use-case/listen-message-by-roomId.service.ts index 2f96fe5e1..07220a2dc 100644 --- a/src/app/module/chat/domain/use-case/listen-message-by-roomId.service.ts +++ b/src/app/module/chat/domain/use-case/listen-message-by-roomId.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { filter, map } from 'rxjs/operators'; import { InstanceId } from '../chat-service.service'; -import { MessageLiveDataSourceService } from 'src/app/module/chat/data/data-source/message/message-live-signalr-data-source.service' +import { MessageLiveDataSourceService } from 'src/app/module/chat/data/repository/message-live-signalr-data-source.service' import { MessageEntity } from '../entity/message'; @Injectable({ 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/listen-message-update-by-roomId.service.ts index 475812ddf..de7b87fec 100644 --- a/src/app/module/chat/domain/use-case/listen-message-update-by-roomId.service.ts +++ b/src/app/module/chat/domain/use-case/listen-message-update-by-roomId.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { filter } from 'rxjs/operators'; -import { MessageLiveDataSourceService } from '../../data/data-source/message/message-live-signalr-data-source.service'; +import { MessageLiveDataSourceService } from '../../data/repository/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/listen-send-message.service.ts index e9f2ea034..9043a3e8e 100644 --- a/src/app/module/chat/domain/use-case/listen-send-message.service.ts +++ b/src/app/module/chat/domain/use-case/listen-send-message.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { MessageLiveDataSourceService } from 'src/app/module/chat/data/data-source/message/message-live-signalr-data-source.service' +import { MessageLiveDataSourceService } from 'src/app/module/chat/data/repository/message-live-signalr-data-source.service' import { InstanceId } from '../chat-service.service'; import { filter, map } from 'rxjs/operators'; 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-attachment-by-message-id.service.ts index 97e02a504..d01d01256 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-attachment-by-message-id.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; -import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/data-source/attachment/attachment-remote-data-source.service' -import { AttachmentLocalDataSource } from 'src/app/module/chat/data/data-source/attachment/attachment-local-data-source.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 { convertBlobToDataURL } from 'src/app/utils/ToBase64'; import { Result } from 'neverthrow'; import { Logger } from 'src/app/services/logger/main/service'; 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-create-use-case.service.ts index 76111d8fb..1876b0151 100644 --- a/src/app/module/chat/domain/use-case/message-create-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message-create-use-case.service.ts @@ -1,7 +1,6 @@ import { Injectable } from '@angular/core'; import { MessageEntity, MessageEntitySchema, } from '../entity/message'; -import { MessageRepositoryService } from "src/app/module/chat/data/repository/message-respository.service"; -import { AttachmentRepositoryService } from "src/app/module/chat/data/repository/attachment-repository.service"; +import { AttachmentLocalDataSource } from "src/app/module/chat/data/repository/attachment-local-repository.service"; import { z } from 'zod'; import { v4 as uuidv4 } from 'uuid'; import { InstanceId } from '../chat-service.service'; @@ -9,7 +8,7 @@ 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/data-source/message/message-local-data-source.service'; +import { MessageLocalDataSourceService } from '../../data/repository/message-local-data-source.service'; import { err } from 'neverthrow'; import { MessageTable } from '../../infra/database/dexie/schema/message'; import { MessageMapper } from '../mapper/messageMapper'; @@ -29,8 +28,7 @@ export type MessageInputUseCase = z.infer< typeof MessageInputUseCaseSchema> export class MessageCreateUseCaseService { constructor( - private MessageRepositoryService: MessageRepositoryService, - private AttachmentRepositoryService: AttachmentRepositoryService, + private AttachmentLocalRepositoryService: AttachmentLocalDataSource, private messageLocalDataSourceService: MessageLocalDataSourceService, private messageLiveSignalRDataSourceService: SignalRService, ) { } @@ -58,7 +56,7 @@ export class MessageCreateUseCaseService { if(attachment.source != MessageAttachmentSource.Webtrix) { - this.AttachmentRepositoryService.create({ + this.AttachmentLocalRepositoryService.insert({ $messageId: createMessageLocally.value, file: createDataURL(attachment.file, attachment.mimeType), fileType: attachment.fileType, 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-delete-by-id-live-use-case.service.ts index 81dc1eae9..a0f9bcdf6 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-delete-by-id-live-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; -import { MessageRepositoryService } from '../../data/repository/message-respository.service'; import { SafeValidateSchema, ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; +import { MessageRemoteDataSourceService } from '../../data/repository/message-remote-data-source.service'; export const MessageDeleteInputDTOSchema = z.object({ requestId: z.string().optional(), @@ -17,7 +17,7 @@ export type MessageDeleteInputDTO = z.infer }) export class MessageDeleteLiveUseCaseService { constructor( - public repository: MessageRepositoryService + public repository: MessageRemoteDataSourceService ) { } @SafeValidateSchema(MessageDeleteInputDTOSchema, 'MessageDeleteUseCaseService') 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-download-attachment-user-case.service.ts index 88bb79517..341434f6a 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-download-attachment-user-case.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; -import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/data-source/attachment/attachment-remote-data-source.service' +import { AttachmentRemoteDataSourceService } from 'src/app/module/chat/data/repository/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/data-source/attachment/attachment-local-data-source.service' +import { AttachmentLocalDataSource } from 'src/app/module/chat/data/repository/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-get-attachment-localy-use-case.service.ts index bd2381a59..2058e794a 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-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/data-source/attachment/attachment-remote-data-source.service' -import { AttachmentLocalDataSource } from 'src/app/module/chat/data/data-source/attachment/attachment-local-data-source.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 { 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-reaction-by-id-use-case.service.ts index e8a088d50..7153ddd95 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-reaction-by-id-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; -import { MessageRepositoryService } from '../../data/repository/message-respository.service'; import { object, z } from 'zod'; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; +import { MessageRemoteDataSourceService } from '../../data/repository/message-remote-data-source.service'; const MessageReactionInputDTOSchema = z.object({ @@ -20,11 +20,11 @@ export type MessageReactionInput = z.infer< typeof MessageReactionInputDTOSchema export class MessageReactionUseCaseService { constructor( - public repository: MessageRepositoryService + public repository: MessageRemoteDataSourceService ) { } @ValidateSchema(MessageReactionInputDTOSchema) execute(input: MessageReactionInput) { - return this.repository.reactToMessage(input) + return this.repository.reactToMessageSocket(input) } } 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 new file mode 100644 index 000000000..0c9c166dd --- /dev/null +++ b/src/app/module/chat/domain/use-case/message-read-at-by-id-use-case.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { err, ok } from 'neverthrow'; +import { SessionStore } from 'src/app/store/session.service'; +import { MessageLocalDataSourceService } from '../../data/repository/message-local-data-source.service'; +import { MessageRemoteDataSourceService } from '../../data/repository/message-remote-data-source.service'; +import { SignalRService } from '../../infra/socket/signal-r.service'; + +@Injectable({ + providedIn: 'root' +}) +export class MessageReadAtByIdUseCaseService { + + constructor( + private messageRemoteDataSourceService: MessageRemoteDataSourceService, + 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.messageLiveSignalRDataSourceService.sendReadAt({roomId, memberId: SessionStore.user.UserId, chatMessageId: result.value.id}) + } + 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-send-use-case.service.ts index acf14e388..31f630a23 100644 --- a/src/app/module/chat/domain/use-case/message-send-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message-send-use-case.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { MessageEntity } from '../entity/message'; -import { MessageRepositoryService } from "src/app/module/chat/data/repository/message-respository.service" import { z } from 'zod'; const MessageInputUseCaseSchema = z.object({ @@ -16,9 +15,7 @@ export type MessageInputUseCase = z.infer< typeof MessageInputUseCaseSchema> }) export class MessageCreateUseCaseService { - constructor( - private MessageRepositoryService: MessageRepositoryService - ) { } + constructor() { } async execute(input: MessageEntity) { 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-update-by-id-use-case.service.ts index d88b9b0f1..ff31b8e4e 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-update-by-id-use-case.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { z } from 'zod'; -import { MessageRepositoryService } from '../../data/repository/message-respository.service'; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; +import { MessageRemoteDataSourceService } from '../../data/repository/message-remote-data-source.service'; const MessageUpdateInputDTOSchema = z.object({ memberId: z.number(), @@ -20,7 +20,7 @@ export type MessageUpdateInput = z.infer< typeof MessageUpdateInputDTOSchema> export class MessageUpdateUseCaseService { constructor( - public repository: MessageRepositoryService + public repository: MessageRemoteDataSourceService ) { } @ValidateSchema(MessageUpdateInputDTOSchema) 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/messages-send-offline-use-case.service.ts index 4e30fb9cc..5d6ac6204 100644 --- a/src/app/module/chat/domain/use-case/messages-send-offline-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/messages-send-offline-use-case.service.ts @@ -1,13 +1,12 @@ import { Injectable } from '@angular/core'; -import { MessageLocalDataSourceService } from '../../data/data-source/message/message-local-data-source.service'; +import { MessageLocalDataSourceService } from '../../data/repository/message-local-data-source.service'; import { MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO'; import { MessageTable } from '../../infra/database/dexie/schema/message'; import { SignalRService } from '../../infra/socket/signal-r.service'; import { InstanceId } from '../chat-service.service'; import { MessageMapper } from '../mapper/messageMapper'; import { v4 as uuidv4 } from 'uuid' -import { AttachmentRepositoryService } from "src/app/module/chat/data/repository/attachment-repository.service"; -import { AttachmentLocalDataSource } from '../../data/data-source/attachment/attachment-local-data-source.service'; +import { AttachmentLocalDataSource } from '../../data/repository/attachment-local-repository.service'; @Injectable({ providedIn: 'root' 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 ab808bc2c..4c03118c3 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 @@ -1,5 +1,5 @@ import { Injectable, Input } from '@angular/core'; -import { MessageLocalDataSourceService } from '../../../data/data-source/message/message-local-data-source.service'; +import { MessageLocalDataSourceService } from '../../../data/repository/message-local-data-source.service'; import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; import { ParamsValidation } from 'src/app/services/decorators/validate-schema.decorator'; import { MessageOutPutDataDTOSchema } from '../../../data/dto/message/messageOutputDTO'; diff --git a/src/app/module/chat/domain/use-case/socket/socket-message-delete-use-case.service.ts b/src/app/module/chat/domain/use-case/socket/socket-message-delete-use-case.service.ts index 86e56ea9a..ea78d4277 100644 --- a/src/app/module/chat/domain/use-case/socket/socket-message-delete-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/socket/socket-message-delete-use-case.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { MessageLocalDataSourceService } from '../../../data/data-source/message/message-local-data-source.service'; +import { MessageLocalDataSourceService } from '../../../data/repository/message-local-data-source.service'; import { MessageOutPutDataDTO } from '../../../data/dto/message/messageOutputDTO'; @Injectable({ 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 e7a7c0e0d..5e0e7d278 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 @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { MessageLocalDataSourceService } from '../../../data/data-source/message/message-local-data-source.service'; +import { MessageLocalDataSourceService } from '../../../data/repository/message-local-data-source.service'; import { MessageOutPutDataDTO, MessageOutPutDataDTOSchema } from '../../../data/dto/message/messageOutputDTO'; import { ParamsValidation, SafeValidateSchema, ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; import { MessageInputDTOSchema } from '../../../data/dto/message/messageInputDtO'; diff --git a/src/app/module/chat/domain/use-case/sync-all-room-messages.service.ts b/src/app/module/chat/domain/use-case/sync-all-room-messages.service.ts index fd381f465..83a11831f 100644 --- a/src/app/module/chat/domain/use-case/sync-all-room-messages.service.ts +++ b/src/app/module/chat/domain/use-case/sync-all-room-messages.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; -import { MessageLocalDataSourceService } from '../../data/data-source/message/message-local-data-source.service'; +import { MessageLocalDataSourceService } from '../../data/repository/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/data-source/message/message-remote-data-source.service'; +import { MessageRemoteDataSourceService } from '../../data/repository/message-remote-data-source.service'; import { ok } from 'neverthrow'; import { RoomLocalRepository } from '../../data/repository/room-local-repository.service'; diff --git a/src/app/ui/chat/component/messages/messages.page.ts b/src/app/ui/chat/component/messages/messages.page.ts index 73f384593..6ebf95054 100644 --- a/src/app/ui/chat/component/messages/messages.page.ts +++ b/src/app/ui/chat/component/messages/messages.page.ts @@ -22,12 +22,10 @@ import { ViewMediaPage } from 'src/app/modals/view-media/view-media.page'; import { PermissionService } from 'src/app/services/permission.service'; import { Observable as DexieObservable } from 'Dexie'; import { Subscription } from 'rxjs'; -import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service' import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room-local-repository.service' import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' import { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message'; import { RoomListItemOutPutDTO } from 'src/app/module/chat/data/dto/room/roomListOutputDTO'; -import { UserTypingServiceRepository } from 'src/app/module/chat/data/repository/user-typing-repository.service'; import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'; import { EditMessagePage } from 'src/app/modals/edit-message/edit-message.page'; import { MessageEntity } from 'src/app/module/chat/domain/entity/message'; @@ -43,6 +41,11 @@ import { SpeakerService, StartRecordingResultError, StopRecordingResultError } f import { compressImageBase64 } from 'src/app/utils/imageCompressore'; import { ChatPopoverPage } from '../../modal/chat-popover/chat-popover.page'; import { LastMessage } from '../../utils/lastMessage'; +import { UserTypingLocalRepository } from 'src/app/module/chat/data/repository/user-typing-local-data-source.service'; +import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repository/user-typing-live-data-source.service'; +import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message-local-data-source.service'; +import { MessageRemoteDataSourceService } from 'src/app/module/chat/data/repository/message-remote-data-source.service'; + @Component({ selector: 'app-messages', @@ -150,14 +153,16 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy private fileOpener: FileOpener, public p: PermissionService, private MemberListLocalRepository: MemberListLocalRepository, - private messageRepositoryService: MessageRepositoryService, - private userTypingServiceRepository: UserTypingServiceRepository, private chatServiceService: ChatServiceService, private CameraService: CameraService, private FilePickerWebService: FilePickerWebService, private FilePickerService: FilePickerService, private SpeakerService: SpeakerService, - private RoomLocalRepository: RoomLocalRepository + private RoomLocalRepository: RoomLocalRepository, + private userTypingLocalRepository: UserTypingLocalRepository, + private UserTypingRemoteRepositoryService: UserTypingRemoteRepositoryService, + private messageLocalDataSourceService: MessageLocalDataSourceService, + private MessageRemoteDataSourceService: MessageRemoteDataSourceService ) { // update this.checkAudioPermission() @@ -178,7 +183,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy this.roomStatus$ = this.MemberListLocalRepository.allMemberOnline(this.roomId) this.chatServiceService.getRoomById(this.roomId) - this.userTypingServiceRepository.getUserTypingLive().subscribe((e) => { + this.userTypingLocalRepository.getUserTypingLive().subscribe((e) => { const arrayNames = e.map(e => e.userName) this.userTyping$ = e as any @@ -192,7 +197,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy // dont remove this line this.messages1[this.roomId] = [] - let messages = await this.messageRepositoryService.getItems(this.roomId) + let messages = await this.messageLocalDataSourceService.getItems(this.roomId) this.messages1[this.roomId] = [] this.messages1[this.roomId] = messages @@ -347,13 +352,13 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy sendReadAt() { - this.messageRepositoryService.sendReadAt({roomId: this.roomId}).then((e) => { + this.chatServiceService.messageMarkAsRead({roomId: this.roomId}).then((e) => { console.log(e) }) } sendTyping() { - this.userTypingServiceRepository.addUserTyping(this.roomId) + this.UserTypingRemoteRepositoryService.sendTyping(this.roomId) } async editMessage(message: MessageEntity) { diff --git a/src/app/ui/chat/modal/chat-popover/chat-popover.page.ts b/src/app/ui/chat/modal/chat-popover/chat-popover.page.ts index 8bb9fa0ed..b46f88cc4 100644 --- a/src/app/ui/chat/modal/chat-popover/chat-popover.page.ts +++ b/src/app/ui/chat/modal/chat-popover/chat-popover.page.ts @@ -6,7 +6,6 @@ import { SetRoomOwnerPage } from 'src/app/ui/chat/modal/set-room-owner/set-room- import { SessionStore } from 'src/app/store/session.service'; import { ZodError } from 'zod'; import { isHttpResponse } from 'src/app/services/http.service'; -import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service' import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service' diff --git a/src/app/ui/chat/modal/messages/messages.page.ts b/src/app/ui/chat/modal/messages/messages.page.ts index 382499144..e8d053bd2 100644 --- a/src/app/ui/chat/modal/messages/messages.page.ts +++ b/src/app/ui/chat/modal/messages/messages.page.ts @@ -21,10 +21,8 @@ import { ViewMediaPage } from 'src/app/modals/view-media/view-media.page'; //====== import { Observable as DexieObservable } from 'Dexie'; import { Subscription } from 'rxjs'; -import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service' import { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message'; import { RoomListItemOutPutDTO } from 'src/app/module/chat/data/dto/room/roomListOutputDTO'; -import { UserTypingServiceRepository } from 'src/app/module/chat/data/repository/user-typing-repository.service'; import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'; import { EditMessagePage } from 'src/app/modals/edit-message/edit-message.page'; import { MessageEntity } from 'src/app/module/chat/domain/entity/message'; @@ -44,6 +42,11 @@ import { allowedDocExtension } from 'src/app/utils/allowedDocExtension'; import { JSFileToDataUrl } from 'src/app/utils/ToBase64'; import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room-local-repository.service' import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service' +import { UserTypingLocalRepository } from 'src/app/module/chat/data/repository/user-typing-local-data-source.service'; +import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repository/user-typing-live-data-source.service'; +import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message-local-data-source.service'; + + const IMAGE_DIR = 'stored-images'; @Component({ @@ -138,8 +141,6 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { private platform: Platform, private storage: Storage, private sanitiser: DomSanitizer, - private messageRepositoryService: MessageRepositoryService, - private userTypingServiceRepository: UserTypingServiceRepository, private chatServiceService: ChatServiceService, private FilePickerService: FilePickerService, private CameraService: CameraService, @@ -147,6 +148,9 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { private FilePickerWebService: FilePickerWebService, private RoomLocalRepository: RoomLocalRepository, private MemberListLocalRepository: MemberListLocalRepository, + private userTypingLocalRepository: UserTypingLocalRepository, + private UserTypingRemoteRepositoryService: UserTypingRemoteRepositoryService, + private messageLocalDataSourceService: MessageLocalDataSourceService, ) { @@ -167,7 +171,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { this.roomStatus$ = this.MemberListLocalRepository.allMemberOnline(this.roomId) // this.roomRepositoryService.getRoomById(this.roomId) - this.userTypingServiceRepository.getUserTypingLive().subscribe((e) => { + this.userTypingLocalRepository.getUserTypingLive().subscribe((e) => { const arrayNames = e.map(e => e.userName) this.userTyping$ = e as any @@ -182,7 +186,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { // dont remove this line this.messages1[this.roomId] = [] - let messages = await this.messageRepositoryService.getItems(this.roomId) + let messages = await this.messageLocalDataSourceService.getItems(this.roomId) this.messages1[this.roomId] = [] this.messages1[this.roomId] = messages @@ -1217,6 +1221,6 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { } sendTyping() { - this.userTypingServiceRepository.addUserTyping(this.roomId) + this.UserTypingRemoteRepositoryService.sendTyping(this.roomId) } }