From 5bcd52b573b5243eed48f3327ca9d6b8fd14d55e Mon Sep 17 00:00:00 2001 From: hugogogo Date: Fri, 13 Jan 2023 15:06:00 +0100 Subject: [PATCH] no more duplicate messages join --- README.md | 5 +++-- .../nestjs/api_back/src/chat/chat.controller.ts | 9 +++++---- .../nestjs/api_back/src/chat/chat.gateway.ts | 2 -- .../nestjs/api_back/src/chat/chat.service.ts | 15 +++++++++++---- .../nestjs/api_back/src/chat/dto/room.dto.ts | 10 ++++++++-- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 5b91f68c..3b7522ee 100644 --- a/README.md +++ b/README.md @@ -68,13 +68,14 @@ #### chat : - [/] create public room -- [ ] create private room +- [/] create private room - [/] create direct room - [/] chat in room - [/] join public rooms -- [ ] join private rooms +- [/] join private rooms only by invitation - [/] join direct rooms - [/] see all joignable rooms +- [/] cannot see private rooms - [/] see all my rooms - [/] leave room - [/] leave direct impossible diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts index 7aec84c6..a0cc42a9 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -121,7 +121,7 @@ export class ChatController { } else { - let fields = ["name", "type", "users", "messages"]; + let fields = ["name", "type", "users", "messages", "owner"]; const room_db = await this.chatService.getRoomByName(room.name, fields); if (room_db.type === 'direct') { @@ -138,7 +138,7 @@ export class ChatController { console.log("throw error: your have already joined this room"); throw new HttpException(`your have already joined this room`, HttpStatus.CONFLICT); } - room = await this.chatService.addUserToRoom(req.user.username, room_db); + room = await this.chatService.addUserToRoom(req.user.username, room.name); } let socket: socketDto = this.chatGateway.sockets.get(req.user.username); @@ -172,8 +172,9 @@ export class ChatController { console.log("- in inviteUser controller"); let current_room_name = await this.chatService.getCurrentRoomName(req.user.username); - const room_db = await this.chatService.getRoomByName(current_room_name); - let room = await this.chatService.addUserToRoom(username, room_db); + let room = await this.chatService.addUserToRoom(username, current_room_name); + let message = `${username} joined the room`; + await this.chatService.addMessageToRoom(current_room_name, "SERVER", message); res.status(HttpStatus.OK).json({ room: room }); diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.gateway.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.gateway.ts index 4fad5b41..1892ce4d 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.gateway.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.gateway.ts @@ -36,8 +36,6 @@ implements OnGatewayConnection, OnGatewayDisconnect console.log('- in joinRoom gateway'); await this.chatService.socketJoinRoom(socket, room_name) - let message = `${socket.username} joined the room`; - await this.chatService.addMessageToRoom(room_name, "SERVER", message); console.log('- out joinRoom gateway'); } diff --git a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts index 8c91098e..e4692592 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -106,6 +106,11 @@ export class ChatService { { console.log("-- in getAllOtherRoomsAndUsers service"); + const temp = await this.chatroomRepository + .createQueryBuilder('chatroom') + .getMany(); + console.log("all rooms:", temp); + const all_rooms = await this.getAllNotMyRooms(username); const all_users = await this.getAllUsersNotMyRooms(username); @@ -121,7 +126,7 @@ export class ChatService { type: "user", }; }); - let rooms = row_rooms.concat(users); + let rooms: roomDto[] = row_rooms.concat(users); console.log("--- rooms:", rooms); console.log("-- in getAllOtherRoomsAndUsers service"); @@ -235,13 +240,14 @@ export class ChatService { console.log("-- out addUserToNewRoom service"); } - async addUserToRoom(username: string, room: roomDto): Promise + async addUserToRoom(username: string, room_name: string): Promise { console.log("-- in addUserToRoom service"); + const room = await this.getRoomByName(room_name); + // update room with new user room.users.push(username); - room.messages.push({ name: "SERVER", message: `${username} joined the room`}); await this.chatroomRepository.save(room); console.log("-- out addUserToRoom service"); @@ -253,7 +259,7 @@ export class ChatService { console.log("-- in addMessageToRoom service"); const my_room = await this.getRoomByName(room_name); - let chat_message = { + let chat_message: messagesDto = { name: username, message: message, }; @@ -390,6 +396,7 @@ export class ChatService { socket.room = room_name; let message = `${socket.username} joined the room`; await socket.to(socket.room).emit('message', "SERVER", message); + await this.addMessageToRoom(room_name, "SERVER", message); console.log('- out socketJoinRoom service'); } diff --git a/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts b/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts index 39c53b1e..9508575c 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/dto/room.dto.ts @@ -1,8 +1,12 @@ -import { IsBoolean, IsEmpty, IsInt, IsIn, IsNotEmpty, IsNumber, IsArray, IsString, IsInstance, IsOptional, IsEnum } from "class-validator"; +import { IsBoolean, IsEmpty, IsInt, IsIn, IsNotEmpty, IsNumber, IsArray, IsString, IsInstance, ValidateNested, IsObject, IsOptional, IsEnum } from "class-validator"; import { messagesDto } from 'src/chat/dto/messages.dto'; export class roomDto { + @IsNumber() + @IsOptional() + id?: number; + @IsString() @IsNotEmpty() name: string; @@ -26,7 +30,9 @@ export class roomDto users?: string[]; // usernames @IsArray() - @IsInstance(messagesDto, { each: true }) + //@IsInstance(messagesDto, { each: true }) + //@IsObject({ each: true }) + @ValidateNested({ each: true }) @IsOptional() messages?: messagesDto[]; }