public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync( SiocProduct parent , SiocCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; try { // Save Template var saveTemplate = await View.SaveModelAsync(true, _context, _transaction); result.IsSucceed = result.IsSucceed && saveTemplate.IsSucceed; if (!saveTemplate.IsSucceed) { result.Errors.AddRange(saveTemplate.Errors); result.Exception = saveTemplate.Exception; } // Save url alias if (result.IsSucceed) { UrlAlias.IsClone = IsClone; UrlAlias.Cultures = Cultures; UrlAlias.SourceId = parent.Id.ToString(); UrlAlias.Type = SWCmsConstants.UrlAliasType.Product; var saveUrl = await UrlAlias.SaveModelAsync(false, _context, _transaction); result.Errors.AddRange(saveUrl.Errors); result.Exception = saveUrl.Exception; result.IsSucceed = saveUrl.IsSucceed; } if (result.IsSucceed) { // Save Parent Category foreach (var item in Categories) { item.ProductId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { // Save Parent Modules foreach (var item in Modules) { item.ProductId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { // Save Children Category foreach (var item in ModuleNavs) { item.ProductId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(true, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } //save submodules data if (result.IsSucceed) { foreach (var module in ActivedModules) { module.Data.Items = new List <InfoModuleDataViewModel>(); foreach (var data in module.Data.JsonItems) { SiocModuleData model = new SiocModuleData() { Id = data.Value <string>("id") ?? Guid.NewGuid().ToString(), Specificulture = module.Specificulture, ProductId = parent.Id, ModuleId = module.Id, Fields = module.Fields, CreatedDateTime = DateTime.UtcNow, UpdatedDateTime = DateTime.UtcNow }; List <ModuleFieldViewModel> cols = module.Columns; JObject val = new JObject(); foreach (JProperty prop in data.Properties()) { var col = cols.FirstOrDefault(c => c.Name == prop.Name); if (col != null) { JObject fieldVal = new JObject { new JProperty("dataType", col.DataType), new JProperty("value", prop.Value) }; val.Add(new JProperty(prop.Name, fieldVal)); } } model.Value = val.ToString(Newtonsoft.Json.Formatting.None); var vmData = new InfoModuleDataViewModel(model); var saveResult = await vmData.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var navMedia in MediaNavs) { navMedia.ProductId = parent.Id; navMedia.Specificulture = parent.Specificulture; if (navMedia.IsActived) { var saveResult = await navMedia.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await navMedia.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var navProduct in ProductNavs) { navProduct.SourceId = parent.Id; navProduct.Specificulture = parent.Specificulture; if (navProduct.IsActived) { var saveResult = await navProduct.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await navProduct.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } return(result); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { result.IsSucceed = false; result.Exception = ex; return(result); } }
public override async Task <RepositoryResponse <bool> > SaveSubModelsAsync(SiocCategory parent, SiocCmsContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool> { IsSucceed = true }; var saveTemplate = await View.SaveModelAsync(true, _context, _transaction); result.IsSucceed = result.IsSucceed && saveTemplate.IsSucceed; if (saveTemplate.IsSucceed) { result.Errors.AddRange(saveTemplate.Errors); result.Exception = saveTemplate.Exception; } // Save url alias if (result.IsSucceed) { UrlAlias.IsClone = IsClone; UrlAlias.Cultures = Cultures; UrlAlias.Type = SWCmsConstants.UrlAliasType.Page; UrlAlias.SourceId = parent.Id.ToString(); var saveUrl = await UrlAlias.SaveModelAsync(false, _context, _transaction); result.Errors.AddRange(saveUrl.Errors); result.Exception = saveUrl.Exception; result.IsSucceed = saveUrl.IsSucceed; } if (result.IsSucceed) { foreach (var item in ModuleNavs) { item.CategoryId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var item in PositionNavs) { item.CategoryId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var item in ParentNavs) { item.Id = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } if (result.IsSucceed) { foreach (var item in ChildNavs) { item.ParentId = parent.Id; if (item.IsActived) { var saveResult = await item.SaveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } else { var saveResult = await item.RemoveModelAsync(false, _context, _transaction); result.IsSucceed = saveResult.IsSucceed; if (!result.IsSucceed) { result.Exception = saveResult.Exception; Errors.AddRange(saveResult.Errors); } } } } return(result); }