diff --git a/README.md b/README.md index 300c2d9d..c1669546 100644 --- a/README.md +++ b/README.md @@ -79,15 +79,17 @@ - [/] see all my rooms - [/] invite someone in room - [/] leave room +- [ ] leave room if owner +- [ ] last leave room - [/] leave direct impossible - [/] protect room with password - [/] add, change, and remove password in room -- [ ] make admin -- [ ] ban -- [ ] mute -- [ ] block users -- [ ] send game invitation -- [ ] view user profiles +- [/] make admin +- [/] ban +- [/] mute +- [/] block users +- [/] send game invitation +- [/] view user profiles #### game : @@ -244,3 +246,17 @@ - HTTP_VERSION_NOT_SUPPORTED: 505 ``` + + +--- +## tests chat : + +- [ ] leave room +- user leave room +- admin user leave room +- owner user leave room +- on rooms with password +- on direct rooms +- after password is change / set / removed +- [ ] + 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 d3a4eedb..d377fbe5 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.controller.ts @@ -438,19 +438,21 @@ export class ChatController { printCaller("- in "); const room_name = await this.chatService.getCurrentRoomName(req.user.username); - let response = await this.chatService.removeUserFromRoom(req.user.username, room_name); + let messages: string[] = await this.chatService.removeUserFromRoom(req.user.username, room_name); // set current room to nothing await this.chatService.setCurrentRoom(req.user.username, ""); // leaving message - let message = `${req.user.username} left the room`; - await this.chatService.addMessageToRoom(room_name, "SERVER", message); let socket: socketDto = this.chatGateway.sockets.get(req.user.username); - await socket.to(socket.room).emit('message', "SERVER", message); + await messages.forEach(async (message) => + { + await this.chatService.addMessageToRoom(room_name, "SERVER", message); + await socket.to(socket.room).emit('message', "SERVER", message); + }); await socket.leave(socket.room); - res.status(HttpStatus.OK).json({ message: response }); + res.status(HttpStatus.OK).json({ message: messages[0] }); printCaller("- out "); } 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 10ebc6ba..a0ba234d 100644 --- a/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts +++ b/srcs/requirements/nestjs/api_back/src/chat/chat.service.ts @@ -10,9 +10,9 @@ import { InjectRepository } from '@nestjs/typeorm'; import { roomDto } from './dto/room.dto'; import { messagesDto } from './dto/messages.dto'; import { socketDto } from './dto/socket.dto'; +import { muteDto } from './dto/mute.dto'; import * as bcrypt from 'bcrypt'; import { printCaller } from './dev/dev_utils'; -import { muteDto } from './dto/mute.dto'; @Injectable() @@ -436,10 +436,18 @@ export class ChatService { { printCaller("-- in "); - const room = await this.getRoomByName(room_name); + const room: Chatroom = await this.getRoomByName(room_name); // update room with new user room.users.push(username); + if (room.owner === "") + { + room.owner = username; + if (!room.admins.includes(username)) + room.admins.push(username); + if (!room.allowed_users.includes(username)) + room.allowed_users.push(username); + } await this.chatroomRepository.save(room); printCaller("-- out "); @@ -498,10 +506,12 @@ export class ChatService { /* REMOVERS *********************************************** */ - async removeUserFromRoom(username: string, room_name: string): Promise + async removeUserFromRoom(username: string, room_name: string): Promise { printCaller("-- in "); + let messages = [`${username} left the room`]; + const room = await this.getRoomByName(room_name); if (!room.users.includes(username)) { @@ -517,10 +527,26 @@ export class ChatService { // delete user from room room.users.push(username); room.users = room.users.filter(name => name !== username); + room.admins = room.admins.filter(name => name !== username); + if (room.owner === username) + { + if (room.admins.length > 0) + { + room.owner = room.admins[0]; + messages.push(`${room.owner} is now owner of this room`); + } + else if (room.users) + { + room.owner = room.users[0]; + messages.push(`${room.owner} is now owner of this room`); + } + else + room.owner = ""; + } await this.chatroomRepository.save(room); printCaller("-- out "); - return "successfully leaving room"; + return messages; } async removeMute(username: string, room_name: string): Promise @@ -672,5 +698,18 @@ export class ChatService { printCaller("-- out "); } + + + /* LAST MINUTE BAD SOLUTION ******************************* + */ + + async changeAllUsernames(socket: socketDto, room_name: string): Promise + { + printCaller("-- in "); + + + printCaller("-- out "); + } + } 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 aaf8592f..0902c140 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 @@ -31,28 +31,30 @@ export class Chatroom @IsOptional() hash?: string; - @Column() + @Column() owner: string; // username - @Column("simple-array") + @Column("simple-array") @IsArray() @IsString({ each: true }) admins: string[]; // username - @Column("simple-array") + @Column("simple-array") @IsArray() @IsString({ each: true }) users: string[]; // usernames - @Column("simple-array") + // users that can connect without (re)entering password + // is emptied each time password change + @Column("simple-array") @IsArray() @IsString({ each: true }) allowed_users: string[]; // usernames - @Column("json") + @Column("json") messages: messagesDto[]; - @Column("json", { nullable: true }) + @Column("json", { nullable: true }) @IsOptional() mutes?: muteDto[]; } diff --git a/srcs/requirements/nestjs/api_back/src/users/users.service.ts b/srcs/requirements/nestjs/api_back/src/users/users.service.ts index 680075da..ac145c6d 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.service.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.service.ts @@ -109,7 +109,9 @@ export class UsersService { ...updateUserDto}); if (!user) throw new HttpException(`The user could not be updated.`,HttpStatus.NOT_FOUND); - return this.userRepository.save(user); + this.userRepository.save(user); + + return user; } async remove(id: number) {