private async Task Send() { var userNameTask = LocalStorageService.GetStringAsync(LocalStorageAttributes.UserNameKeyName); var userImgTask = LocalStorageService.GetStringAsync(LocalStorageAttributes.UserImgKeyName); var userIdTask = LocalStorageService.GetStringAsync(LocalStorageAttributes.UserIdKeyName); await Task.WhenAll(userNameTask, userIdTask, userImgTask); var user = new ShortUserInfoContract { UserId = userIdTask.Result, UserName = userNameTask.Result, UserImg = userImgTask.Result, }; var message = new CreateMessageContract { Content = messageInput, User = user, }; await Http.PostAsync($"api/messages/{ChatId}", message); messageInput = string.Empty; }
/// <summary> /// Converts <see cref="CreateMessageContract"/> contract to <seealso cref="MessageModel"/> model. /// </summary> /// <param name="contract">Message contract.</param> /// <returns><see cref="MessageModel"/> model.</returns> public static MessageModel ToModel(this CreateMessageContract contract) { if (contract == null) { throw new ArgumentNullException(nameof(CreateMessageContract)); } return(new MessageModel { Content = contract.Content, CreatedDate = DateTime.UtcNow, UserName = contract.User.UserName, Chat = new ChatModel() }); }
public async Task <IActionResult> Post(int chatId, [FromBody] CreateMessageContract contract) { var messageModel = contract.ToModel(); messageModel.Chat.Id = chatId; var messageContract = messageModel.ToContract(); messageContract.User = contract.User; var sendHubMessageTask = hubContext.Clients.Group(chatId.ToString()).SendAsync(HubConstants.ReceiveMessage, messageContract); var writeMessageToDbTask = messageService.CreateAsync(messageModel); await Task.WhenAll(sendHubMessageTask, writeMessageToDbTask); return(StatusCode(StatusCodes.Status201Created)); }