Пример #1
0
 public async Task <DynamicAvatarBundle> AddBundleAsync(DynamicAvatarBundle bundle)
 {
     VerifyManagementPermission();
     bundle.SiteId = GetCurrentSiteId();
     return(await _dynamicAvatarBundleRepository.AddSaveAsync(
                GetClaimId(ClaimType.UserId), bundle));
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }