public async Task <string> EncodeEntity(string entityName, string identifier, IDictionary <string, string> propertyValues) { var entity = string.Empty; foreach (var item in propertyValues) { var propertyType = await _hashClient.GetHashField(Helpers.GetEntityPropertyTypesKey(entityName), item.Key.ToLower()); if (string.IsNullOrEmpty(propertyType)) { throw new NonExistentPropertyException(item.Key); } var value = item.Value; await AddPropertyToStore(entityName, identifier, propertyType, item.Key, item.Value); Enum.TryParse(propertyType, true, out TypeNames type); if (Helpers.QuotedValue(type)) { value = $"\"{item.Value}\""; } entity += $" \"{item.Key}\": {value}, {Environment.NewLine}"; } return("{" + Environment.NewLine + entity + "}"); }
public async Task <string> ConstructWhereStatementFromIdentifiers <TEntity>(TEntity entity) { bool KeyDefined(MemberInfo info) => info.IsDefined(Constants.KeyAttributeType); var entityType = typeof(TEntity); var entityName = entityType.Name.ToLower(); var identifiers = new Dictionary <string, string>(); entityType.GetFields().Where(KeyDefined).ToList().ForEach(x => identifiers.Add(x.Name, x.GetValue(entity).ToString())); entityType.GetProperties().Where(KeyDefined).ToList().ForEach(x => identifiers.Add(x.Name, x.GetValue(entity).ToString())); if (!identifiers.Any()) { throw new KeyAttributeMissingException(); } var whereStatement = string.Empty; var andKeyword = Keywords.And.ToString(); foreach (var identifier in identifiers) { var value = identifier.Value; var propertyType = await _hashClient.GetHashField(Helpers.GetEntityPropertyTypesKey(entityName), identifier.Key.ToLower()); if (string.IsNullOrEmpty(propertyType)) { throw new NonExistentPropertyException(identifier.Key); } Enum.TryParse(propertyType, true, out TypeNames type); if (Helpers.QuotedValue(type)) { value = $"'{value}'"; } whereStatement += $"{identifier.Key} = {value} {andKeyword} "; } return(whereStatement.Substring(0, whereStatement.Length - 1 - (andKeyword.Length + 1))); }
private async Task UpdateProperty(string propertyName, string oldValue, string newValue, string entityName, string key) { var propertyTypeName = await _hashClient.GetHashField(Helpers.GetEntityPropertyTypesKey(entityName), propertyName); await _deltionEngine.PurgeProperty(entityName, key, propertyName, oldValue, propertyTypeName); await _insertionEngine.AddPropertyToStore(entityName, key, propertyTypeName, propertyName, newValue); }
private async Task DeleteEntityByKey(string entityName, string key) { var entityStoreKey = Helpers.GetEntityStoreKey(entityName, key); var encodedEntity = await _stringClient.GetValue(entityStoreKey); var entity = JsonConvert.DeserializeObject <dynamic>(encodedEntity); await _stringClient.DeleteValue(entityStoreKey); await _stringClient.DecrementValue(Helpers.GetEntityCountKey(entityName)); await _setClient.RemoveFromSetByValue(Helpers.GetEntityIdentifierCollectionKey(entityName), key); foreach (var property in entity) { var name = property.Name; var propertyTypeName = await _hashClient.GetHashField(Helpers.GetEntityPropertyTypesKey(entityName), name); var value = (property as IEnumerable <dynamic>)?.FirstOrDefault()?.Value?.ToString(); await PurgeProperty(entityName, key, name, value, propertyTypeName); } }