private Entity CreateNewEnrichedData(TextEntities emailEntities) { EntitySchema enrchEmailDataSchema = _userConnection.EntitySchemaManager.GetInstanceByName("EnrchEmailData"); Entity newEnrichedData = enrchEmailDataSchema.CreateEntity(_userConnection); newEnrichedData.SetDefColumnValues(); newEnrichedData.SetColumnValue("JsonData", JsonConvert.SerializeObject(emailEntities)); newEnrichedData.SetColumnValue("Hash", emailEntities.GetHash()); newEnrichedData.Save(); return(newEnrichedData); }
private void ActualizeTextEntityHash(List <TextEntityData> textEntityDatas, Type type) { foreach (TextEntityData textEntityData in textEntityDatas) { var entity = (MiningEntity)JsonConvert.DeserializeObject(textEntityData.EteJsonData, type); if (entity != null) { textEntityData.EteUpdatedHash = entity.GetHash(); } TextEntities textEntities = JsonConvert.DeserializeObject <TextEntities>(textEntityData.EedJsonData); if (textEntities != null) { textEntityData.EedUpdatedHash = textEntities.GetHash(); } } }
private List <MiningResult> ProcessEntities(Dictionary <Entity, GetEmailEntitiesResponse> minedInfo) { var results = new List <MiningResult>(); foreach (KeyValuePair <Entity, GetEmailEntitiesResponse> pairs in minedInfo) { Entity activity = pairs.Key; GetEmailEntitiesResponse response = pairs.Value; try { if (response.IsFailure) { SetAcivityIsEnriched(activity.PrimaryColumnValue, Guid.Empty, EnrichStatus.Error); continue; } TextEntities emailEntities = response.TextEntities; string entitiesHash = emailEntities.GetHash(); Entity enrichedRecord = FindEnrichedData(entitiesHash); bool isNewEnrichedData = enrichedRecord == null; Guid enrchEmailDataId; EnrichEmailDataStatus status; if (isNewEnrichedData) { enrichedRecord = CreateNewEnrichedData(emailEntities); enrchEmailDataId = enrichedRecord.PrimaryColumnValue; status = EnrichEmailDataStatus.Mined; CreateEnrichedTextEntities(enrchEmailDataId, emailEntities); } else { enrchEmailDataId = enrichedRecord.PrimaryColumnValue; status = enrichedRecord.GetTypedColumnValue <string>("Status"); } Guid primaryContactTextEntityId = FindPrimaryContact(emailEntities, enrchEmailDataId, isNewEnrichedData); string sender = activity.GetTypedColumnValue <string>("Sender"); string senderEmail = sender.ExtractEmailAddress(); Dictionary <Guid, Guid> identifiedContacts = UpdateContactIdentificationInfo(enrchEmailDataId, emailEntities, senderEmail, isNewEnrichedData); UpdateAccountIdentificationInfo(enrchEmailDataId, emailEntities, isNewEnrichedData); if (senderEmail.IsNotNullOrEmpty()) { AppendSenderEmail(enrchEmailDataId, senderEmail, response.IsSenderEmailDomainFree, primaryContactTextEntityId, emailEntities); } _deduplicator.DeduplicateContactData(identifiedContacts, emailEntities); results.Add(new MiningResult { ActivityId = activity.PrimaryColumnValue, EnrchEmailDataId = enrchEmailDataId, EnrichStatus = EnrichStatus.Done, EnrchEmailDataStatus = status }); SetAcivityIsEnriched(activity.PrimaryColumnValue, enrichedRecord.PrimaryColumnValue, EnrichStatus.Done); PublishEmailEnrichmentMetrics(activity); } catch (Exception ex) { _log.ErrorFormat("Cannot save enriched data for email id = {0}. Error: {1}", activity.PrimaryColumnValue, ex); } } return(results); }