public virtual async Task <Tag> AddTag(string commonIdentifier, string tag, string index) { var dbtag = new Tag { Name = tag, Key = GetHash(tag), RegisteredBy = GetFriendlyName() }; dbtag.SetProject(GetTeam()); if (!dbtag.IsLegal()) { throw new Exception("Tag var ugyldig"); } await Di.GetInstance <IJsonStorage <Tag> >().Put(dbtag); if (String.Equals(index, IndexTypeName.Person.ToString(), StringComparison.CurrentCultureIgnoreCase)) { await _personIndex.AddToPropertyList(commonIdentifier, "Tags", dbtag.Key); } else { await _busIndex.AddToPropertyList(commonIdentifier, "Tags", dbtag.Key); } return(dbtag); }
public virtual async Task <bool> On(string commonidentifier, string actionKey, string actionInstanceId, int registerEnvironment, [FromBody] string content) { if (string.IsNullOrEmpty(content)) { throw new ArgumentException("Content was null"); } var surveillanceAction = Di.GetInstance <ISurveillanceAction>(actionKey); if (!surveillanceAction.ValidJson(content)) { throw new ArgumentException("Content was not in the right format given actionkey: " + actionKey); } var claimDb = Di.GetInstance <ITableStorageDb <SurveilledItem> >(); await claimDb.InsertAsync(new SurveilledItem(actionKey, actionInstanceId, GetTeam()) { RegisteredByFriendlyName = GetFriendlyName(), RegisteredByUsername = GetEmail(), ClaimedWhen = DateTime.Now, ContentAsJson = content, RegisterEnvironmentInt = registerEnvironment, CommonIdentifier = commonidentifier }, true, true); var team = GetTeam().Id; await _personIndex.AddToPropertyList(commonidentifier, "Teams", team.ToString()); return(true); }
public async Task <int> SyncPersonsWithTeams(ILog logger, bool pushEvenIfNotPersonExistsOnIndex = false) { var allSurveillanceItems = GetAllSurveillanceItems() .Where(person => !string.IsNullOrEmpty(person.CommonIdentifier)) .ToList(); var allWithTeams = (await _index.GetCompleteSet("", "teams/any()")).Where(x => x.Teams != null & x.Teams.Any()).ToDictionary(x => x.CommonIdentifier, y => y); var missingOnIndex = allSurveillanceItems .Where(x => !string.IsNullOrEmpty(x.CommonIdentifier) && !allWithTeams.ContainsKey(x.CommonIdentifier)) .ToList(); var pushThisBatch = new Dictionary <string, TModel>(); foreach (var missedItem in missingOnIndex) { var itemOnIndex = await _index.GetByKey(missedItem.CommonIdentifier, false); if (itemOnIndex != null) { await _index.AddToPropertyList(missedItem.CommonIdentifier, "Teams", missedItem.TeamProjectInt.ToString()); } else { if (pushEvenIfNotPersonExistsOnIndex) { if (pushThisBatch.ContainsKey(missedItem.CommonIdentifier)) { pushThisBatch[missedItem.CommonIdentifier].Teams.Add(missedItem.TeamProjectInt.ToString()); } else { pushThisBatch.Add(missedItem.CommonIdentifier, new TModel { CommonIdentifier = missedItem.CommonIdentifier, Teams = new string[] { missedItem.TeamProjectInt.ToString() } }); } } else { logger.Warn($"Item with commonidentifier {missedItem.CommonIdentifier} was missing on index, but couldnt find this entry on the index. Continuing"); } } } if (pushThisBatch.Any()) { await _index.MergeOrUploadBatch(pushThisBatch.Values.ToArray()); } return(missingOnIndex.Count); }