Пример #1
0
        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 + "}");
        }
Пример #2
0
        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)));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }