diff --git a/src/app/pages/chat/chat.page.ts b/src/app/pages/chat/chat.page.ts index a6371f5e4..aec173f02 100644 --- a/src/app/pages/chat/chat.page.ts +++ b/src/app/pages/chat/chat.page.ts @@ -17,7 +17,7 @@ import { MessagesPage } from './messages/messages.page'; import { NewGroupPage } from './new-group/new-group.page'; import { EditGroupPage } from 'src/app/shared/chat/edit-group/edit-group.page'; import { Observable, Subject } from "rxjs/Rx"; -import { NavigationStart, Router, NavigationEnd, ActivatedRoute } from '@angular/router'; +import { Router, NavigationEnd, ActivatedRoute } from '@angular/router'; import { EventPerson } from 'src/app/models/eventperson.model'; import { removeDuplicate } from 'src/plugin/removeDuplicate.js' import { environment } from 'src/environments/environment'; @@ -343,6 +343,8 @@ export class ChatPage implements OnInit { } openMessagesPage(rid) { + console.log('rid', rid); + // this.chatService.refreshtoken(); this.roomId = rid; @@ -355,6 +357,7 @@ export class ChatPage implements OnInit { this.showEmptyComponent = false; this.showMessages = true; } + } openContactsPage() { this.segment = 'Contactos'; @@ -920,4 +923,3 @@ export class ChatPage implements OnInit { } - diff --git a/src/app/services/Repositorys/chat/data-source/message/message-local-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/message/message-local-data-source.service.ts new file mode 100644 index 000000000..032aa984f --- /dev/null +++ b/src/app/services/Repositorys/chat/data-source/message/message-local-data-source.service.ts @@ -0,0 +1,63 @@ +import { Injectable } from '@angular/core'; +import { AddMemberToRoomInputDTO } from '../../dto/room/addMemberToRoomInputDto'; +import { RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO'; +import { Dexie, EntityTable, liveQuery } from 'Dexie'; +import { err, ok } from 'neverthrow'; +import { Observable } from 'rxjs'; +import { RoomOutPutDTO } from '../../dto/room/roomOutputDTO'; +import { z } from 'zod'; +import { MessageInputDTO } from '../../dto/message/messageInputDtO'; + + +const tableSchema = z.object({ + id: z.any().optional(), + roomId: z.string().uuid(), + senderId: z.number(), + message: z.string(), + messageType: z.number(), + canEdit: z.boolean(), + oneShot: z.boolean(), + requireUnlock: z.boolean(), +}) + +export type TableMessage = z.infer + +// Database declaration (move this to its own module also) +export const messageDataSource = new Dexie('chat-message') as Dexie & { + message: EntityTable; +}; + +messageDataSource.version(1).stores({ + message: '++id, roomId, senderId, message, messageType, canEdit, oneShot, requireUnlock' +}); + +@Injectable({ + providedIn: 'root' +}) +export class MessageLocalDataSourceService { + + private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL + + constructor() {} + + + async createMessage(data: MessageInputDTO) { + + try { + const result = await messageDataSource.message.add(data) + return ok(result) + } catch (e) { + return err(false) + } + + } + + getItemsLive(): Observable { + return liveQuery(() => messageDataSource.message.toArray()) as any; + } + + + addIdToMessage() {} + +} + diff --git a/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts index 6ff649ca8..32bef8f56 100644 --- a/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts +++ b/src/app/services/Repositorys/chat/data-source/message/message-remote-data-source.service.ts @@ -1,9 +1,10 @@ import { Injectable } from '@angular/core'; import { HttpService } from 'src/app/services/http.service'; -import { MessageOutPutDTO } from '../../dto/message/messageOutputDTO'; import { MessageListInputDTO } from '../../dto/message/messageListInputDTO'; import { DataSourceReturn } from '../../../type'; - +import { MessageInputDTO, MessageInputDTOSchema } from '../../dto/message/messageInputDtO'; +import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; +import { MessageOutPutDTO } from '../../dto/message/messageOutputDTO'; @Injectable({ providedIn: 'root' @@ -14,8 +15,9 @@ export class MessageRemoteDataSourceService { constructor(private httpService: HttpService) {} - async sendMessage(message: any) { - return await this.httpService.post(`${this.baseUrl}/Messages`, message); + @ValidateSchema(MessageInputDTOSchema) + async sendMessage(data: MessageInputDTO) { + return await this.httpService.post(`${this.baseUrl}/Messages`, data); } async reactToMessage(id: string, reaction: any) { diff --git a/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts index e17e5741c..9f08012a3 100644 --- a/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts +++ b/src/app/services/Repositorys/chat/data-source/room/rooom-local-data-source.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { AddMemberToRoomInputDTO } from '../../dto/room/addMemberToRoomInputDto'; -import { RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO'; +import { RoomListItemOutPutDTO, RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO'; import { Dexie, EntityTable, liveQuery } from 'Dexie'; import { err, ok } from 'neverthrow'; import { Observable } from 'rxjs'; @@ -49,33 +49,13 @@ export class RoomLocalDataSourceService { } - async getRoomList() { - - } - - async getRoom(id: string){ - - } - - async updateRoom(id: string, room: any) { - - } - - async deleteRoom(id: string){ - - } - - async addMemberToRoom(data: AddMemberToRoomInputDTO) { - - } - - async removeMemberFromRoom(id: string, member: any){ - - } - getItemsLive(): Observable { return liveQuery(() => roomDataSource.room.toArray()) as any; } + getRoomByIdLive(id: any): Observable { + return liveQuery(() => roomDataSource.room.get(id)) as any; + } + } diff --git a/src/app/services/Repositorys/chat/dto/message/messageInputDtO.ts b/src/app/services/Repositorys/chat/dto/message/messageInputDtO.ts new file mode 100644 index 000000000..5175a2399 --- /dev/null +++ b/src/app/services/Repositorys/chat/dto/message/messageInputDtO.ts @@ -0,0 +1,14 @@ +import { z } from "zod"; + +export const MessageInputDTOSchema = z.object({ + roomId: z.string().uuid(), + senderId: z.number(), + message: z.string(), + messageType: z.number(), + canEdit: z.boolean(), + oneShot: z.boolean(), + requireUnlock: z.boolean(), +}); + + +export type MessageInputDTO = z.infer diff --git a/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts b/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts index c1a1c27ec..c8bf10328 100644 --- a/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts +++ b/src/app/services/Repositorys/chat/dto/message/messageOutputDTO.ts @@ -1,20 +1,9 @@ import { z } from "zod" const MessageOutPutDTOSchema = z.object({ - id: z.string(), - sender: z.object({ - wxUserId: z.number(), - wxFullName: z.string(), - wxeMail: z.string().email(), - userPhoto: z.string() - }), - message: z.string().datetime(), - messageType: z.string().datetime(), - sentAt: z.number(), - deliverAt: z.any(), - canEdit: z.any(), - oneShot: z.any(), - requireUnlock: z.any() + success: z.boolean(), + message: z.string(), + data: z.any() }); export type MessageOutPutDTO = z.infer diff --git a/src/app/services/Repositorys/chat/repository/message-respository.service.ts b/src/app/services/Repositorys/chat/repository/message-respository.service.ts index 0e11c7e38..9975acd79 100644 --- a/src/app/services/Repositorys/chat/repository/message-respository.service.ts +++ b/src/app/services/Repositorys/chat/repository/message-respository.service.ts @@ -2,6 +2,8 @@ import { Injectable } from '@angular/core'; import { MessageRemoteDataSourceService } from '../data-source/message/message-remote-data-source.service'; import { MessageLiveDataSourceService } from '../data-source/message/message-live-data-source.service'; import { MessageListInputDTO } from '../dto/message/messageListInputDTO'; +import { MessageInputDTO } from '../dto/message/messageInputDtO'; +import { MessageLocalDataSourceService } from '../data-source/message/message-local-data-source.service'; @Injectable({ providedIn: 'root' @@ -10,11 +12,17 @@ export class MessageRepositoryService { constructor( private messageRemoteDataSourceService: MessageRemoteDataSourceService, - private messageLiveDataSourceService: MessageLiveDataSourceService + private messageLiveDataSourceService: MessageLiveDataSourceService, + private messageLocalDataSourceService: MessageLocalDataSourceService ) {} - async sendMessage() { - // const result = this.messageRemoteDataSourceService.sendMessage() + async sendMessage(data: MessageInputDTO) { + + const localActionResult = await this.messageLocalDataSourceService.createMessage(data) + + if(localActionResult.isOk()) { + const sendMessageResult = await this.messageRemoteDataSourceService.sendMessage(data) + } } async getMessagesFromRoom(data: MessageListInputDTO) { diff --git a/src/app/services/Repositorys/chat/repository/room-repository.service.ts b/src/app/services/Repositorys/chat/repository/room-repository.service.ts index 42ef9b136..416d40249 100644 --- a/src/app/services/Repositorys/chat/repository/room-repository.service.ts +++ b/src/app/services/Repositorys/chat/repository/room-repository.service.ts @@ -5,6 +5,8 @@ import { addRoom, RoomRemoteDataSourceState } from '../data-source/room/room-mem import { Store } from '@ngrx/store'; import { AddMemberToRoomInputDTO } from '../dto/room/addMemberToRoomInputDto'; import { RoomLocalDataSourceService } from '../data-source/room/rooom-local-data-source.service'; +import { HttpErrorResponse } from '@angular/common/http'; +import { ZodError } from 'zod'; @Injectable({ providedIn: 'root' @@ -29,6 +31,8 @@ export class RoomRepositoryService { const result = await this.roomRemoteDataSourceService.createRoom(data) if(result.isOk()) { + + console.log('result', result) this.roomMemoryDataSourceService.dispatch( addRoom(result.value) ) this.roomLocalDataSourceService.createRoom(result.value) @@ -47,4 +51,8 @@ export class RoomRepositoryService { getItemsLive() { return this.roomLocalDataSourceService.getItemsLive() } + + getItemByIdLive(id: any) { + return this.roomLocalDataSourceService.getRoomByIdLive(id) + } } diff --git a/src/app/shared/chat/messages/messages.page.html b/src/app/shared/chat/messages/messages.page.html index ab8a5091d..6bd77f537 100644 --- a/src/app/shared/chat/messages/messages.page.html +++ b/src/app/shared/chat/messages/messages.page.html @@ -1,11 +1,11 @@ - - -
+ + +
-
- {{ ChatSystemService.getDmRoom(this.roomId).name }} +
+ {{ roomData.roomName }} - +
-
- {{msg.u.name}} - {{msg.time}} -
-
- -
{{msg.msg}}
- - Apagou a mensagem - - - - - Enviado - - - - - Lido -
Tentar
-
- {{last ? scrollToBottom() : ''}} -
-
- -
-
-
- - - - - -
-
- {{msg.u.name}} - {{msg.time}} -
-
-
-
-
-
- - - {{"Imagem"}} - - - - - - -
- image - - - - Enviado - - - - - Lido -
Tentar
-
-
-
-
-
- -
- - - - - {{ file.title}} - - - - - -
- -
- - - - - - - - - - - - - {{file.title}} -
-
-
-
- - - {{'Mensagem de voz'}} - - - - - - -
-
- -
-
- - {{file.description}} - - - - - - Enviado - - - - - Lido -
Tentar
-
-
-
-
-
- {{last ? scrollToBottom() : ''}} -
-
- -
- - Apagou a mensagem
- - - {{msg.u.name}} criou esta reunião
-
- - De {{showDateDuration(msg.file.start_date)}} a - {{showDateDuration(msg.file.end_date)}} -
- - - {{msg.file.venue}} -
-
-
- - - -
+ MESSAGE +

Room ID: {{ roomData.id }}

@@ -227,16 +53,17 @@ - + + -
+
{{durationDisplay}}
@@ -277,7 +104,7 @@
- +
- - - +
diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index 41dd07c59..325154b25 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -35,6 +35,9 @@ import { ChatMessageDebuggingPage } from 'src/app/shared/popover/chat-message-de import { PermissionService } from 'src/app/services/permission.service'; import { FileValidatorService } from "src/app/services/file/file-validator.service" import { ChangeDetectorRef } from '@angular/core'; +import { RoomRepositoryService } from 'src/app/services/Repositorys/chat/repository/room-repository.service'; +import { Observable } from 'rxjs'; +import { RoomListItemOutPutDTO, RoomListOutPutDTO } from 'src/app/services/Repositorys/chat/dto/room/roomListOutputDTO'; const IMAGE_DIR = 'stored-images'; @@ -103,6 +106,9 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy isAdmin = false; roomCountDownDate: string; + textField = '' + + roomData$: Observable constructor( public popoverController: PopoverController, @@ -124,39 +130,18 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy private platform: Platform, private fileOpener: FileOpener, public p: PermissionService, - private FileValidatorService: FileValidatorService + private FileValidatorService: FileValidatorService, + private roomRepositoryService: RoomRepositoryService ) { // update this.checkAudioPermission() } ngOnChanges(changes: SimpleChanges): void { - - this.ChatSystemService.getAllRooms(); - this.ChatSystemService.getDmRoom(this.roomId).loadHistory({}) - - this.ChatSystemService.getDmRoom(this.roomId).scrollDown = this.scrollToBottomClicked - - this.ChatSystemService.openRoom(this.roomId) - - this.ChatSystemService.getDmRoom(this.roomId) - - this.showAvatar = false - - - - - setTimeout(() => { - this.scrollToBottomClicked() - this.showAvatar = true - }, 150) - - this.deleteRecording() - - // this.ChatSystemService.getDmRoom(this.roomId).deleteAll() - + this.roomData$ = this.roomRepositoryService.getItemByIdLive(this.roomId) } + sendTyping() {} async ChatMessageDebuggingPage() { @@ -415,7 +400,8 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } sendMessage() { - this.ChatSystemService.getDmRoom(this.roomId).send({}) + + }