public async Task <DynamicAvatarBundle> AddBundleAsync(DynamicAvatarBundle bundle) { VerifyManagementPermission(); bundle.SiteId = GetCurrentSiteId(); return(await _dynamicAvatarBundleRepository.AddSaveAsync( GetClaimId(ClaimType.UserId), bundle)); }
public async Task <DynamicAvatarBundle> AddBundleAsync(DynamicAvatarBundle bundle, List <int> itemIds) { VerifyManagementPermission(); var items = await _dynamicAvatarItemRepository.GetByIdsAsync(itemIds); if (items.Where(_ => _.Unlockable != bundle.CanBeUnlocked).Any()) { throw new GraException($"Not all items are {(bundle.CanBeUnlocked ? "Unlockable" : "Available")}."); } if (bundle.CanBeUnlocked == false && items.GroupBy(_ => _.DynamicAvatarLayerId).Where(_ => _.Skip(1).Any()).Any()) { throw new GraException($"Default bundles cannot have multiple items per layer."); } bundle.SiteId = GetCurrentSiteId(); var newBundle = await _dynamicAvatarBundleRepository.AddSaveAsync( GetClaimId(ClaimType.UserId), bundle); await _dynamicAvatarBundleRepository.AddItemsAsync(newBundle.Id, itemIds); return(newBundle); }
public async Task <DynamicAvatarBundle> EditBundleAsync(DynamicAvatarBundle bundle, List <int> itemIds) { VerifyManagementPermission(); var currentBundle = await _dynamicAvatarBundleRepository.GetByIdAsync(bundle.Id, false); if (currentBundle.HasBeenAwarded) { throw new GraException($"This bundle has been awarded to a participant and can no longer be edited. "); } var items = await _dynamicAvatarItemRepository.GetByIdsAsync(itemIds); if (items.Where(_ => _.Unlockable != currentBundle.CanBeUnlocked).Any()) { throw new GraException($"Not all items are {(bundle.CanBeUnlocked ? "Unlockable" : "Available")}."); } if (currentBundle.CanBeUnlocked == false && items.GroupBy(_ => _.DynamicAvatarLayerId).Where(_ => _.Skip(1).Any()).Any()) { throw new GraException($"Default bundles cannot have multiple items per layer."); } currentBundle.Name = bundle.Name; await _dynamicAvatarBundleRepository.UpdateSaveAsync(GetClaimId(ClaimType.UserId), currentBundle); var currentItemIds = currentBundle.DynamicAvatarItems.Select(_ => _.Id).ToList(); var itemsToRemove = currentItemIds.Except(itemIds).ToList(); var itemsToAdd = itemIds.Except(currentItemIds).ToList(); await _dynamicAvatarBundleRepository.RemoveItemsAsync(currentBundle.Id, itemsToRemove); await _dynamicAvatarBundleRepository.AddItemsAsync(currentBundle.Id, itemsToAdd); return(currentBundle); }