mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
code refactoring
This commit is contained in:
@@ -226,10 +226,6 @@ const routes = [
|
|||||||
path: 'previewer',
|
path: 'previewer',
|
||||||
loadChildren: () => import('./modals/previewer/previewer.module').then( m => m.PreviewerPageModule)
|
loadChildren: () => import('./modals/previewer/previewer.module').then( m => m.PreviewerPageModule)
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: 'set-room-owner',
|
|
||||||
loadChildren: () => import('./modals/set-room-owner/set-room-owner.module').then( m => m.SetRoomOwnerPageModule)
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: 'diplomas-gerar',
|
path: 'diplomas-gerar',
|
||||||
loadChildren: () => import('./shared/gabinete-digital/diplomas-gerar/diplomas-gerar.module').then( m => m.DiplomasGerarPageModule)
|
loadChildren: () => import('./shared/gabinete-digital/diplomas-gerar/diplomas-gerar.module').then( m => m.DiplomasGerarPageModule)
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ export class DexieRepository<T> {
|
|||||||
|
|
||||||
async findAll(): Promise<RepositoryResult<T[], T>> {
|
async findAll(): Promise<RepositoryResult<T[], T>> {
|
||||||
try {
|
try {
|
||||||
console.log(this.table)
|
|
||||||
const documents = await this.table.toArray()
|
const documents = await this.table.toArray()
|
||||||
return ok(documents);
|
return ok(documents);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export class ChatModule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
syncMessage() {
|
async syncMessage() {
|
||||||
const connection = this.SignalRService.getConnectionState()
|
const connection = this.SignalRService.getConnectionState()
|
||||||
|
|
||||||
connection.pipe(
|
connection.pipe(
|
||||||
@@ -38,7 +38,7 @@ export class ChatModule {
|
|||||||
).subscribe((value)=> {
|
).subscribe((value)=> {
|
||||||
if(value) {
|
if(value) {
|
||||||
// on reconnect
|
// on reconnect
|
||||||
this.ChatServiceService.asyncAllRoomMessage();
|
this.ChatServiceService.start();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ export class ChatModule {
|
|||||||
|
|
||||||
// on page reload sync
|
// on page reload sync
|
||||||
if(!(!SessionStore.user.Inactivity || !SessionStore.exist)) {
|
if(!(!SessionStore.user.Inactivity || !SessionStore.exist)) {
|
||||||
this.ChatServiceService.asyncAllRoomMessage();
|
this.ChatServiceService.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO';
|
|
||||||
import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie';
|
|
||||||
import { z } from 'zod';
|
|
||||||
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
|
|
||||||
|
|
||||||
|
|
||||||
const MemberTableSchema = z.object({
|
|
||||||
$roomIdUserId: z.string().optional(),
|
|
||||||
id: z.string(),
|
|
||||||
roomId: z.string(),
|
|
||||||
user: z.object({
|
|
||||||
wxUserId: z.number(),
|
|
||||||
wxFullName: z.string(),
|
|
||||||
wxeMail: z.string(),
|
|
||||||
userPhoto: z.string().nullable(),
|
|
||||||
}),
|
|
||||||
joinAt: z.string(),
|
|
||||||
status: z.string()
|
|
||||||
})
|
|
||||||
export type IMemberTable = z.infer<typeof MemberTableSchema>
|
|
||||||
|
|
||||||
type IMemberTableSchema = EntityTable<IMemberTable, '$roomIdUserId'>
|
|
||||||
// Database declaration (move this to its own module also)
|
|
||||||
export const roomMemberList = new Dexie('roomMemberList') as Dexie & {
|
|
||||||
memberList: EntityTable<IMemberTable, '$roomIdUserId'>;
|
|
||||||
};
|
|
||||||
|
|
||||||
roomMemberList.version(1).stores({
|
|
||||||
memberList: '$roomIdUserId, id, user, joinAt, roomId, status',
|
|
||||||
});
|
|
||||||
|
|
||||||
@Injectable({
|
|
||||||
providedIn: 'root'
|
|
||||||
})
|
|
||||||
export class MemberListLocalDataSourceService extends DexieRepository<IMemberTable> {
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super(roomMemberList.memberList, MemberTableSchema);
|
|
||||||
|
|
||||||
// messageDataSource.message.hook('creating', (primKey, obj, trans) => {
|
|
||||||
// // const newMessage = await trans.table('message').get(primKey);
|
|
||||||
// this.messageSubject.next(obj);
|
|
||||||
// // return newMessage
|
|
||||||
// })
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { SignalRService } from '../../../infra/socket/signal-r.service';
|
|
||||||
import { AddMemberToRoomInputDTO } from '../../dto/room/addMemberToRoomInputDto';
|
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
|
||||||
@Injectable({
|
|
||||||
providedIn: 'root'
|
|
||||||
})
|
|
||||||
export class RoomLiveDataSourceService {
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
private socket: SignalRService,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
// async getRoomById(data: WebSocketMessage) {
|
|
||||||
|
|
||||||
// try {
|
|
||||||
|
|
||||||
// const result = await this.socket.sendMessage(data).toPromise()
|
|
||||||
|
|
||||||
// console.log({result})
|
|
||||||
|
|
||||||
// return ok(result)
|
|
||||||
// } catch (e) {
|
|
||||||
// return err(e)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
async addMemberToRoom(data: AddMemberToRoomInputDTO) {
|
|
||||||
|
|
||||||
const result = await this.socket.sendData({
|
|
||||||
method: 'AddRoomMember',
|
|
||||||
data: {
|
|
||||||
requestId: uuidv4(),
|
|
||||||
roomId: data.id,
|
|
||||||
members: data.members
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
console.log({result})
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
import { createAction, createFeatureSelector, createReducer, createSelector, on, props } from "@ngrx/store";
|
|
||||||
import { RoomOutPutDTO } from "../../dto/room/roomOutputDTO";
|
|
||||||
import { RoomTable } from "../../../infra/database/dexie/schema/room";
|
|
||||||
|
|
||||||
|
|
||||||
export interface ChatRoom {
|
|
||||||
[roomId: string]: RoomTable[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface RoomRemoteDataSourceState {
|
|
||||||
chatRooms: ChatRoom;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const initialState: RoomRemoteDataSourceState = {
|
|
||||||
chatRooms: {
|
|
||||||
// add more rooms as needed
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const addMessage = createAction(
|
|
||||||
'[Chat] Add Message',
|
|
||||||
props<{ roomId: string; message: any }>()
|
|
||||||
);
|
|
||||||
|
|
||||||
export const addRoom = createAction(
|
|
||||||
'[Chat] Add Room',
|
|
||||||
props<RoomOutPutDTO>()
|
|
||||||
);
|
|
||||||
|
|
||||||
const _chatReducer = createReducer(
|
|
||||||
initialState,
|
|
||||||
on(addMessage, (state, { roomId, message }) => ({
|
|
||||||
...state,
|
|
||||||
chatRooms: {
|
|
||||||
...state.chatRooms,
|
|
||||||
[roomId]: [...(state.chatRooms[roomId] || []), message]
|
|
||||||
}
|
|
||||||
})),
|
|
||||||
on(addRoom, (state, roomData: RoomOutPutDTO) => ({
|
|
||||||
...state,
|
|
||||||
chatRooms: {
|
|
||||||
...state.chatRooms,
|
|
||||||
[roomData.data.roomName]: roomData.data
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
);
|
|
||||||
|
|
||||||
export function chatReducer(state, action) {
|
|
||||||
return _chatReducer(state, action);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a feature selector
|
|
||||||
export const selectChatState = createFeatureSelector<RoomRemoteDataSourceState>('chat');
|
|
||||||
|
|
||||||
// Create a selector for a specific room's messages
|
|
||||||
export const selectMessagesByRoom = (roomId: string) => createSelector(
|
|
||||||
selectChatState,
|
|
||||||
(state: RoomRemoteDataSourceState) => state.chatRooms[roomId] || []
|
|
||||||
);
|
|
||||||
|
|
||||||
// Create a selector for the list of rooms
|
|
||||||
export const selectAllRooms = createSelector(
|
|
||||||
selectChatState,
|
|
||||||
(state: RoomRemoteDataSourceState) => Object.keys(state.chatRooms)
|
|
||||||
);
|
|
||||||
+17
-73
@@ -1,72 +1,31 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO';
|
import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../dto/room/roomListOutputDTO';
|
||||||
import { liveQuery, Observable } from 'Dexie';
|
import { Dexie, EntityTable, liveQuery, Observable } from 'Dexie';
|
||||||
import { err, ok, Result } from 'neverthrow';
|
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
|
||||||
import { MemberListUPdateStatusInputDTO } from '../../../domain/use-case/socket/member-list-update-status-use-case.service';
|
|
||||||
import { MemberTable } from '../../../infra/database/dexie/schema/members';
|
|
||||||
import { chatDatabase } from '../../../infra/database/dexie/service';
|
|
||||||
import { RoomTable, RoomTableSchema } from '../../../infra/database/dexie/schema/room';
|
|
||||||
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
|
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
|
||||||
|
import { RoomTable, RoomTableSchema } from '../../infra/database/dexie/schema/room';
|
||||||
|
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 } from '../../infra/database/dexie/schema/members';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class RoomLocalDataSourceService extends DexieRepository<RoomTable> {
|
export class MemberListLocalRepository extends DexieRepository<RoomTable> {
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super(chatDatabase.room, RoomTableSchema)
|
super(chatDatabase.room, RoomTableSchema)
|
||||||
|
|
||||||
|
// messageDataSource.message.hook('creating', (primKey, obj, trans) => {
|
||||||
|
// // const newMessage = await trans.table('message').get(primKey);
|
||||||
|
// this.messageSubject.next(obj);
|
||||||
|
// // return newMessage
|
||||||
|
// })
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 addMember(data: MemberTable) {
|
async addMember(data: MemberTable) {
|
||||||
try {
|
try {
|
||||||
data.$roomIdUserId = data.roomId + data.wxUserId
|
data.$roomIdUserId = data.roomId + data.wxUserId
|
||||||
@@ -122,7 +81,7 @@ export class RoomLocalDataSourceService extends DexieRepository<RoomTable> {
|
|||||||
const member = await chatDatabase.members.where({ $roomIdUserId: $roomIdUserId }).first();
|
const member = await chatDatabase.members.where({ $roomIdUserId: $roomIdUserId }).first();
|
||||||
|
|
||||||
if (member) {
|
if (member) {
|
||||||
const result = await ok(chatDatabase.members.delete($roomIdUserId));
|
const result = ok(await chatDatabase.members.delete($roomIdUserId));
|
||||||
console.log(`Member with $roomIdUserId ${$roomIdUserId} removed from room ${member.roomId}.`);
|
console.log(`Member with $roomIdUserId ${$roomIdUserId} removed from room ${member.roomId}.`);
|
||||||
return result
|
return result
|
||||||
} else {
|
} else {
|
||||||
@@ -135,19 +94,6 @@ export class RoomLocalDataSourceService extends DexieRepository<RoomTable> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getRoomById(id: any) {
|
|
||||||
try {
|
|
||||||
const result = await chatDatabase.room.get(id)
|
|
||||||
return ok(result)
|
|
||||||
} catch (e) {
|
|
||||||
return err(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async getRoomList() {
|
|
||||||
return await chatDatabase.room.toArray()
|
|
||||||
}
|
|
||||||
|
|
||||||
getMemberLive(data: {roomId, wxUserId}) {
|
getMemberLive(data: {roomId, wxUserId}) {
|
||||||
const $roomIdUserId = data.roomId + data.wxUserId
|
const $roomIdUserId = data.roomId + data.wxUserId
|
||||||
@@ -175,6 +121,4 @@ export class RoomLocalDataSourceService extends DexieRepository<RoomTable> {
|
|||||||
return members.filter(e => e.isAdmin != true)
|
return members.filter(e => e.isAdmin != true)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+3
-3
@@ -3,13 +3,13 @@ import { Result } from 'neverthrow';
|
|||||||
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
||||||
import { HttpService } from 'src/app/services/http.service';
|
import { HttpService } from 'src/app/services/http.service';
|
||||||
import { DataSourceReturn } from 'src/app/services/Repositorys/type';
|
import { DataSourceReturn } from 'src/app/services/Repositorys/type';
|
||||||
import { AddMemberToRoomInputDTOSchema, AddMemberToRoomInputDTO } from '../../dto/room/addMemberToRoomInputDto';
|
import { AddMemberToRoomInputDTOSchema, AddMemberToRoomInputDTO } from '../dto/room/addMemberToRoomInputDto';
|
||||||
import { UserRemoveListInputDTOSchema, UserRemoveListInputDTO } from '../../dto/room/userRemoveListInputDTO';
|
import { UserRemoveListInputDTOSchema, UserRemoveListInputDTO } from '../dto/room/userRemoveListInputDTO';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class MemberListRemoteDataSourceService {
|
export class MemberListRemoteRepository {
|
||||||
|
|
||||||
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL
|
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL
|
||||||
|
|
||||||
@@ -4,14 +4,9 @@ import { SessionStore } from 'src/app/store/session.service';
|
|||||||
import { SignalRService } from '../../infra/socket/signal-r.service';
|
import { SignalRService } from '../../infra/socket/signal-r.service';
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import { err, ok } from 'neverthrow';
|
import { err, ok } from 'neverthrow';
|
||||||
import { MessageDeleteInputDTO } from '../../domain/use-case/message-delete-live-use-case.service';
|
import { MessageDeleteInputDTO } from '../../domain/use-case/message-delete-by-id-live-use-case.service';
|
||||||
import { MessageUpdateInput } from '../../domain/use-case/message-update-use-case.service';
|
import { MessageUpdateInput } from '../../domain/use-case/message-update-by-id-use-case.service';
|
||||||
import { messageListDetermineChanges } from '../async/list/rooms/messageListChangedetector';
|
|
||||||
import { MessageEntity } from '../../domain/entity/message';
|
|
||||||
import { InstanceId } from '../../domain/chat-service.service';
|
import { InstanceId } from '../../domain/chat-service.service';
|
||||||
import { MessageMapper } from '../../domain/mapper/messageMapper';
|
|
||||||
import { MessageOutPutDataDTO } from '../dto/message/messageOutputDTO';
|
|
||||||
import { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message';
|
|
||||||
import { MessageLocalDataSourceService } from '../data-source/message/message-local-data-source.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 { 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'
|
import { AttachmentLocalDataSource } from 'src/app/module/chat/data/data-source/attachment/attachment-local-data-source.service'
|
||||||
@@ -29,48 +24,6 @@ export class MessageRepositoryService {
|
|||||||
private AttachmentLocalDataSourceService: AttachmentLocalDataSource
|
private AttachmentLocalDataSourceService: AttachmentLocalDataSource
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
|
||||||
async createMessageLocally(entity: MessageEntity) {
|
|
||||||
//const requestId = InstanceId +'@'+ uuidv4();
|
|
||||||
|
|
||||||
const localActionResult = await this.messageLocalDataSourceService.sendMessage(entity)
|
|
||||||
|
|
||||||
return localActionResult.map(e => {
|
|
||||||
entity.$id = e
|
|
||||||
return entity
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
async sendMessage(entity: MessageEntity) {
|
|
||||||
|
|
||||||
entity.sending = true
|
|
||||||
|
|
||||||
const DTO = MessageMapper.fromDomain(entity, entity.requestId)
|
|
||||||
const sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO)
|
|
||||||
// return this sendMessageResult
|
|
||||||
|
|
||||||
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 : entity.$id
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.messageLocalDataSourceService.update(entity.$id, {...clone, sending: false, roomId: entity.roomId})
|
|
||||||
} else {
|
|
||||||
await this.messageLocalDataSourceService.update(entity.$id, {sending: false, $id: entity.$id})
|
|
||||||
return err('no connection')
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sendMessageDelete(data: MessageDeleteInputDTO) {
|
sendMessageDelete(data: MessageDeleteInputDTO) {
|
||||||
|
|
||||||
data['requestId'] = InstanceId +'@'+ uuidv4();
|
data['requestId'] = InstanceId +'@'+ uuidv4();
|
||||||
@@ -104,36 +57,6 @@ export class MessageRepositoryService {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async listAllMessagesByRoomId(id: string) {
|
|
||||||
const result = await this.messageRemoteDataSourceService.getMessagesFromRoom(id)
|
|
||||||
const localResult = await this.messageLocalDataSourceService.getItems(id)
|
|
||||||
|
|
||||||
if(result.isOk()) {
|
|
||||||
|
|
||||||
const { addedItems, changedItems, deletedItems } = messageListDetermineChanges(result.value.data, localResult)
|
|
||||||
|
|
||||||
for(const message of changedItems) {
|
|
||||||
let clone: MessageTable = message
|
|
||||||
clone.roomId = id
|
|
||||||
this.messageLocalDataSourceService.findOrUpdate(clone)
|
|
||||||
}
|
|
||||||
|
|
||||||
for(const message of addedItems) {
|
|
||||||
let clone: MessageTable = message
|
|
||||||
clone.roomId = id
|
|
||||||
}
|
|
||||||
|
|
||||||
this.messageLocalDataSourceService.createManyMessage(addedItems.reverse())
|
|
||||||
|
|
||||||
|
|
||||||
for(const message of deletedItems) {
|
|
||||||
this.messageLocalDataSourceService.deleteByMessageId(message.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok(addedItems)
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
getItemsLive (roomId: string) {
|
getItemsLive (roomId: string) {
|
||||||
return this.messageLocalDataSourceService.getItemsLive(roomId)
|
return this.messageLocalDataSourceService.getItemsLive(roomId)
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../dto/room/roomListOutputDTO';
|
||||||
|
import { liveQuery, Observable } from 'Dexie';
|
||||||
|
import { err, ok, Result } from 'neverthrow';
|
||||||
|
import { z } from 'zod';
|
||||||
|
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
||||||
|
import { chatDatabase } from '../../infra/database/dexie/service';
|
||||||
|
import { RoomTable, RoomTableSchema } from '../../infra/database/dexie/schema/room';
|
||||||
|
import { DexieRepository } from 'src/app/infra/repository/dexie/dexie-repository.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class RoomLocalRepository extends DexieRepository<RoomTable> {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
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(): Observable<RoomListOutPutDTO[]> {
|
||||||
|
return liveQuery(() => chatDatabase.room.toArray()) as any;
|
||||||
|
}
|
||||||
|
|
||||||
|
getRoomByIdLive(id: any): Observable<RoomListItemOutPutDTO | undefined> {
|
||||||
|
return liveQuery(() => chatDatabase.room.get(id)) as any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
+32
-11
@@ -1,20 +1,22 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Result } from 'neverthrow';
|
import { Result } from 'neverthrow';
|
||||||
import { HttpService } from 'src/app/services/http.service';
|
import { HttpService } from 'src/app/services/http.service';
|
||||||
import { RoomListOutPutDTO, RoomListOutPutDTOSchema } from '../../dto/room/roomListOutputDTO';
|
import { RoomListOutPutDTO, RoomListOutPutDTOSchema } from '../dto/room/roomListOutputDTO';
|
||||||
import { RoomInputDTO, RoomInputDTOSchema } from '../../dto/room/roomInputDTO';
|
import { RoomInputDTO, RoomInputDTOSchema } from '../dto/room/roomInputDTO';
|
||||||
import { RoomOutPutDTO, RoomOutPutDTOSchema } from '../../dto/room/roomOutputDTO';
|
import { RoomOutPutDTO, RoomOutPutDTOSchema } from '../dto/room/roomOutputDTO';
|
||||||
import { AddMemberToRoomInputDTO, AddMemberToRoomInputDTOSchema } from '../../dto/room/addMemberToRoomInputDto';
|
import { AddMemberToRoomInputDTO, AddMemberToRoomInputDTOSchema } from '../dto/room/addMemberToRoomInputDto';
|
||||||
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
||||||
import { RoomByIdInputDTO, RoomByIdInputDTOSchema } from '../../dto/room/roomByIdInputDTO';
|
import { RoomByIdInputDTO, RoomByIdInputDTOSchema } from '../dto/room/roomByIdInputDTO';
|
||||||
import { RoomByIdOutputDTO, RoomByIdOutputDTOSchema } from '../../dto/room/roomByIdOutputDTO';
|
import { RoomByIdOutputDTO, RoomByIdOutputDTOSchema } from '../dto/room/roomByIdOutputDTO';
|
||||||
import { APIReturn } from 'src/app/services/decorators/api-validate-schema.decorator';
|
import { APIReturn } from 'src/app/services/decorators/api-validate-schema.decorator';
|
||||||
import { UserRemoveListInputDTO, UserRemoveListInputDTOSchema } from '../../dto/room/userRemoveListInputDTO';
|
import { UserRemoveListInputDTO, UserRemoveListInputDTOSchema } from '../dto/room/userRemoveListInputDTO';
|
||||||
import { RoomUpdateInputDTO, RoomUpdateInputDTOSchema } from '../../dto/room/roomUpdateInputDTO';
|
import { RoomUpdateInputDTO, RoomUpdateInputDTOSchema } from '../dto/room/roomUpdateInputDTO';
|
||||||
import { RoomUpdateOutputDTO } from '../../dto/room/roomUpdateOutputDTO';
|
import { RoomUpdateOutputDTO } from '../dto/room/roomUpdateOutputDTO';
|
||||||
import { DataSourceReturn } from 'src/app/services/Repositorys/type';
|
import { DataSourceReturn } from 'src/app/services/Repositorys/type';
|
||||||
import { SessionStore } from 'src/app/store/session.service';
|
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-admin-use-case.service';
|
||||||
|
import { SignalRService } from '../../infra/socket/signal-r.service';
|
||||||
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
@@ -23,7 +25,10 @@ export class RoomRemoteDataSourceService {
|
|||||||
|
|
||||||
private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL
|
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,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
|
||||||
@ValidateSchema(RoomInputDTOSchema)
|
@ValidateSchema(RoomInputDTOSchema)
|
||||||
@@ -71,4 +76,20 @@ export class RoomRemoteDataSourceService {
|
|||||||
return await this.httpService.patch<any>(`${this.baseUrl}/Room/${data.roomId}/Member/${data.memberId}/admin`);
|
return await this.httpService.patch<any>(`${this.baseUrl}/Room/${data.roomId}/Member/${data.memberId}/admin`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async addMemberToRoomSocket(data: AddMemberToRoomInputDTO) {
|
||||||
|
|
||||||
|
const result = await this.socket.sendData({
|
||||||
|
method: 'AddRoomMember',
|
||||||
|
data: {
|
||||||
|
requestId: uuidv4(),
|
||||||
|
roomId: data.id,
|
||||||
|
members: data.members
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log({result})
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,309 +0,0 @@
|
|||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { RoomRemoteDataSourceService } from '../data-source/room/room-remote-data-source.service'
|
|
||||||
import { RoomInputDTO } from '../dto/room/roomInputDTO';
|
|
||||||
import { AddMemberToRoomInputDTO } from '../dto/room/addMemberToRoomInputDto';
|
|
||||||
import { RoomLocalDataSourceService } from '../data-source/room/rooom-local-data-source.service';
|
|
||||||
import { RoomByIdInputDTO } from '../dto/room/roomByIdInputDTO';
|
|
||||||
import { roomListDetermineChanges } from '../async/list/rooms/roomListChangeDetector';
|
|
||||||
import { UserRemoveListInputDTO } from '../dto/room/userRemoveListInputDTO';
|
|
||||||
import { roomMemberListDetermineChanges } from '../async/list/rooms/roomMembersChangeDetector';
|
|
||||||
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
|
|
||||||
import { RoomUpdateInputDTO } from '../dto/room/roomUpdateInputDTO';
|
|
||||||
import { SessionStore } from 'src/app/store/session.service';
|
|
||||||
import { RoomLiveDataSourceService } from '../data-source/room/room-live-data-source.service';
|
|
||||||
import { isHttpResponse } from 'src/app/services/http.service';
|
|
||||||
import { MemberListUPdateStatusInputDTO } from '../../domain/use-case/socket/member-list-update-status-use-case.service';
|
|
||||||
import { MemberSetAdminDTO } from '../../domain/use-case/member-admin-use-case.service';
|
|
||||||
import { MemberListMapper } from '../../domain/mapper/memberLIstMapper';
|
|
||||||
|
|
||||||
|
|
||||||
function date(isoDateString) {
|
|
||||||
let date = new Date(isoDateString);
|
|
||||||
|
|
||||||
const tzOffset = -date.getTimezoneOffset(); // in minutes
|
|
||||||
const diff = tzOffset >= 0 ? '+' : '-';
|
|
||||||
const pad = (n: number) => (n < 10 ? '0' : '') + n;
|
|
||||||
|
|
||||||
return date.getFullYear() +
|
|
||||||
'-' + pad(date.getMonth() + 1) +
|
|
||||||
'-' + pad(date.getDate()) +
|
|
||||||
'T' + pad(date.getHours()) +
|
|
||||||
':' + pad(date.getMinutes()) +
|
|
||||||
':' + pad(date.getSeconds()) +
|
|
||||||
diff + pad(Math.floor(Math.abs(tzOffset) / 60)) +
|
|
||||||
':' + pad(Math.abs(tzOffset) % 60);
|
|
||||||
}
|
|
||||||
@Injectable({
|
|
||||||
providedIn: 'root'
|
|
||||||
})
|
|
||||||
export class RoomRepositoryService {
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
|
||||||
// private roomMemoryDataSourceService: Store<RoomRemoteDataSourceState>,
|
|
||||||
private roomLocalDataSourceService: RoomLocalDataSourceService,
|
|
||||||
private roomLiveSignalRDataSourceService: RoomLiveDataSourceService,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
@captureAndReraiseAsync('RoomRepositoryService/list')
|
|
||||||
async list() {
|
|
||||||
const result = await this.roomRemoteDataSourceService.getRoomList()
|
|
||||||
|
|
||||||
const localList = await this.roomLocalDataSourceService.getRoomList()
|
|
||||||
|
|
||||||
if(result.isOk()) {
|
|
||||||
const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges(result.value.data, localList)
|
|
||||||
|
|
||||||
for( const roomData of roomsToInsert) {
|
|
||||||
this.roomLocalDataSourceService.createRoom(roomData.chatRoom)
|
|
||||||
}
|
|
||||||
|
|
||||||
for( const roomData of roomsToUpdate) {
|
|
||||||
this.roomLocalDataSourceService.updateRoom(roomData.chatRoom)
|
|
||||||
}
|
|
||||||
|
|
||||||
for( const roomData of roomsToDelete) {
|
|
||||||
this.roomLocalDataSourceService.deleteRoomById(roomData.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const rooms = roomsToInsert.concat(roomsToUpdate)
|
|
||||||
|
|
||||||
for(const room of rooms) {
|
|
||||||
const expirationDate = new Date(room.chatRoom.expirationDate);
|
|
||||||
const now = new Date();
|
|
||||||
if (room.chatRoom.expirationDate != null && expirationDate.getTime() >= now.getTime()) {
|
|
||||||
const timeRemaining = expirationDate.getTime() - now.getTime();
|
|
||||||
setTimeout(() => {
|
|
||||||
this.list()
|
|
||||||
}, timeRemaining)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async getRoomList() {
|
|
||||||
return await this.roomLocalDataSourceService.getRoomList()
|
|
||||||
}
|
|
||||||
|
|
||||||
@captureAndReraiseAsync('RoomRepositoryService/updateRoomBy')
|
|
||||||
async updateRoomBy(data: RoomUpdateInputDTO) {
|
|
||||||
|
|
||||||
const result = await this.roomRemoteDataSourceService.updateRoom(data)
|
|
||||||
|
|
||||||
if(result.isOk()) {
|
|
||||||
const localList = await this.roomLocalDataSourceService.getRoomList()
|
|
||||||
// const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([result.value.data], localList)
|
|
||||||
|
|
||||||
// for( const roomData of roomsToUpdate) {
|
|
||||||
// if(!roomData.chatRoom.createdBy?.wxUserId) {
|
|
||||||
// delete roomData.chatRoom.createdBy;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// this.roomLocalDataSourceService.updateRoom(roomData.chatRoom)
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
@captureAndReraiseAsync('RoomRepositoryService/getRoomById')
|
|
||||||
async getRoomById(id: RoomByIdInputDTO) {
|
|
||||||
const result = await this.roomRemoteDataSourceService.getRoom(id)
|
|
||||||
|
|
||||||
if(result.isOk()) {
|
|
||||||
|
|
||||||
const localListRoom = await this.roomLocalDataSourceService.getRoomList()
|
|
||||||
const object = {
|
|
||||||
chatRoom: result.value.data
|
|
||||||
}
|
|
||||||
const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([object], localListRoom)
|
|
||||||
|
|
||||||
for( const roomData of roomsToUpdate) {
|
|
||||||
this.roomLocalDataSourceService.updateRoom(roomData.chatRoom)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================
|
|
||||||
const localList = await this.roomLocalDataSourceService.getRoomMemberById(id)
|
|
||||||
|
|
||||||
const { membersToInsert, membersToUpdate, membersToDelete } = roomMemberListDetermineChanges(result.value.data.members, localList, id)
|
|
||||||
|
|
||||||
for (const user of membersToInsert) {
|
|
||||||
await this.roomLocalDataSourceService.addMember(MemberListMapper(user, id))
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const user of membersToUpdate) {
|
|
||||||
await this.roomLocalDataSourceService.updateMemberRole(MemberListMapper(user, id))
|
|
||||||
}
|
|
||||||
|
|
||||||
for(const user of membersToDelete) {
|
|
||||||
await this.roomLocalDataSourceService.removeMemberFromRoom(user.$roomIdUserId)
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (isHttpResponse(result.error) ) {
|
|
||||||
if(result.error.status == 404) {
|
|
||||||
await this.roomLocalDataSourceService.deleteRoomById(id)
|
|
||||||
}
|
|
||||||
// this.httpErrorHandle.httpStatusHandle(result.error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
@captureAndReraiseAsync('RoomRepositoryService/deleteRoomById')
|
|
||||||
async deleteRoomById(id: RoomByIdInputDTO) {
|
|
||||||
const result = await this.roomRemoteDataSourceService.deleteRoom(id)
|
|
||||||
|
|
||||||
if(result.isOk()) {
|
|
||||||
|
|
||||||
const result = await this.roomLocalDataSourceService.deleteRoomById(id)
|
|
||||||
// this.messageLiveDataSourceService.sendMessage({
|
|
||||||
// type: 'createRoom',
|
|
||||||
// payload: {a: '5'}
|
|
||||||
// })
|
|
||||||
|
|
||||||
return result
|
|
||||||
} else if (isHttpResponse(result.error)) {
|
|
||||||
if(result.error.status == 404) {
|
|
||||||
await this.roomLocalDataSourceService.deleteRoomById(id)
|
|
||||||
}
|
|
||||||
// this.httpErrorHandle.httpStatusHandle(result.error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
@captureAndReraiseAsync('RoomRepositoryService/create')
|
|
||||||
async create(data: RoomInputDTO) {
|
|
||||||
|
|
||||||
const result = await this.roomRemoteDataSourceService.createRoom(data)
|
|
||||||
if(result.isOk()) {
|
|
||||||
|
|
||||||
if(!result.value.data.createdBy) {
|
|
||||||
|
|
||||||
let dataObject;
|
|
||||||
|
|
||||||
result.value.data.createdBy = {
|
|
||||||
wxeMail: SessionStore.user.Email,
|
|
||||||
wxFullName: SessionStore.user.FullName,
|
|
||||||
wxUserId: SessionStore.user.UserId,
|
|
||||||
}
|
|
||||||
|
|
||||||
dataObject = result.value.data
|
|
||||||
dataObject.lastMessage = {
|
|
||||||
sentAt: date(new Date()),
|
|
||||||
message: "",
|
|
||||||
sender: {
|
|
||||||
wxUserId: "",
|
|
||||||
wxFullName: "",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// this.roomMemoryDataSourceService.dispatch(addRoom(result.value))
|
|
||||||
const localResult = await this.roomLocalDataSourceService.createRoom(result.value.data)
|
|
||||||
|
|
||||||
// this.messageLiveDataSourceService.sendMessage({
|
|
||||||
// type: 'createRoom',
|
|
||||||
// payload: {a: '5'}
|
|
||||||
// })
|
|
||||||
|
|
||||||
return localResult.map(e => result.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@captureAndReraiseAsync('RoomRepositoryService/addMemberToRoom')
|
|
||||||
async addMemberToRoom(data: AddMemberToRoomInputDTO) {
|
|
||||||
|
|
||||||
// return this.roomLiveSignalRDataSourceService.addMemberToRoom(data)
|
|
||||||
|
|
||||||
const result = await this.roomRemoteDataSourceService.addMemberToRoom(data)
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
async updateMemberStatus(data: MemberListUPdateStatusInputDTO) {
|
|
||||||
const result = await this.roomLocalDataSourceService.updateMembersStatus(data)
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@captureAndReraiseAsync('RoomRepositoryService/removeMemberToRoom')
|
|
||||||
async removeMemberToRoom(data: UserRemoveListInputDTO) {
|
|
||||||
const result = await this.roomRemoteDataSourceService.removeMemberFromRoom(data)
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
setAdmin(input: MemberSetAdminDTO) {
|
|
||||||
return this.roomRemoteDataSourceService.setAmin(input);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async leaveRoom(data: UserRemoveListInputDTO) {
|
|
||||||
const result = await this.roomRemoteDataSourceService.removeMemberFromRoom(data)
|
|
||||||
|
|
||||||
if(result.isOk()) {
|
|
||||||
this.roomLocalDataSourceService.leaveRoom(data.id)
|
|
||||||
} else if (isHttpResponse(result.error)) {
|
|
||||||
if(result.error.status == 404) {
|
|
||||||
await this.roomLocalDataSourceService.deleteRoomById(data.id)
|
|
||||||
|
|
||||||
}
|
|
||||||
// this.httpErrorHandle.httpStatusHandle(result.error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
getItemsLive() {
|
|
||||||
return this.roomLocalDataSourceService.getItemsLive()
|
|
||||||
}
|
|
||||||
|
|
||||||
getItemByIdLive(id: any) {
|
|
||||||
return this.roomLocalDataSourceService.getRoomByIdLive(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
getRoomMemberByIdLive(roomId: any) {
|
|
||||||
return this.roomLocalDataSourceService.getRoomMemberByIdLive(roomId)
|
|
||||||
}
|
|
||||||
|
|
||||||
getRoomMemberById(roomId: any) {
|
|
||||||
return this.roomLocalDataSourceService.getRoomMemberById(roomId)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
getRoomStatus(roomId:string) {
|
|
||||||
return this.roomLocalDataSourceService.allMemberOnline(roomId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
getRoomMemberNoneAdminByIdLive(roomId) {
|
|
||||||
return this.roomLocalDataSourceService.getRoomMemberNoneAdminByIdLive(roomId)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
get find() {
|
|
||||||
return this.roomLocalDataSourceService.find
|
|
||||||
}
|
|
||||||
|
|
||||||
get findAll() {
|
|
||||||
return this.roomLocalDataSourceService.findAll
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,26 +1,38 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { MessageDeleteLiveUseCaseService, MessageDeleteInputDTO } from 'src/app/module/chat/domain/use-case/message-delete-live-use-case.service'
|
import { MessageDeleteLiveUseCaseService } from 'src/app/module/chat/domain/use-case/message-delete-by-id-live-use-case.service'
|
||||||
import { SessionStore } from 'src/app/store/session.service';
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
import { MessageReactionInput, MessageReactionUseCaseService } from 'src/app/module/chat/domain/use-case/message-reaction-use-case.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-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 { MemberAdminUseCaseService, MemberSetAdminDTO } from 'src/app/module/chat/domain/use-case/member-admin-use-case.service';
|
||||||
import { MessageCreateUseCaseService } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
import { MessageCreateUseCaseService } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
||||||
import { SignalRService } from '../infra/socket/signal-r.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 { 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 { 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 { 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/download-message-attachment-user-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 { ListenMessageByRoomIdNewUseCase } from 'src/app/module/chat/domain/use-case/listen-message-by-roomId.service';
|
||||||
import { MemberListUpdateStatusUseCaseService } from 'src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.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 { ListenMessageDeleteByRoomIdService } from './use-case/listene-message-delete-by-roomId.service';
|
||||||
import { ListenMessageUpdateByRoomIdUseCase } from './use-case/listen-message-update-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 { SyncAllRoomMessagesService } from './use-case/sync-all-room-messages.service';
|
||||||
import { ListenSendMessageUseCase } from './use-case/listen-send-message.service'
|
import { ListenSendMessageUseCase } from './use-case/listen-send-message.service'
|
||||||
import { GetMessageAttachmentLocallyUseCaseService } from 'src/app/module/chat/domain/use-case/get-message-attachment-localy-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 { 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 { filter } from 'rxjs/operators';
|
import { filter } from 'rxjs/operators';
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import { MessageEntity } from './entity/message';
|
import { MessageEntity } from './entity/message';
|
||||||
import { MessageAttachmentByMessageIdInput, MessageAttachmentByMessageIdUseCase } from './use-case/message-attachment-by-message-id.service';
|
import { MessageAttachmentByMessageIdInput, MessageAttachmentByMessageIdUseCase } from './use-case/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';
|
||||||
|
import { RoomUpdateInputDTO } from '../data/dto/room/roomUpdateInputDTO';
|
||||||
|
|
||||||
export const InstanceId = uuidv4();
|
export const InstanceId = uuidv4();
|
||||||
|
|
||||||
@@ -48,7 +60,15 @@ export class ChatServiceService {
|
|||||||
private MessageAttachmentByMessageIdService: MessageAttachmentByMessageIdUseCase,
|
private MessageAttachmentByMessageIdService: MessageAttachmentByMessageIdUseCase,
|
||||||
private SyncAllRoomMessagesService: SyncAllRoomMessagesService,
|
private SyncAllRoomMessagesService: SyncAllRoomMessagesService,
|
||||||
private DownloadMessageAttachmentUserCaseService: DownloadMessageAttachmentUserCaseService,
|
private DownloadMessageAttachmentUserCaseService: DownloadMessageAttachmentUserCaseService,
|
||||||
private GetMessageAttachmentLocallyUseCaseService: GetMessageAttachmentLocallyUseCaseService
|
private GetMessageAttachmentLocallyUseCaseService: GetMessageAttachmentLocallyUseCaseService,
|
||||||
|
private GetRoomListUseCaseService: GetRoomListUseCaseService,
|
||||||
|
private GetRoomByIdUseCaseService: GetRoomByIdUseCaseService,
|
||||||
|
private DeleteRoomUseCaseService: DeleteRoomUseCaseService,
|
||||||
|
private CreateRoomUseCaseService: CreateRoomUseCaseService,
|
||||||
|
private RoomLeaveUseCase: RoomLeaveUseCase,
|
||||||
|
private AddMemberUseCaseService: AddMemberUseCaseService,
|
||||||
|
private UpdateRoomByIdUseCaseService: UpdateRoomByIdUseCaseService,
|
||||||
|
private RemoveMemberUseCaseService: RemoveMemberUseCaseService
|
||||||
) {
|
) {
|
||||||
this.messageLiveSignalRDataSourceService.getMessageDelete()
|
this.messageLiveSignalRDataSourceService.getMessageDelete()
|
||||||
.pipe()
|
.pipe()
|
||||||
@@ -76,13 +96,10 @@ export class ChatServiceService {
|
|||||||
return !message?.requestId?.startsWith(InstanceId)
|
return !message?.requestId?.startsWith(InstanceId)
|
||||||
})
|
})
|
||||||
).subscribe(async (message) => {
|
).subscribe(async (message) => {
|
||||||
|
|
||||||
if(message?.id) {
|
if(message?.id) {
|
||||||
console.log('create message')
|
console.log('create message')
|
||||||
this.SocketMessageCreateUseCaseService.execute(message)
|
this.SocketMessageCreateUseCaseService.execute(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
this.messageLiveSignalRDataSourceService.getData().pipe(
|
this.messageLiveSignalRDataSourceService.getData().pipe(
|
||||||
@@ -99,6 +116,15 @@ export class ChatServiceService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async start() {
|
||||||
|
await this.getRoomList();
|
||||||
|
this.asyncAllRoomMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
removeMemberToRoom(data: UserRemoveListInputDTO) {
|
||||||
|
return this.RemoveMemberUseCaseService.execute(data)
|
||||||
|
}
|
||||||
|
|
||||||
messageDelete(data: {roomId, messageId}) {
|
messageDelete(data: {roomId, messageId}) {
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
@@ -142,6 +168,39 @@ export class ChatServiceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getRoomList() {
|
||||||
|
return this.GetRoomListUseCaseService.execute()
|
||||||
|
}
|
||||||
|
|
||||||
|
getRoomById(id: string) {
|
||||||
|
return this.GetRoomByIdUseCaseService.execute(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
deleteRoomById(id: string) {
|
||||||
|
return this.DeleteRoomUseCaseService.execute(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
createRoom(data: RoomInputDTO) {
|
||||||
|
return this.CreateRoomUseCaseService.execute(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
leaveRoom(data: UserRemoveListInputDTO) {
|
||||||
|
return this.RoomLeaveUseCase.execute(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
addMemberToRoom(data: AddMemberToRoomInputDTO) {
|
||||||
|
return this.AddMemberUseCaseService.execute(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
updateRoomById(data: RoomUpdateInputDTO) {
|
||||||
|
return this.UpdateRoomByIdUseCaseService.execute(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
removeMember() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
listenToIncomingMessage(roomId:string) {
|
listenToIncomingMessage(roomId:string) {
|
||||||
return this.ListenMessageByRoomIdNewUseCase.execute({roomId})
|
return this.ListenMessageByRoomIdNewUseCase.execute({roomId})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
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-remote-repository.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class AddMemberUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@captureAndReraiseAsync('RoomRepositoryService/addMemberToRoom')
|
||||||
|
async execute(data: AddMemberToRoomInputDTO) {
|
||||||
|
|
||||||
|
// return this.roomLiveSignalRDataSourceService.addMemberToRoom(data)
|
||||||
|
|
||||||
|
const result = await this.roomRemoteDataSourceService.addMemberToRoom(data)
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { RoomRepositoryService } from '../../data/repository/room-repository.service';
|
|
||||||
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
||||||
|
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
|
||||||
|
|
||||||
// Define the schema for the entire response
|
// Define the schema for the entire response
|
||||||
const MemberSetAdminDTOSchema = z.object({
|
const MemberSetAdminDTOSchema = z.object({
|
||||||
@@ -18,12 +18,12 @@ export type MemberSetAdminDTO = z.infer<typeof MemberSetAdminDTOSchema>
|
|||||||
export class MemberAdminUseCaseService {
|
export class MemberAdminUseCaseService {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public repository: RoomRepositoryService
|
public repository: RoomRemoteDataSourceService
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
@ValidateSchema(MemberSetAdminDTOSchema)
|
@ValidateSchema(MemberSetAdminDTOSchema)
|
||||||
execute(input: MemberSetAdminDTO) {
|
execute(input: MemberSetAdminDTO) {
|
||||||
|
|
||||||
return this.repository.setAdmin(input)
|
return this.repository.setAmin(input)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
|
||||||
|
import { UserRemoveListInputDTO } from '../../../data/dto/room/userRemoveListInputDTO';
|
||||||
|
import { RoomRemoteDataSourceService } from '../../../data/repository/room-remote-repository.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class RemoveMemberUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
|
||||||
|
@captureAndReraiseAsync('RoomRepositoryService/removeMemberToRoom')
|
||||||
|
async execute(data: UserRemoveListInputDTO) {
|
||||||
|
const result = await this.roomRemoteDataSourceService.removeMemberFromRoom(data)
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,12 @@ import { InstanceId } from '../chat-service.service';
|
|||||||
import { createDataURL } from 'src/app/utils/ToBase64';
|
import { createDataURL } from 'src/app/utils/ToBase64';
|
||||||
import { zodSafeValidation } from 'src/app/utils/zodValidation';
|
import { zodSafeValidation } from 'src/app/utils/zodValidation';
|
||||||
import { Logger } from 'src/app/services/logger/main/service';
|
import { Logger } from 'src/app/services/logger/main/service';
|
||||||
import { MessageAttachmentSource } from '../../data/dto/message/messageOutputDTO';
|
import { MessageAttachmentSource, MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO';
|
||||||
|
import { MessageLocalDataSourceService } from '../../data/data-source/message/message-local-data-source.service';
|
||||||
|
import { err } from 'neverthrow';
|
||||||
|
import { MessageTable } from '../../infra/database/dexie/schema/message';
|
||||||
|
import { MessageMapper } from '../mapper/messageMapper';
|
||||||
|
import { SignalRService } from '../../infra/socket/signal-r.service';
|
||||||
|
|
||||||
const MessageInputUseCaseSchema = z.object({
|
const MessageInputUseCaseSchema = z.object({
|
||||||
memberId: z.number(),
|
memberId: z.number(),
|
||||||
@@ -26,6 +31,8 @@ export class MessageCreateUseCaseService {
|
|||||||
constructor(
|
constructor(
|
||||||
private MessageRepositoryService: MessageRepositoryService,
|
private MessageRepositoryService: MessageRepositoryService,
|
||||||
private AttachmentRepositoryService: AttachmentRepositoryService,
|
private AttachmentRepositoryService: AttachmentRepositoryService,
|
||||||
|
private messageLocalDataSourceService: MessageLocalDataSourceService,
|
||||||
|
private messageLiveSignalRDataSourceService: SignalRService,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
|
|
||||||
@@ -38,9 +45,13 @@ export class MessageCreateUseCaseService {
|
|||||||
|
|
||||||
message.requestId = InstanceId +'@'+ uuidv4();
|
message.requestId = InstanceId +'@'+ uuidv4();
|
||||||
|
|
||||||
const createMessageLocally = await this.MessageRepositoryService.createMessageLocally(message)
|
|
||||||
|
const createMessageLocally = await this.messageLocalDataSourceService.sendMessage(message)
|
||||||
|
|
||||||
if(createMessageLocally.isOk()) {
|
if(createMessageLocally.isOk()) {
|
||||||
|
|
||||||
|
message.$id = createMessageLocally.value
|
||||||
|
|
||||||
if(message.hasAttachment) {
|
if(message.hasAttachment) {
|
||||||
|
|
||||||
for (const attachment of message.attachments) {
|
for (const attachment of message.attachments) {
|
||||||
@@ -48,7 +59,7 @@ export class MessageCreateUseCaseService {
|
|||||||
if(attachment.source != MessageAttachmentSource.Webtrix) {
|
if(attachment.source != MessageAttachmentSource.Webtrix) {
|
||||||
|
|
||||||
this.AttachmentRepositoryService.create({
|
this.AttachmentRepositoryService.create({
|
||||||
$messageId: createMessageLocally.value.$id,
|
$messageId: createMessageLocally.value,
|
||||||
file: createDataURL(attachment.file, attachment.mimeType),
|
file: createDataURL(attachment.file, attachment.mimeType),
|
||||||
fileType: attachment.fileType,
|
fileType: attachment.fileType,
|
||||||
source: attachment.source,
|
source: attachment.source,
|
||||||
@@ -72,20 +83,36 @@ export class MessageCreateUseCaseService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const sendToServer = await this.MessageRepositoryService.sendMessage(message)
|
//====================
|
||||||
|
message.sending = true
|
||||||
|
|
||||||
if(!sendToServer.isOk()) {
|
const DTO = MessageMapper.fromDomain(message, message.requestId)
|
||||||
|
const sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO)
|
||||||
|
// return this sendMessageResult
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.messageLocalDataSourceService.update(message.$id, {...clone, sending: false, roomId: message.roomId})
|
||||||
|
} else {
|
||||||
Logger.error('failed to send message to the server', {
|
Logger.error('failed to send message to the server', {
|
||||||
error: sendToServer.error
|
error: sendMessageResult.error
|
||||||
})
|
})
|
||||||
|
await this.messageLocalDataSourceService.update(message.$id, {sending: false, $id: message.$id})
|
||||||
|
return err('no connection')
|
||||||
}
|
}
|
||||||
|
|
||||||
return sendToServer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await this.MessageRepositoryService.sendMessage(message)
|
|
||||||
|
|
||||||
return result
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if(validation.error.formErrors.fieldErrors.attachments) {
|
if(validation.error.formErrors.fieldErrors.attachments) {
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { create } from 'domain';
|
||||||
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
|
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
|
||||||
|
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
|
||||||
|
import { RoomInputDTO } from '../../data/dto/room/roomInputDTO';
|
||||||
|
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class CreateRoomUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
|
||||||
|
@captureAndReraiseAsync('RoomRepositoryService/create')
|
||||||
|
async execute(data: RoomInputDTO) {
|
||||||
|
|
||||||
|
const result = await this.roomRemoteDataSourceService.createRoom(data)
|
||||||
|
if(result.isOk()) {
|
||||||
|
|
||||||
|
if(!result.value.data.createdBy) {
|
||||||
|
|
||||||
|
let dataObject;
|
||||||
|
|
||||||
|
result.value.data.createdBy = {
|
||||||
|
wxeMail: SessionStore.user.Email,
|
||||||
|
wxFullName: SessionStore.user.FullName,
|
||||||
|
wxUserId: SessionStore.user.UserId,
|
||||||
|
}
|
||||||
|
|
||||||
|
dataObject = result.value.data
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const localResult = await this.roomLocalDataSourceService.createRoom(result.value.data)
|
||||||
|
return localResult.map(e => result.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
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-remote-repository.service';
|
||||||
|
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class DeleteRoomUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
// private roomMemoryDataSourceService: Store<RoomRemoteDataSourceState>,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
|
||||||
|
@captureAndReraiseAsync('RoomRepositoryService/deleteRoomById')
|
||||||
|
async execute(id: RoomByIdInputDTO) {
|
||||||
|
const result = await this.roomRemoteDataSourceService.deleteRoom(id)
|
||||||
|
|
||||||
|
if(result.isOk()) {
|
||||||
|
|
||||||
|
const result = await this.roomLocalDataSourceService.deleteRoomById(id)
|
||||||
|
// this.messageLiveDataSourceService.sendMessage({
|
||||||
|
// type: 'createRoom',
|
||||||
|
// payload: {a: '5'}
|
||||||
|
// })
|
||||||
|
|
||||||
|
return result
|
||||||
|
} else if (isHttpResponse(result.error)) {
|
||||||
|
if(result.error.status == 404) {
|
||||||
|
await this.roomLocalDataSourceService.deleteRoomById(id)
|
||||||
|
}
|
||||||
|
// this.httpErrorHandle.httpStatusHandle(result.error)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
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-remote-repository.service';
|
||||||
|
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
|
||||||
|
import { MemberListLocalRepository } from '../../data/repository/member-list-local-repository.service';
|
||||||
|
import { MemberListMapper } from '../mapper/memberLIstMapper';
|
||||||
|
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class GetRoomByIdUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
// private roomMemoryDataSourceService: Store<RoomRemoteDataSourceState>,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
|
private MemberListLocalRepository: MemberListLocalRepository
|
||||||
|
) { }
|
||||||
|
|
||||||
|
@captureAndReraiseAsync('RoomRepositoryService/getRoomById')
|
||||||
|
async execute(id: string) {
|
||||||
|
const result = await this.roomRemoteDataSourceService.getRoom(id)
|
||||||
|
|
||||||
|
if(result.isOk()) {
|
||||||
|
|
||||||
|
const localListRoom = await this.roomLocalDataSourceService.getRoomList()
|
||||||
|
if(localListRoom.isOk()) {
|
||||||
|
const object = {
|
||||||
|
chatRoom: result.value.data
|
||||||
|
}
|
||||||
|
const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([object], localListRoom.value)
|
||||||
|
|
||||||
|
for( const roomData of roomsToUpdate) {
|
||||||
|
this.roomLocalDataSourceService.updateRoom(roomData.chatRoom)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================
|
||||||
|
const localList = await this.MemberListLocalRepository.getRoomMemberById(id)
|
||||||
|
|
||||||
|
const { membersToInsert, membersToUpdate, membersToDelete } = roomMemberListDetermineChanges(result.value.data.members, localList, id)
|
||||||
|
|
||||||
|
for (const user of membersToInsert) {
|
||||||
|
await this.MemberListLocalRepository.addMember(MemberListMapper(user, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const user of membersToUpdate) {
|
||||||
|
await this.MemberListLocalRepository.updateMemberRole(MemberListMapper(user, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
for(const user of membersToDelete) {
|
||||||
|
await this.MemberListLocalRepository.removeMemberFromRoom(user.$roomIdUserId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else if (isHttpResponse(result.error) ) {
|
||||||
|
if(result.error.status == 404) {
|
||||||
|
await this.roomLocalDataSourceService.deleteRoomById(id)
|
||||||
|
}
|
||||||
|
// this.httpErrorHandle.httpStatusHandle(result.error)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { roomListDetermineChanges } from '../../data/async/list/rooms/roomListChangeDetector';
|
||||||
|
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
|
||||||
|
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
|
||||||
|
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
|
||||||
|
import { isHttpResponse } from 'src/app/services/http.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class GetRoomListUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
// private roomMemoryDataSourceService: Store<RoomRemoteDataSourceState>,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
@captureAndReraiseAsync('RoomRepositoryService/list')
|
||||||
|
async execute() {
|
||||||
|
const result = await this.roomRemoteDataSourceService.getRoomList()
|
||||||
|
|
||||||
|
const localList = await this.roomLocalDataSourceService.getRoomList()
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
for( const roomData of roomsToUpdate) {
|
||||||
|
this.roomLocalDataSourceService.updateRoom(roomData.chatRoom)
|
||||||
|
}
|
||||||
|
|
||||||
|
for( const roomData of roomsToDelete) {
|
||||||
|
this.roomLocalDataSourceService.deleteRoomById(roomData.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { UserRemoveListInputDTO } from '../../data/dto/room/userRemoveListInputDTO';
|
||||||
|
import { isHttpResponse } from 'src/app/services/http.service';
|
||||||
|
import { RoomRemoteDataSourceService } from '../../data/repository/room-remote-repository.service';
|
||||||
|
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class RoomLeaveUseCase {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async execute(data: UserRemoveListInputDTO) {
|
||||||
|
const result = await this.roomRemoteDataSourceService.removeMemberFromRoom(data)
|
||||||
|
|
||||||
|
if(result.isOk()) {
|
||||||
|
this.roomLocalDataSourceService.leaveRoom(data.id)
|
||||||
|
} else if (isHttpResponse(result.error)) {
|
||||||
|
if(result.error.status == 404) {
|
||||||
|
await this.roomLocalDataSourceService.deleteRoomById(data.id)
|
||||||
|
|
||||||
|
}
|
||||||
|
// this.httpErrorHandle.httpStatusHandle(result.error)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
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-remote-repository.service';
|
||||||
|
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class UpdateRoomByIdUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private roomRemoteDataSourceService: RoomRemoteDataSourceService,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
|
||||||
|
@captureAndReraiseAsync('RoomRepositoryService/updateRoomBy')
|
||||||
|
async execute(data: RoomUpdateInputDTO) {
|
||||||
|
|
||||||
|
const result = await this.roomRemoteDataSourceService.updateRoom(data)
|
||||||
|
|
||||||
|
if(result.isOk()) {
|
||||||
|
const localList = await this.roomLocalDataSourceService.getRoomList()
|
||||||
|
// const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([result.value.data], localList)
|
||||||
|
|
||||||
|
// for( const roomData of roomsToUpdate) {
|
||||||
|
// if(!roomData.chatRoom.createdBy?.wxUserId) {
|
||||||
|
// delete roomData.chatRoom.createdBy;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// this.roomLocalDataSourceService.updateRoom(roomData.chatRoom)
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-4
@@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator';
|
||||||
|
import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service'
|
||||||
|
|
||||||
export const MemberListUPdateStatus = z.object({
|
export const MemberListUPdateStatus = z.object({
|
||||||
key: z.string(),
|
key: z.string(),
|
||||||
@@ -19,13 +19,12 @@ export type MemberListUPdateStatusInputDTO = z.infer<typeof MemberListUPdateStat
|
|||||||
export class MemberListUpdateStatusUseCaseService {
|
export class MemberListUpdateStatusUseCaseService {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private RoomRepositoryService: RoomRepositoryService
|
private MemberListLocalRepository: MemberListLocalRepository
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
|
|
||||||
@ValidateSchema(MemberListUPdateStatus)
|
@ValidateSchema(MemberListUPdateStatus)
|
||||||
execute(input: MemberListUPdateStatusInputDTO) {
|
execute(input: MemberListUPdateStatusInputDTO) {
|
||||||
console.log
|
return this.MemberListLocalRepository.updateMembersStatus(input)
|
||||||
return this.RoomRepositoryService.updateMemberStatus(input)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
import { MessageLocalDataSourceService } from '../../data/data-source/message/message-local-data-source.service';
|
||||||
import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service'
|
import { messageListDetermineChanges } from '../../data/async/list/rooms/messageListChangedetector';
|
||||||
import { RoomTable } from '../../infra/database/dexie/schema/room';
|
import { MessageTable } from '../../infra/database/dexie/schema/message';
|
||||||
|
import { MessageRemoteDataSourceService } from '../../data/data-source/message/message-remote-data-source.service';
|
||||||
|
import { ok } from 'neverthrow';
|
||||||
|
import { RoomLocalRepository } from '../../data/repository/room-local-repository.service';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
@@ -9,24 +12,54 @@ import { RoomTable } from '../../infra/database/dexie/schema/room';
|
|||||||
export class SyncAllRoomMessagesService {
|
export class SyncAllRoomMessagesService {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private RoomRepositoryService: RoomRepositoryService,
|
private messageLocalDataSourceService: MessageLocalDataSourceService,
|
||||||
private MessageRepositoryService: MessageRepositoryService
|
private messageRemoteDataSourceService: MessageRemoteDataSourceService,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
async execute() {
|
async execute() {
|
||||||
|
|
||||||
await this.RoomRepositoryService.list()
|
const allRooms = await this.roomLocalDataSourceService.findAll()
|
||||||
const allRooms: RoomTable[] = await this.RoomRepositoryService.getRoomList()
|
|
||||||
|
|
||||||
if(allRooms) {
|
if(allRooms.isOk()) {
|
||||||
if(allRooms.length == 0) {
|
if(allRooms.value.length == 0) {
|
||||||
console.log('no room to sync')
|
console.log('no room to sync')
|
||||||
}
|
|
||||||
for(const room of allRooms) {
|
|
||||||
this.MessageRepositoryService.listAllMessagesByRoomId(room.id)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
console.log('get all error', allRooms)
|
console.log('sync '+ allRooms.value.length)
|
||||||
|
}
|
||||||
|
for(const room of allRooms.value) {
|
||||||
|
const result = await this.messageRemoteDataSourceService.getMessagesFromRoom(room.id)
|
||||||
|
const localResult = await this.messageLocalDataSourceService.getItems(room.id)
|
||||||
|
|
||||||
|
if(result.isOk()) {
|
||||||
|
|
||||||
|
const { addedItems, changedItems, deletedItems } = messageListDetermineChanges(result.value.data, localResult)
|
||||||
|
|
||||||
|
for(const message of changedItems) {
|
||||||
|
let clone: MessageTable = message
|
||||||
|
clone.roomId = room.id
|
||||||
|
this.messageLocalDataSourceService.findOrUpdate(clone)
|
||||||
|
}
|
||||||
|
|
||||||
|
for(const message of addedItems) {
|
||||||
|
let clone: MessageTable = message
|
||||||
|
clone.roomId = room.id
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this.messageLocalDataSourceService.createManyMessage(addedItems.reverse())
|
||||||
|
|
||||||
|
|
||||||
|
for(const message of deletedItems) {
|
||||||
|
this.messageLocalDataSourceService.deleteByMessageId(message.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok(true)
|
||||||
|
} else {
|
||||||
|
console.log('sync all error', allRooms)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { SignalRService } from '../../infra/socket/signal-r.service';
|
||||||
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class SendTypingUseCaseService {
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private messageLiveSignalRDataSourceService: SignalRService,
|
||||||
|
) { }
|
||||||
|
|
||||||
|
|
||||||
|
execute(roomId) {
|
||||||
|
return this.messageLiveSignalRDataSourceService.sendTyping({
|
||||||
|
roomId,
|
||||||
|
UserName:SessionStore.user.FullName,
|
||||||
|
userId: SessionStore.user.UserId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@ import { v4 as uuidv4 } from 'uuid'
|
|||||||
import { UserTypingDTO } from '../../data/dto/typing/typingInputDTO';
|
import { UserTypingDTO } from '../../data/dto/typing/typingInputDTO';
|
||||||
import { MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO';
|
import { MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO';
|
||||||
import { MessageDeleteInputDTO } from '../../data/dto/message/messageDeleteInputDTO';
|
import { MessageDeleteInputDTO } from '../../data/dto/message/messageDeleteInputDTO';
|
||||||
import { MessageReactionInput } from '../../domain/use-case/message-reaction-use-case.service';
|
import { MessageReactionInput } from '../../domain/use-case/message-reaction-by-id-use-case.service';
|
||||||
import { ISignalRInput } from './signal-r.service';
|
import { ISignalRInput } from './signal-r.service';
|
||||||
|
|
||||||
export class SignalRConnection {
|
export class SignalRConnection {
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ export class LoginPage implements OnInit {
|
|||||||
this.changeProfileService.run();
|
this.changeProfileService.run();
|
||||||
|
|
||||||
this.changeProfileService.runLogin();
|
this.changeProfileService.runLogin();
|
||||||
this.ChatServiceService.asyncAllRoomMessage()
|
this.ChatServiceService.start()
|
||||||
this.getToken();
|
this.getToken();
|
||||||
SessionStore.setInativity(true);
|
SessionStore.setInativity(true);
|
||||||
SessionStore.hasPassLogin = true;
|
SessionStore.hasPassLogin = true;
|
||||||
@@ -158,7 +158,7 @@ export class LoginPage implements OnInit {
|
|||||||
|
|
||||||
this.storageService.remove("Notifications")
|
this.storageService.remove("Notifications")
|
||||||
|
|
||||||
this.ChatServiceService.asyncAllRoomMessage()
|
this.ChatServiceService.start()
|
||||||
this.getToken();
|
this.getToken();
|
||||||
|
|
||||||
if (!this.platform.is('desktop') && !this.platform.is('mobileweb')) {
|
if (!this.platform.is('desktop') && !this.platform.is('mobileweb')) {
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ const routes: Routes = [
|
|||||||
path: 'edit-group',
|
path: 'edit-group',
|
||||||
loadChildren: () => import('./component/edit-group/edit-group.module').then( m => m.EditGroupPageModule)
|
loadChildren: () => import('./component/edit-group/edit-group.module').then( m => m.EditGroupPageModule)
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'set-room-owner',
|
||||||
|
loadChildren: () => import('./modal/set-room-owner/set-room-owner.module').then( m => m.SetRoomOwnerPageModule)
|
||||||
|
},
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -13,11 +13,13 @@ import { TimeService } from 'src/app/services/functions/time.service';
|
|||||||
import { ThemeService } from 'src/app/services/theme.service'
|
import { ThemeService } from 'src/app/services/theme.service'
|
||||||
import { DataService } from 'src/app/services/data.service';
|
import { DataService } from 'src/app/services/data.service';
|
||||||
import { RouteService } from 'src/app/services/route.service';
|
import { RouteService } from 'src/app/services/route.service';
|
||||||
import { RoomRemoteDataSourceState } from 'src/app/module/chat/data/data-source/room/room-memory-data-source';
|
// import { RoomRemoteDataSourceState } from 'src/app/module/chat/data/repository/room-memory-data-source';
|
||||||
import { RoomListOutPutDTO } from 'src/app/module/chat/data/dto/room/roomListOutputDTO';
|
import { RoomListOutPutDTO } from 'src/app/module/chat/data/dto/room/roomListOutputDTO';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
import { Observable as DexieObservable } from 'Dexie';
|
import { Observable as DexieObservable } from 'Dexie';
|
||||||
import { EditGroupPage } from './modal/edit-group/edit-group.page';
|
import { EditGroupPage } from './modal/edit-group/edit-group.page';
|
||||||
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
||||||
|
import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room-local-repository.service'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-chat',
|
selector: 'app-chat',
|
||||||
@@ -49,7 +51,7 @@ export class ChatPage implements OnInit {
|
|||||||
|
|
||||||
routerSubscription
|
routerSubscription
|
||||||
|
|
||||||
count$: Observable<RoomRemoteDataSourceState>;
|
// count$: Observable<RoomRemoteDataSourceState>;
|
||||||
items$!: DexieObservable<RoomListOutPutDTO[]>;
|
items$!: DexieObservable<RoomListOutPutDTO[]>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@@ -59,7 +61,8 @@ export class ChatPage implements OnInit {
|
|||||||
private dataService: DataService,
|
private dataService: DataService,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
public RouteService: RouteService,
|
public RouteService: RouteService,
|
||||||
private RoomRepositoryService: RoomRepositoryService,
|
private ChatServiceService: ChatServiceService,
|
||||||
|
private roomLocalDataSourceService: RoomLocalRepository,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
||||||
@@ -78,8 +81,8 @@ export class ChatPage implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
|
||||||
this.items$ = this.RoomRepositoryService.getItemsLive()
|
this.items$ = this.roomLocalDataSourceService.getItemsLive()
|
||||||
this.RoomRepositoryService.list();
|
this.ChatServiceService.getRoomList()
|
||||||
|
|
||||||
this.hideRefreshButton();
|
this.hideRefreshButton();
|
||||||
|
|
||||||
@@ -93,7 +96,7 @@ export class ChatPage implements OnInit {
|
|||||||
this.routerSubscription = this.router.events.subscribe((event) => {
|
this.routerSubscription = this.router.events.subscribe((event) => {
|
||||||
if (event instanceof NavigationEnd && event.url.startsWith('/home/chat')) {
|
if (event instanceof NavigationEnd && event.url.startsWith('/home/chat')) {
|
||||||
this.routeCheck()
|
this.routeCheck()
|
||||||
this.RoomRepositoryService.list();
|
this.ChatServiceService.getRoomList()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ import { HttpResponse } from '@microsoft/signalr';
|
|||||||
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
||||||
import { ToastService } from 'src/app/services/toast.service';
|
import { ToastService } from 'src/app/services/toast.service';
|
||||||
import { ZodError } from 'zod';
|
import { ZodError } from 'zod';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -33,9 +34,9 @@ export class EditGroupPage implements OnInit {
|
|||||||
private modalController: ModalController,
|
private modalController: ModalController,
|
||||||
private pickerController: PickerController,
|
private pickerController: PickerController,
|
||||||
public ThemeService: ThemeService,
|
public ThemeService: ThemeService,
|
||||||
private RoomRepositoryService: RoomRepositoryService,
|
|
||||||
private httpErrorHandle: HttpErrorHandle,
|
private httpErrorHandle: HttpErrorHandle,
|
||||||
private toastService: ToastService,
|
private toastService: ToastService,
|
||||||
|
private chatServiceService: ChatServiceService,
|
||||||
) {
|
) {
|
||||||
this.loggedUser = SessionStore.user.ChatData['data'];
|
this.loggedUser = SessionStore.user.ChatData['data'];
|
||||||
}
|
}
|
||||||
@@ -67,7 +68,7 @@ export class EditGroupPage implements OnInit {
|
|||||||
async changeGroupName() {
|
async changeGroupName() {
|
||||||
|
|
||||||
this.showLoader = true
|
this.showLoader = true
|
||||||
const result = await this.RoomRepositoryService.updateRoomBy({
|
const result = await this.chatServiceService.updateRoomById({
|
||||||
roomId: this.roomId,
|
roomId: this.roomId,
|
||||||
roomName: this.groupName,
|
roomName: this.groupName,
|
||||||
roomType: 0
|
roomType: 0
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
|||||||
import { ThemeService } from 'src/app/services/theme.service'
|
import { ThemeService } from 'src/app/services/theme.service'
|
||||||
import { ContactRepositoryService } from 'src/app/services/Repositorys/contacts/repository/contacts-repository.service';
|
import { ContactRepositoryService } from 'src/app/services/Repositorys/contacts/repository/contacts-repository.service';
|
||||||
import { UserContacts } from 'src/app/services/Repositorys/contacts/data-source/contacts-data-source.service';
|
import { UserContacts } from 'src/app/services/Repositorys/contacts/data-source/contacts-data-source.service';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
|
|
||||||
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
||||||
import { SessionStore } from 'src/app/store/session.service';
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
import { HttpRequest } from '@angular/common/http';
|
import { HttpRequest } from '@angular/common/http';
|
||||||
import { ZodError } from 'zod';
|
import { ZodError } from 'zod';
|
||||||
import { HttpResponse } from '@microsoft/signalr';
|
import { HttpResponse } from '@microsoft/signalr';
|
||||||
import { ToastService } from 'src/app/services/toast.service';
|
import { ToastService } from 'src/app/services/toast.service';
|
||||||
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service';
|
||||||
|
import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-group-contacts',
|
selector: 'app-group-contacts',
|
||||||
@@ -35,9 +35,10 @@ export class GroupContactsPage implements OnInit {
|
|||||||
constructor(
|
constructor(
|
||||||
public ThemeService: ThemeService,
|
public ThemeService: ThemeService,
|
||||||
private contactsRepositoryService: ContactRepositoryService,
|
private contactsRepositoryService: ContactRepositoryService,
|
||||||
private RoomRepositoryService: RoomRepositoryService,
|
|
||||||
private httpErrorHandle: HttpErrorHandle,
|
private httpErrorHandle: HttpErrorHandle,
|
||||||
private toastService: ToastService,
|
private toastService: ToastService,
|
||||||
|
private chatServiceService: ChatServiceService,
|
||||||
|
private MemberListLocalRepository: MemberListLocalRepository,
|
||||||
){}
|
){}
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
@@ -52,7 +53,7 @@ export class GroupContactsPage implements OnInit {
|
|||||||
|
|
||||||
if(this.hasMemberToUpload) {
|
if(this.hasMemberToUpload) {
|
||||||
this.showLoader = true;
|
this.showLoader = true;
|
||||||
const addMembers = await this.RoomRepositoryService.addMemberToRoom({
|
const addMembers = await this.chatServiceService.addMemberToRoom({
|
||||||
id: this.roomId,
|
id: this.roomId,
|
||||||
members: this.selectedUsers
|
members: this.selectedUsers
|
||||||
})
|
})
|
||||||
@@ -62,7 +63,7 @@ export class GroupContactsPage implements OnInit {
|
|||||||
console.log('addMembers', addMembers)
|
console.log('addMembers', addMembers)
|
||||||
// this.addContacts(this.roomId);
|
// this.addContacts(this.roomId);
|
||||||
this.openGroupMessage.emit(this.roomId);
|
this.openGroupMessage.emit(this.roomId);
|
||||||
this.RoomRepositoryService.getRoomById(this.roomId);
|
this.chatServiceService.getRoomById(this.roomId);
|
||||||
} else if(addMembers.error instanceof HttpRequest) {
|
} else if(addMembers.error instanceof HttpRequest) {
|
||||||
this.httpErrorHandle.httpStatusHandle(addMembers.error)
|
this.httpErrorHandle.httpStatusHandle(addMembers.error)
|
||||||
}
|
}
|
||||||
@@ -80,7 +81,7 @@ export class GroupContactsPage implements OnInit {
|
|||||||
async loadUsers() {
|
async loadUsers() {
|
||||||
|
|
||||||
const getallChatUsers = await this.contactsRepositoryService.getUsers()
|
const getallChatUsers = await this.contactsRepositoryService.getUsers()
|
||||||
const getRoomById = await this.RoomRepositoryService.getRoomById(this.roomId)
|
const getRoomById = await this.chatServiceService.getRoomById(this.roomId)
|
||||||
|
|
||||||
console.log({getallChatUsers, getRoomById})
|
console.log({getallChatUsers, getRoomById})
|
||||||
|
|
||||||
@@ -96,7 +97,7 @@ export class GroupContactsPage implements OnInit {
|
|||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
const currentMemberToMap = await this.RoomRepositoryService.getRoomMemberById(this.roomId)
|
const currentMemberToMap = await this.MemberListLocalRepository.getRoomMemberById(this.roomId)
|
||||||
|
|
||||||
console.log({currentMemberToMap})
|
console.log({currentMemberToMap})
|
||||||
|
|
||||||
@@ -195,7 +196,7 @@ export class GroupContactsPage implements OnInit {
|
|||||||
async deleteMember(user: UserContacts) {
|
async deleteMember(user: UserContacts) {
|
||||||
this.showLoader = true;
|
this.showLoader = true;
|
||||||
|
|
||||||
const result = await this.RoomRepositoryService.removeMemberToRoom({
|
const result = await this.chatServiceService.removeMemberToRoom({
|
||||||
id: this.roomId,
|
id: this.roomId,
|
||||||
members: [ user.wxUserId]
|
members: [ user.wxUserId]
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ import { ThemeService } from 'src/app/services/theme.service'
|
|||||||
import { SessionStore } from 'src/app/store/session.service';
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
import { ContactRepositoryService } from 'src/app/services/Repositorys/contacts/repository/contacts-repository.service';
|
import { ContactRepositoryService } from 'src/app/services/Repositorys/contacts/repository/contacts-repository.service';
|
||||||
import { UserContacts } from 'src/app/services/Repositorys/contacts/data-source/contacts-data-source.service';
|
import { UserContacts } from 'src/app/services/Repositorys/contacts/data-source/contacts-data-source.service';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
import { HttpErrorResponse } from '@angular/common/http';
|
import { HttpErrorResponse } from '@angular/common/http';
|
||||||
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
||||||
import { ToastService } from 'src/app/services/toast.service';
|
import { ToastService } from 'src/app/services/toast.service';
|
||||||
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
||||||
|
|
||||||
|
|
||||||
class UserToSelect {
|
class UserToSelect {
|
||||||
|
|
||||||
@@ -48,9 +50,9 @@ export class ContactsPage implements OnInit {
|
|||||||
public ThemeService: ThemeService,
|
public ThemeService: ThemeService,
|
||||||
// public ChatSystemService: ChatSystemService,
|
// public ChatSystemService: ChatSystemService,
|
||||||
private contactsRepositoryService: ContactRepositoryService,
|
private contactsRepositoryService: ContactRepositoryService,
|
||||||
private roomRepositoryService: RoomRepositoryService,
|
|
||||||
private httpErrorHandle: HttpErrorHandle,
|
private httpErrorHandle: HttpErrorHandle,
|
||||||
private toastService: ToastService,
|
private toastService: ToastService,
|
||||||
|
private ChatServiceService: ChatServiceService
|
||||||
) {
|
) {
|
||||||
this.loggedUser = SessionStore.user.ChatData['data'];
|
this.loggedUser = SessionStore.user.ChatData['data'];
|
||||||
this.textSearch = "";
|
this.textSearch = "";
|
||||||
@@ -152,7 +154,7 @@ export class ContactsPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async createRoom(username: string, wxUserId: number) {
|
async createRoom(username: string, wxUserId: number) {
|
||||||
const result = await this.roomRepositoryService.create({
|
const result = await this.ChatServiceService.createRoom({
|
||||||
roomName: username,
|
roomName: username,
|
||||||
createdBy: SessionStore.user.UserId,
|
createdBy: SessionStore.user.UserId,
|
||||||
roomType: 0,
|
roomType: 0,
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ import { PermissionService } from 'src/app/services/permission.service';
|
|||||||
import { Observable as DexieObservable } from 'Dexie';
|
import { Observable as DexieObservable } from 'Dexie';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service'
|
import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service'
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.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 { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message';
|
||||||
import { RoomListItemOutPutDTO } from 'src/app/module/chat/data/dto/room/roomListOutputDTO';
|
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 { UserTypingServiceRepository } from 'src/app/module/chat/data/repository/user-typing-repository.service';
|
||||||
@@ -148,7 +149,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
private platform: Platform,
|
private platform: Platform,
|
||||||
private fileOpener: FileOpener,
|
private fileOpener: FileOpener,
|
||||||
public p: PermissionService,
|
public p: PermissionService,
|
||||||
private roomRepositoryService: RoomRepositoryService,
|
private MemberListLocalRepository: MemberListLocalRepository,
|
||||||
private messageRepositoryService: MessageRepositoryService,
|
private messageRepositoryService: MessageRepositoryService,
|
||||||
private userTypingServiceRepository: UserTypingServiceRepository,
|
private userTypingServiceRepository: UserTypingServiceRepository,
|
||||||
private chatServiceService: ChatServiceService,
|
private chatServiceService: ChatServiceService,
|
||||||
@@ -156,6 +157,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
private FilePickerWebService: FilePickerWebService,
|
private FilePickerWebService: FilePickerWebService,
|
||||||
private FilePickerService: FilePickerService,
|
private FilePickerService: FilePickerService,
|
||||||
private SpeakerService: SpeakerService,
|
private SpeakerService: SpeakerService,
|
||||||
|
private RoomLocalRepository: RoomLocalRepository
|
||||||
) {
|
) {
|
||||||
// update
|
// update
|
||||||
this.checkAudioPermission()
|
this.checkAudioPermission()
|
||||||
@@ -164,7 +166,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
ngOnChanges(changes: SimpleChanges): void {
|
ngOnChanges(changes: SimpleChanges): void {
|
||||||
|
|
||||||
|
|
||||||
this.roomData$ = this.roomRepositoryService.getItemByIdLive(this.roomId)
|
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
|
||||||
this.getMessages();
|
this.getMessages();
|
||||||
this.listenToIncomingMessage();
|
this.listenToIncomingMessage();
|
||||||
this.listenToDeleteMessage();
|
this.listenToDeleteMessage();
|
||||||
@@ -172,9 +174,9 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
this.listenToSendMessage()
|
this.listenToSendMessage()
|
||||||
|
|
||||||
// this.roomMessage$ = this.messageRepositoryService.getItemsLive(this.roomId)
|
// this.roomMessage$ = this.messageRepositoryService.getItemsLive(this.roomId)
|
||||||
this.roomMembers$ = this.roomRepositoryService.getRoomMemberByIdLive(this.roomId) as any
|
this.roomMembers$ = this.MemberListLocalRepository.getRoomMemberByIdLive(this.roomId) as any
|
||||||
this.roomStatus$ = this.roomRepositoryService.getRoomStatus(this.roomId)
|
this.roomStatus$ = this.MemberListLocalRepository.allMemberOnline(this.roomId)
|
||||||
this.roomRepositoryService.getRoomById(this.roomId)
|
this.chatServiceService.getRoomById(this.roomId)
|
||||||
|
|
||||||
this.userTypingServiceRepository.getUserTypingLive().subscribe((e) => {
|
this.userTypingServiceRepository.getUserTypingLive().subscribe((e) => {
|
||||||
const arrayNames = e.map(e => e.userName)
|
const arrayNames = e.map(e => e.userName)
|
||||||
|
|||||||
@@ -7,8 +7,9 @@ import { SessionStore } from 'src/app/store/session.service';
|
|||||||
import { ThemeService } from 'src/app/services/theme.service';
|
import { ThemeService } from 'src/app/services/theme.service';
|
||||||
import { RouteService } from 'src/app/services/route.service';
|
import { RouteService } from 'src/app/services/route.service';
|
||||||
import { HttpErrorResponse } from '@angular/common/http';
|
import { HttpErrorResponse } from '@angular/common/http';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'
|
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'
|
||||||
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-new-group',
|
selector: 'app-new-group',
|
||||||
@@ -50,8 +51,8 @@ export class NewGroupPage implements OnInit{
|
|||||||
public ThemeService: ThemeService,
|
public ThemeService: ThemeService,
|
||||||
private RouteService: RouteService,
|
private RouteService: RouteService,
|
||||||
private viewContainerRef: ViewContainerRef,
|
private viewContainerRef: ViewContainerRef,
|
||||||
private roomRepositoryService: RoomRepositoryService,
|
|
||||||
private httpErrorHandle: HttpErrorHandle,
|
private httpErrorHandle: HttpErrorHandle,
|
||||||
|
private ChatServiceService: ChatServiceService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.loggedUserChat = SessionStore.user.ChatData['data'];
|
this.loggedUserChat = SessionStore.user.ChatData['data'];
|
||||||
@@ -119,7 +120,7 @@ export class NewGroupPage implements OnInit{
|
|||||||
}
|
}
|
||||||
|
|
||||||
async createGroup1() {
|
async createGroup1() {
|
||||||
const result = await this.roomRepositoryService.create({
|
const result = await this.ChatServiceService.createRoom({
|
||||||
roomName: this.groupName,
|
roomName: this.groupName,
|
||||||
createdBy: SessionStore.user.UserId,
|
createdBy: SessionStore.user.UserId,
|
||||||
roomType: 0,
|
roomType: 0,
|
||||||
|
|||||||
@@ -2,12 +2,13 @@ import { Component, OnInit } from '@angular/core';
|
|||||||
import { ModalController, NavParams, PopoverController } from '@ionic/angular';
|
import { ModalController, NavParams, PopoverController } from '@ionic/angular';
|
||||||
import { ToastService } from 'src/app/services/toast.service';
|
import { ToastService } from 'src/app/services/toast.service';
|
||||||
import { ThemeService } from 'src/app/services/theme.service'
|
import { ThemeService } from 'src/app/services/theme.service'
|
||||||
import { SetRoomOwnerPage } from 'src/app/modals/set-room-owner/set-room-owner.page';
|
import { SetRoomOwnerPage } from 'src/app/ui/chat/modal/set-room-owner/set-room-owner.page';
|
||||||
import { SessionStore } from 'src/app/store/session.service';
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
import { ZodError } from 'zod';
|
import { ZodError } from 'zod';
|
||||||
import { isHttpResponse } from 'src/app/services/http.service';
|
import { isHttpResponse } from 'src/app/services/http.service';
|
||||||
import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service'
|
import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service'
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-chat-popover',
|
selector: 'app-chat-popover',
|
||||||
@@ -27,7 +28,7 @@ export class ChatPopoverPage implements OnInit {
|
|||||||
private navParams: NavParams,
|
private navParams: NavParams,
|
||||||
private toastService: ToastService,
|
private toastService: ToastService,
|
||||||
public ThemeService: ThemeService,
|
public ThemeService: ThemeService,
|
||||||
private RoomRepositoryService: RoomRepositoryService
|
private ChatServiceService: ChatServiceService
|
||||||
) {
|
) {
|
||||||
this.roomId = this.navParams.get('roomId');
|
this.roomId = this.navParams.get('roomId');
|
||||||
this.isAdmin = this.navParams.get('isAdmin');
|
this.isAdmin = this.navParams.get('isAdmin');
|
||||||
@@ -84,7 +85,7 @@ export class ChatPopoverPage implements OnInit {
|
|||||||
|
|
||||||
//this.setRoomOwner();
|
//this.setRoomOwner();
|
||||||
this.showLoader = true
|
this.showLoader = true
|
||||||
const result = await this.RoomRepositoryService.leaveRoom({
|
const result = await this.ChatServiceService.leaveRoom({
|
||||||
id: this.roomId,
|
id: this.roomId,
|
||||||
members: [SessionStore.user.UserId]
|
members: [SessionStore.user.UserId]
|
||||||
})
|
})
|
||||||
@@ -112,7 +113,8 @@ export class ChatPopoverPage implements OnInit {
|
|||||||
//Delete
|
//Delete
|
||||||
async deleteGroup() {
|
async deleteGroup() {
|
||||||
this.showLoader = true
|
this.showLoader = true
|
||||||
const result = await this.RoomRepositoryService.deleteRoomById(this.roomId)
|
|
||||||
|
const result = await this.ChatServiceService.deleteRoomById(this.roomId)
|
||||||
|
|
||||||
|
|
||||||
if(result.isOk()) {
|
if(result.isOk()) {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import { ModalController } from '@ionic/angular';
|
|||||||
import { ThemeService } from 'src/app/services/theme.service'
|
import { ThemeService } from 'src/app/services/theme.service'
|
||||||
import { SessionStore } from 'src/app/store/session.service';
|
import { SessionStore } from 'src/app/store/session.service';
|
||||||
import { ContactRepositoryService } from 'src/app/services/Repositorys/contacts/repository/contacts-repository.service';
|
import { ContactRepositoryService } from 'src/app/services/Repositorys/contacts/repository/contacts-repository.service';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
import { UserContacts } from 'src/app/services/Repositorys/contacts/data-source/contacts-data-source.service';
|
import { UserContacts } from 'src/app/services/Repositorys/contacts/data-source/contacts-data-source.service';
|
||||||
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
||||||
import { ToastService } from 'src/app/services/toast.service';
|
import { ToastService } from 'src/app/services/toast.service';
|
||||||
@@ -37,7 +36,6 @@ export class ContactsPage implements OnInit {
|
|||||||
private modalController: ModalController,
|
private modalController: ModalController,
|
||||||
public ThemeService: ThemeService,
|
public ThemeService: ThemeService,
|
||||||
private contactsRepositoryService: ContactRepositoryService,
|
private contactsRepositoryService: ContactRepositoryService,
|
||||||
private RoomRepositoryService: RoomRepositoryService,
|
|
||||||
private httpErrorHandle: HttpErrorHandle,
|
private httpErrorHandle: HttpErrorHandle,
|
||||||
private toastService: ToastService,
|
private toastService: ToastService,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import { ViewMediaPage } from 'src/app/modals/view-media/view-media.page';
|
|||||||
import { Observable as DexieObservable } from 'Dexie';
|
import { Observable as DexieObservable } from 'Dexie';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service'
|
import { MessageRepositoryService } from 'src/app/module/chat/data/repository/message-respository.service'
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service'
|
|
||||||
import { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message';
|
import { MessageTable } from 'src/app/module/chat/infra/database/dexie/schema/message';
|
||||||
import { RoomListItemOutPutDTO } from 'src/app/module/chat/data/dto/room/roomListOutputDTO';
|
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 { UserTypingServiceRepository } from 'src/app/module/chat/data/repository/user-typing-repository.service';
|
||||||
@@ -43,6 +42,8 @@ import { FilePickerMobileService } from 'src/app/infra/file-picker/mobile/file-p
|
|||||||
import { FilePickerWebService } from 'src/app/infra/file-picker/web/file-picker-web.service'
|
import { FilePickerWebService } from 'src/app/infra/file-picker/web/file-picker-web.service'
|
||||||
import { allowedDocExtension } from 'src/app/utils/allowedDocExtension';
|
import { allowedDocExtension } from 'src/app/utils/allowedDocExtension';
|
||||||
import { JSFileToDataUrl } from 'src/app/utils/ToBase64';
|
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'
|
||||||
const IMAGE_DIR = 'stored-images';
|
const IMAGE_DIR = 'stored-images';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -137,21 +138,22 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
private platform: Platform,
|
private platform: Platform,
|
||||||
private storage: Storage,
|
private storage: Storage,
|
||||||
private sanitiser: DomSanitizer,
|
private sanitiser: DomSanitizer,
|
||||||
private roomRepositoryService: RoomRepositoryService,
|
|
||||||
private messageRepositoryService: MessageRepositoryService,
|
private messageRepositoryService: MessageRepositoryService,
|
||||||
private userTypingServiceRepository: UserTypingServiceRepository,
|
private userTypingServiceRepository: UserTypingServiceRepository,
|
||||||
private chatServiceService: ChatServiceService,
|
private chatServiceService: ChatServiceService,
|
||||||
private FilePickerService: FilePickerService,
|
private FilePickerService: FilePickerService,
|
||||||
private CameraService: CameraService,
|
private CameraService: CameraService,
|
||||||
private FilePickerMobileService: FilePickerMobileService,
|
private FilePickerMobileService: FilePickerMobileService,
|
||||||
private FilePickerWebService: FilePickerWebService
|
private FilePickerWebService: FilePickerWebService,
|
||||||
|
private RoomLocalRepository: RoomLocalRepository,
|
||||||
|
private MemberListLocalRepository: MemberListLocalRepository,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
||||||
this.roomId = this.navParams.get('roomId');
|
this.roomId = this.navParams.get('roomId');
|
||||||
|
|
||||||
|
|
||||||
this.roomData$ = this.roomRepositoryService.getItemByIdLive(this.roomId)
|
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
|
||||||
|
|
||||||
this.getMessages();
|
this.getMessages();
|
||||||
this.listenToIncomingMessage();
|
this.listenToIncomingMessage();
|
||||||
@@ -161,8 +163,8 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
|
|
||||||
|
|
||||||
// this.roomMessage$ = this.messageRepositoryService.getItemsLive(this.roomId)
|
// this.roomMessage$ = this.messageRepositoryService.getItemsLive(this.roomId)
|
||||||
this.roomMembers$ = this.roomRepositoryService.getRoomMemberByIdLive(this.roomId) as any
|
this.roomMembers$ = this.MemberListLocalRepository.getRoomMemberByIdLive(this.roomId) as any
|
||||||
this.roomStatus$ = this.roomRepositoryService.getRoomStatus(this.roomId)
|
this.roomStatus$ = this.MemberListLocalRepository.allMemberOnline(this.roomId)
|
||||||
// this.roomRepositoryService.getRoomById(this.roomId)
|
// this.roomRepositoryService.getRoomById(this.roomId)
|
||||||
|
|
||||||
this.userTypingServiceRepository.getUserTypingLive().subscribe((e) => {
|
this.userTypingServiceRepository.getUserTypingLive().subscribe((e) => {
|
||||||
|
|||||||
+6
-5
@@ -1,12 +1,13 @@
|
|||||||
|
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { ModalController, NavParams } from '@ionic/angular';
|
import { ModalController, NavParams } from '@ionic/angular';
|
||||||
import { RoomRepositoryService } from 'src/app/module/chat/data/repository/room-repository.service';
|
;
|
||||||
import { ThemeService } from 'src/app/services/theme.service'
|
import { ThemeService } from 'src/app/services/theme.service'
|
||||||
import { ToastService } from 'src/app/services/toast.service';
|
import { ToastService } from 'src/app/services/toast.service';
|
||||||
import { Observable as DexieObservable } from 'Dexie';
|
import { Observable as DexieObservable } from 'Dexie';
|
||||||
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service';
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service';
|
||||||
import { MemberTable } from 'src/app/module/chat/infra/database/dexie/schema/members';
|
import { MemberTable } from 'src/app/module/chat/infra/database/dexie/schema/members';
|
||||||
|
import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member-list-local-repository.service'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-set-room-owner',
|
selector: 'app-set-room-owner',
|
||||||
@@ -25,8 +26,8 @@ export class SetRoomOwnerPage implements OnInit {
|
|||||||
private navParams: NavParams,
|
private navParams: NavParams,
|
||||||
public ThemeService: ThemeService,
|
public ThemeService: ThemeService,
|
||||||
private toastService: ToastService,
|
private toastService: ToastService,
|
||||||
private roomRepositoryService: RoomRepositoryService,
|
private chatServiceService: ChatServiceService,
|
||||||
private chatServiceService: ChatServiceService
|
private MemberListLocalRepository: MemberListLocalRepository
|
||||||
) {
|
) {
|
||||||
this.roomId = this.navParams.get('roomId');
|
this.roomId = this.navParams.get('roomId');
|
||||||
this.members = this.navParams.get('members');
|
this.members = this.navParams.get('members');
|
||||||
@@ -34,7 +35,7 @@ export class SetRoomOwnerPage implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
// this.chatService.refreshtoken();
|
// this.chatService.refreshtoken();
|
||||||
this.roomMembers$ = this.roomRepositoryService.getRoomMemberNoneAdminByIdLive(this.roomId) as any
|
this.roomMembers$ = this.MemberListLocalRepository.getRoomMemberNoneAdminByIdLive(this.roomId) as any
|
||||||
}
|
}
|
||||||
|
|
||||||
async close() {
|
async close() {
|
||||||
@@ -67,7 +68,7 @@ export class SetRoomOwnerPage implements OnInit {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if(result.isOk()) {
|
if(result.isOk()) {
|
||||||
this.roomRepositoryService.getRoomById(this.roomId)
|
this.chatServiceService.getRoomById(this.roomId);
|
||||||
// this.modalController.dismiss('success');
|
// this.modalController.dismiss('success');
|
||||||
} else {
|
} else {
|
||||||
this.toastService._badRequest('Não foi possível completar a ação, por favor tente novamente.');
|
this.toastService._badRequest('Não foi possível completar a ação, por favor tente novamente.');
|
||||||
Reference in New Issue
Block a user