private async Task UpdateParentAsync(List <ChannelSummary> summaries, int sourceId, IChannelSummary parent) { var source = await GetAsync(sourceId); source.ParentId = parent.Id; source.ParentsPath = ListUtils.Add(parent.ParentsPath, parent.Id); source.ParentsCount = source.ParentsPath.Count; await UpdateAsync(source); var childIds = summaries .Where(x => x.ParentId == source.Id) .Select(x => x.Id) .ToList(); if (childIds.Count > 0) { foreach (var childId in childIds) { await UpdateParentAsync(summaries, childId, source); } } }
public async Task UpdateTagsAsync(List <string> previousTags, List <string> nowTags, int siteId, int contentId) { if (ListUtils.Equals(previousTags, nowTags)) { return; } var tagsToRemove = new List <string>(); var tagsToAdd = new List <string>(); if (previousTags != null) { foreach (var tag in previousTags) { if (!nowTags.Contains(tag)) { tagsToRemove.Add(tag); } } } if (nowTags != null) { foreach (var tag in nowTags) { if (previousTags == null || !previousTags.Contains(tag)) { tagsToAdd.Add(tag); } } } var tags = await GetTagsAsync(siteId); foreach (var tagName in tagsToRemove) { var tag = ListUtils.FirstOrDefault(tags, x => x.TagName == tagName); if (tag == null) { continue; } ListUtils.Remove(tag.ContentIds, contentId); tag.UseNum = ListUtils.Count(tag.ContentIds); if (tag.UseNum == 0) { await DeleteAsync(siteId, tagName); } else { await UpdateAsync(tag); } } foreach (var tagName in tagsToAdd) { var tag = ListUtils.FirstOrDefault(tags, x => x.TagName == tagName); if (tag != null) { if (!ListUtils.Contains(tag.ContentIds, contentId)) { tag.ContentIds = ListUtils.Add(tag.ContentIds, contentId); tag.UseNum = tag.ContentIds.Count; await UpdateAsync(tag); } } else { tag = new ContentTag { SiteId = siteId, TagName = tagName, ContentIds = new List <int>(contentId), UseNum = 1 }; await InsertAsync(tag); } } }