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); }