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); }
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"))); }