owner can leave room now
This commit is contained in:
28
README.md
28
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
|
||||
- [ ]
|
||||
|
||||
|
||||
@@ -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 ");
|
||||
}
|
||||
|
||||
|
||||
@@ -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<string>
|
||||
async removeUserFromRoom(username: string, room_name: string): Promise<string[]>
|
||||
{
|
||||
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<void>
|
||||
@@ -672,5 +698,18 @@ export class ChatService {
|
||||
printCaller("-- out ");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* LAST MINUTE BAD SOLUTION *******************************
|
||||
*/
|
||||
|
||||
async changeAllUsernames(socket: socketDto, room_name: string): Promise<void>
|
||||
{
|
||||
printCaller("-- in ");
|
||||
|
||||
|
||||
printCaller("-- out ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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[];
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user