public async Task <ICollection <AvatarLayer> > GetUserWardrobeAsync() { var activeUserId = GetActiveUserId(); var siteId = GetCurrentSiteId(); var layers = await _avatarLayerRepository.GetAllWithColorsAsync( siteId, activeUserId); if (layers.Count > 0) { var userAvatar = await _avatarElementRepository.GetUserAvatarAsync(activeUserId); var bundleItems = new List <AvatarItem>(); if (userAvatar.Count == 0) { bundleItems = (await _avatarBundleRepository.GetRandomDefaultBundleAsync(siteId)).ToList(); } var filePath = _pathResolver.ResolveContentPath($"site{siteId}/avatars/"); foreach (var layer in layers) { layer.AvatarItems = await _avatarItemRepository .GetUserItemsByLayerAsync(activeUserId, layer.Id); layer.Icon = _pathResolver.ResolveContentPath(layer.Icon); if (userAvatar.Count > 0) { var layerSelection = userAvatar.Where(_ => _.AvatarItem.AvatarLayerId == layer.Id).SingleOrDefault(); if (layerSelection != null) { layer.SelectedItem = layerSelection.AvatarItemId; layer.SelectedColor = layerSelection.AvatarColorId; layer.FilePath = _pathResolver.ResolveContentPath(layerSelection.Filename); } else if (layer.AvatarColors.Count > 0) { layer.SelectedColor = layer.AvatarColors .ElementAt(new Random().Next(0, layer.AvatarColors.Count)).Id; } } else { if (layer.AvatarColors.Count > 0) { layer.SelectedColor = layer.AvatarColors .ElementAt(new Random().Next(0, layer.AvatarColors.Count)).Id; } if (bundleItems.Count > 0) { var layerSelection = bundleItems.Where(_ => _.AvatarLayerId == layer.Id).SingleOrDefault(); if (layerSelection != null) { layer.SelectedItem = layerSelection.Id; } } if (!layer.SelectedItem.HasValue && !layer.CanBeEmpty) { layer.SelectedItem = layer.AvatarItems.First().Id; } if (layer.SelectedItem.HasValue) { var fileName = "item"; if (layer.SelectedColor.HasValue) { fileName += $"_{layer.SelectedColor}"; } fileName += ".png"; layer.FilePath = Path.Combine(filePath, $"layer{layer.Id}", $"item{layer.SelectedItem}", fileName); } } } } return(layers.Where(_ => _.AvatarItems.Count > 0).ToList()); }
public async Task <ICollection <AvatarItem> > GetUsersItemsByLayerAsync(int layerId) { var userId = GetClaimId(ClaimType.UserId); return(await _avatarItemRepository.GetUserItemsByLayerAsync(userId, layerId)); }