Пример #1
0
        async Task <IEnumerable <CategoryData> > SerializeMetaDataAsync(TCategory category)
        {
            // Get all existing entity data
            var data = await _categoryDataStore.GetByCategoryIdAsync(category.Id);

            // Prepare list to search, use dummy list if needed
            var dataList = data?.ToList() ?? new List <CategoryData>();

            // Iterate all meta data on the supplied object,
            // check if a key already exists, if so update existing key
            var output = new List <CategoryData>();

            foreach (var item in category.MetaData)
            {
                var key        = item.Key.FullName;
                var entityData = dataList.FirstOrDefault(d => d.Key == key);
                if (entityData != null)
                {
                    entityData.Value = item.Value.Serialize();
                }
                else
                {
                    entityData = new CategoryData()
                    {
                        Key   = key,
                        Value = item.Value.Serialize()
                    };
                }

                output.Add(entityData);
            }

            return(output);
        }
Пример #2
0
        public async Task <ICommandResult <TCategory> > DeleteAsync(TCategory model)
        {
            // Validate
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            // Publish CategoryDeleting event
            foreach (var handler in _broker.Pub <TCategory>(this, "CategoryDeleting"))
            {
                model = await handler.Invoke(new Message <TCategory>(model, this));
            }

            var result = new CommandResult <TCategory>();

            if (await _categoryStore.DeleteAsync(model))
            {
                // Delete category roles
                await _categoryRoleStore.DeleteByCategoryIdAsync(model.Id);

                // Delete category data
                var data = await _categoryDataStore.GetByCategoryIdAsync(model.Id);

                if (data != null)
                {
                    foreach (var item in data)
                    {
                        await _categoryDataStore.DeleteAsync(item);
                    }
                }

                // Publish CategoryDeleted event
                foreach (var handler in _broker.Pub <TCategory>(this, "CategoryDeleted"))
                {
                    model = await handler.Invoke(new Message <TCategory>(model, this));
                }

                // Return success
                return(result.Success());
            }

            return(result.Failed(new CommandError("An unknown error occurred whilst attempting to delete the category")));
        }