public async Task <ChatMessage> Handle(CreateChatMessageCommand request, CancellationToken cancellationToken)
        {
            var roomUserCodes = new List <string>();

            roomUserCodes.Add(request.SenderCode);
            roomUserCodes.AddRange(request.ReceiverCodes);
            if (roomUserCodes.Count < 2)
            {
                throw new ArgumentException("UserCodes parameter must contains more than 2 UserCodes to create ChatMessage!");
            }

            bool isRoomExisted = await _roomRepository.CheckRoomExistedAsync(request.RoomCode, roomUserCodes);

            if (!isRoomExisted)
            {
                throw new RoomNotFoundException(request.RoomCode, roomUserCodes);
            }

            var newMessage = new ChatMessage(
                request.RoomCode,
                request.SenderCode,
                request.ReceiverCodes,
                request.Message);

            await _chatMessageRepository.AddChatMessageAsync(newMessage);

            return(newMessage);
        }