public async Task <IActionResult> CreateSingleChatRoom([FromBody] JObject jObject) { var result = new OperationResult <ChatRoom>(); var username = jObject["username"].ToString(); var greeting = jObject["message"] != null ? jObject["message"].ToString() : null; if (await _userManager.FindByNameAsync(username) == null) { return(new ObjectResult(await result.Fail(EnumHelper.GetStringValue(AuthError.UserNotFound)))); } var chatRoom = new ChatRoom { Id = ObjectId.GenerateNewId().ToString(), Users = new List <string> { User.Identity.Name, username }, Messages = new List <ChatMessage>(), Type = ChatRoomType.Single, LastMessageTime = DateTime.Now, Name = username }; if ((await _chatRoomService.GetChatRoomsForUserAsync(User.Identity.Name)) .Any(r => r.Users.Contains(username))) { return(new ObjectResult(await result.Fail(EnumHelper.GetStringValue(ChatError.RoomAlreadyExists)))); } await _chatRoomService.CreateChatRoomAsync(chatRoom); if (greeting != null) { var greetingMessage = new ChatMessage { Id = ObjectId.GenerateNewId().ToString(), From = User.Identity.Name, To = username, Timestamp = DateTime.Now, RoomId = chatRoom.Id, Status = ChatMessageStatus.Sent, Body = greeting }; var addHeaders = new Dictionary <string, object> { { "greeting", "true" } }; await _chatMessageService.PublishMessageAsync(greetingMessage, addHeaders); chatRoom.Messages.Add(greetingMessage); } return(new ObjectResult(await result.Success(chatRoom))); }