diff options
Diffstat (limited to 'server/providers/services')
-rw-r--r-- | server/providers/services/chat_room.service.ts | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/server/providers/services/chat_room.service.ts b/server/providers/services/chat_room.service.ts index 6d804e6..148ff19 100644 --- a/server/providers/services/chat_room.service.ts +++ b/server/providers/services/chat_room.service.ts @@ -2,12 +2,16 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { ChatRoom } from 'server/entities/chat_room.entity'; +import { User } from 'server/entities/user.entity'; +import { ChatRoomConnection } from 'server/entities/chat_room_connection.entity'; @Injectable() export class ChatRoomService { constructor( @InjectRepository(ChatRoom) private chatRoomRepository: Repository<ChatRoom>, + @InjectRepository(ChatRoomConnection) + private connectedUsersRepository: Repository<ChatRoomConnection>, ) {} create(chatRoom: ChatRoom) { @@ -29,6 +33,46 @@ export class ChatRoomService { return this.chatRoomRepository.findOne(id, { relations }); } + async connectedUsers(chatRoom: ChatRoom) { + return this.connectedUsersRepository + .find({ + where: { chatRoom }, + relations: ['user'], + }) + .then((x) => + x.map((x) => { + return { + id: x.user.id, + userName: `${x.user.firstName} ${x.user.lastName}`, + }; + }), + ); + } + + connectUser = async function (chatRoom: ChatRoom, user: User) { + const connectedUser = await this.connectedUsersRepository.findOne({ + where: { chatRoom, user }, + }); + if (connectedUser) { + return connectedUser; + } + const chatRoomConnection = new ChatRoomConnection(); + chatRoomConnection.chatRoom = chatRoom; + chatRoomConnection.user = user; + await this.connectedUsersRepository.save(chatRoomConnection); + return this.connectedUsers(chatRoom); + }; + + disconnectUser = async function (chatRoom: ChatRoom, user: User) { + const connectedUser = await this.connectedUsersRepository.findOne({ + where: { chatRoom, user }, + }); + if (connectedUser) { + return this.connectedUsersRepository.remove(connectedUser); + } + return false; + }; + save(chatRoom: ChatRoom) { return this.chatRoomRepository.save(chatRoom); } |