From 7f01ccdb782f827c8de361093e3daee40a5f0518 Mon Sep 17 00:00:00 2001 From: simplonco Date: Tue, 10 Jan 2023 19:49:53 +0100 Subject: [PATCH] created querybuilder for direct users --- .../api_back/src/chat/chat.controller.ts | 1 + .../nestjs/api_back/src/chat/chat.service.ts | 64 ++++++++++++------- .../api_back/src/chat/dto/createRoom.dto.ts | 7 +- .../src/chat/entities/chatroom.entity.ts | 18 +++--- .../api_back/src/chat/enums/roomType.enum.ts | 8 +++ 5 files changed, 62 insertions(+), 36 deletions(-) create mode 100644 srcs/requirements/nestjs/api_back/src/chat/enums/roomType.enum.ts 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 2c91f099..df97b46e 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -43,6 +43,7 @@ export class ChatController { { console.log("- in getAllRooms controller"); const rooms = await this.chatService.getAllNotMyRooms(req.user.username); + await this.chatService.getAllUsersNotMyRooms(req.user.username); console.log("- out getAllRooms controller"); return res.status(HttpStatus.OK).json({ rooms: rooms }); } 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 a17df202..af5181ab 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -9,6 +9,7 @@ import { joinRoomDto } from './dto/joinRoom.dto'; import { messagesDto } from './dto/messages.dto'; import { socketDto } from './dto/socket.dto'; + @Injectable() export class ChatService { @@ -46,7 +47,7 @@ export class ChatService { { console.log("-- in getAllNotMyRooms service"); const my_rooms = await this.getMyRooms(username); - const directs = my_rooms; + const directs = my_rooms.filter(room => room.type === 'direct'); console.log("-- out getAllNotMyRooms service"); return directs; @@ -77,25 +78,6 @@ export class ChatService { return rooms; } -/* - async getAllUsersNotRooms(username: string) - { - console.log("-- in getAllNotMyRooms service"); - const user_db = await this.getUserByName(username); - //const user_db = await this.usersService.findOne(username); - const rooms = await this.chatroomRepository - .createQueryBuilder('chatroom') - .where('chatroom.type != :type', { type: 'private' }) - .andWhere('chatroom.users NOT LIKE :user_name', { user_name: `%${username}%` }) - .getMany(); - //const users = await this.getAllUsers(); - //let allRooms = [...rooms, ...users]; - - console.log("-- out getAllNotMyRooms service"); - return rooms; - } -*/ - async getMessagesFromCurrentRoom(username: string): Promise { console.log("-- in getMessagesFromCurrentRoom service"); @@ -202,9 +184,6 @@ export class ChatService { async addMessageToRoom(room_name: string, username: string, message: string): Promise { console.log("-- in addMessageToRoom service"); - //const user_db = await this.getUserByName(username); - //const user_db = await this.usersService.findOne(username); - //console.log("user_db:", user_db); const currentRoom = await this.getRoomByName(room_name); let chat_message = { name: username, @@ -255,6 +234,45 @@ export class ChatService { return user; } + async getAllUsersNotMyRooms(username: string) + { + console.log("-- in getAllUsersNotMyRooms service"); + + const directs = await this.getMyDirects(username); + let usernames = directs.map(room => room.users[0]); + if (usernames.length === 0) + usernames = [""]; + console.log("usernames:", usernames); + + const my_users = await this.userRepository + .createQueryBuilder('user') + .where('user.username NOT IN (:...usernames)', { usernames: usernames }) + .getMany(); + + console.log("my_users:", my_users); + + /* + User { + id: 1, + fortyTwoId: '42522', + username: 'hulamy', + email: 'hulamy@student.42.fr', + image_url: 'default.png', + phone: null, + status: 'Connected', + isEnabledTwoFactorAuth: false, + isTwoFactorAuthenticated: false, + secretTwoFactorAuth: null, + currentRoom: 'hugo2' + } + + */ + + console.log("-- out getAllUsersNotMyRooms service"); + } +/* +*/ + /* GATEWAY EVENTS ***************************************** */ diff --git a/srcs/requirements/nestjs/api_back/src/chat/dto/createRoom.dto.ts b/srcs/requirements/nestjs/api_back/src/chat/dto/createRoom.dto.ts index 69b5543e..bafc1114 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/dto/createRoom.dto.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/dto/createRoom.dto.ts @@ -1,5 +1,5 @@ -import { IsBoolean, IsEmpty, IsInt, IsNotEmpty, IsNumber, IsString, IsOptional } from "class-validator"; -import { IsNull } from "typeorm"; +import { IsBoolean, IsEmpty, IsInt, IsNotEmpty, IsNumber, IsString, IsOptional, IsEnum } from "class-validator"; +import { RoomType } from 'src/chat/enums/roomType.enum'; export class createRoomDto { @@ -9,7 +9,8 @@ export class createRoomDto @IsString() @IsNotEmpty() - room_type: 'public' | 'private' | 'direct'; + @IsEnum(RoomType) + room_type: RoomType; @IsString() @IsOptional() diff --git a/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts b/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts index eeebf36d..27894b3e 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/entities/chatroom.entity.ts @@ -7,7 +7,8 @@ import { PrimaryGeneratedColumn } from "typeorm"; import { User } from 'src/users/entities/user.entity'; -import { messagesDto } from '../dto/messages.dto'; +import { messagesDto } from 'src/chat/dto/messages.dto'; +import { RoomType } from 'src/chat/enums/roomType.enum'; @Entity('chatroom') export class Chatroom { @@ -17,15 +18,12 @@ export class Chatroom { @Column() name: string; - @Column() - type: string; - -// @ManyToOne(type => User, user => user.ownedRooms) -// owner: User; -// -// @ManyToMany(type => User) -// @JoinTable() -// users: User[]; + @Column({ + type: "enum", + enum: RoomType, + default: RoomType.public + }) + type: RoomType; @Column() owner: string; // username diff --git a/srcs/requirements/nestjs/api_back/src/chat/enums/roomType.enum.ts b/srcs/requirements/nestjs/api_back/src/chat/enums/roomType.enum.ts new file mode 100644 index 00000000..01429bc2 --- /dev/null +++ b/srcs/requirements/nestjs/api_back/src/chat/enums/roomType.enum.ts @@ -0,0 +1,8 @@ + +export enum RoomType { + public = 'public', + protected = 'protected', + private = 'private', + direct = 'direct', +} +