public bool AddMessageToCosmos(ConversationMessageNotification conversationNotification) { bool result = false; try { ConversationMessageDocument message = new ConversationMessageDocument { AttachedFile = false, AttachedFileUrl = string.Empty, ConversationId = conversationNotification.currentConversation.Id, Message = conversationNotification.currentConversation.Message, MessageWithoutHtml = conversationNotification.currentConversation.MessageWithoutHtml, MessageTime = conversationNotification.currentConversation.MessageTime.ToString(), SignedBy = conversationNotification.currentConversation.ProfileName }; collectionName = CosmosCollections.ConversationMessage.ToString(); result = context.AddDocument <ConversationMessageDocument>(databaseName, collectionName, message); } catch (Exception e) { var messageException = telemetria.MakeMessageException(e, System.Reflection.MethodBase.GetCurrentMethod().Name); telemetria.Critical(messageException); } return(result); }
public List<ConversationItemViewModel> GetAllConversations(string email,int rolId) { ConcurrentBag<ConversationItemViewModel> conversationItemsParallel = new ConcurrentBag<ConversationItemViewModel>(); List<ConversationItemViewModel> conversationItems = new List<ConversationItemViewModel>(); List<ConversationDocument> conversations = new List<ConversationDocument>(); conversations = manager.GetConversationsAsync(email, rolId); string profileName = string.Empty; // from profile string profileTagLine = string.Empty; // from audience when is publisher string iconUrl = string.Empty; // from profile PublisherProfileDocument publisherProfile= manager.GetPublisherProfile(email); AdvertiserProfileDocument advertiserProfile = manager.GetAdvertiserProfile(email); if(publisherProfile != null && rolId==1) { profileName = publisherProfile.Name; iconUrl = publisherProfile.IconUrl; Parallel.ForEach(conversations, (conversation) => { List<ConversationMessageDocument> messages = manager.GetConversationMessagesByConversationId(conversation.Id); ConversationMessageDocument lastMessage = new ConversationMessageDocument(); if (messages.Count() > 0) { lastMessage = (from message in messages orderby message.RegisterDate descending select message).FirstOrDefault(); } AudienceChannelDocument audienceChannel = manager.GetAudienceChannelById(conversation.AudienceChannelId); profileTagLine = audienceChannel.TagLine; ConversationItemViewModel viewModel = new ConversationItemViewModel() { ProfileName = manager.GetAdvertiserProfileNameByConversationId(conversation.Id, email), ProfileTagLine = profileTagLine, IconUrl = manager.GetAdvertiserImageByConversationId(conversation.Id, email), Messages = messages, LastMessage = lastMessage, ConversationId = conversation.Id, Chunks = manager.GetConversationMessagesPerChunk(messages) }; conversationItemsParallel.Add(viewModel); }); } if(advertiserProfile!=null && rolId==2) { profileName = advertiserProfile.Title; iconUrl = advertiserProfile.IconUrl; profileTagLine = advertiserProfile.Tagline; Parallel.ForEach(conversations, (conversation) => { List<ConversationMessageDocument> messages = manager.GetConversationMessagesByConversationId(conversation.Id); ConversationMessageDocument lastMessage = new ConversationMessageDocument() { Message = string.Empty }; if (messages.Count() > 0) { lastMessage = (from message in messages orderby message.RegisterDate descending select message).FirstOrDefault(); } ConversationItemViewModel viewModel = new ConversationItemViewModel() { ProfileName = manager.GetPublisherProfileNameByConversationId(conversation.Id, email), ProfileTagLine = profileTagLine, IconUrl = manager.GetPublisherImageByConversationId(conversation.Id, email), Messages = messages, LastMessage = lastMessage, ConversationId = conversation.Id, Chunks = manager.GetConversationMessagesPerChunk(messages) }; conversationItemsParallel.Add(viewModel); }); } conversationItems = conversationItemsParallel.ToList(); conversationItems.OrderByDescending(x => x.LastMessage.MessageTime); return conversationItems; }