public async Task <ChatMessageModel> PostMessage(PostChatMessageRequestModel model) { var currentUser = await _authService.GetAuthorizedUser(); var channel = await DbContext.ChatChannels.FindAsync(model.ChannelId); if (channel == null) { throw new EntityNotFoundException("Channel with specified id is not found"); } var dbAttachmentsCount = await DbContext.FileUploads .CountAsync(_ => model.Attachments.Contains(_.Id)); if (dbAttachmentsCount < model.Attachments.Count) { throw new EntityNotFoundException("One of the specified attachment id is not found"); } var message = new ChatMessage { ChannelId = channel.Id, SenderId = currentUser.Id, Message = model.Text, Attachments = model.Attachments.Select(id => new ChatMessageAttachment { UploadId = id }).ToList(), }; await DbContext.AddAsync(message); await DbContext.SaveChangesAsync(); await _chatProvider.BroadcastMessage(currentUser, message); return(await GetMessage(message.Id)); }