public async Task UpdateUserAvatarAsync(ICollection <AvatarLayer> selectionLayers) { var activeUserId = GetActiveUserId(); var currentCultureName = _userContextProvider.GetCurrentCulture()?.Name; var currentLanguageId = currentCultureName != null ? await _languageService.GetLanguageIdAsync(currentCultureName) : await _languageService.GetDefaultLanguageIdAsync(); var layers = await _avatarLayerRepository.GetAllAsync(GetCurrentSiteId()); if (layers.Count > 0) { foreach (var layer in layers.ToList()) { var layerText = _avatarLayerRepository .GetNameAndLabelByLanguageId(layer.Id, currentLanguageId); layer.Name = layerText["Name"]; layer.RemoveLabel = layerText["RemoveLabel"]; } } var elementList = new List <int>(); foreach (var layer in layers) { var selection = selectionLayers.FirstOrDefault(_ => _.Id == layer.Id); if (selection != default(AvatarLayer)) { var element = await _avatarElementRepository.GetByItemAndColorAsync( selection.SelectedItem.Value, selection.SelectedColor); if (element != default(AvatarElement) && (!element.AvatarItem.Unlockable || await _avatarItemRepository .HasUserUnlockedItemAsync(activeUserId, element.AvatarItemId))) { elementList.Add(element.Id); } else { _logger.LogWarning($"User {activeUserId} can't select item {selection.SelectedItem.Value} and color {selection.SelectedColor} for layer {layer.Id}."); throw new GraException($"Invalid selection for {layer.Name}"); } } else if (!layer.CanBeEmpty) { _logger.LogWarning($"User {activeUserId} can't have an empty selection for layer {layer.Id}."); throw new GraException($"A {layer.Name} must be selected"); } } await _avatarElementRepository.SetUserAvatarAsync(activeUserId, elementList); }
public async Task UpdateUserAvatarAsync(ICollection <AvatarLayer> selectionLayers) { var activeUserId = GetActiveUserId(); var layers = await _avatarLayerRepository.GetAllAsync(GetCurrentSiteId()); var elementList = new List <int>(); foreach (var layer in layers) { var selection = selectionLayers.Where(_ => _.Id == layer.Id).FirstOrDefault(); if (selection != default(AvatarLayer)) { var element = await _avatarElementRepository.GetByItemAndColorAsync( selection.SelectedItem.Value, selection.SelectedColor); if (element != default(AvatarElement) && (element.AvatarItem.Unlockable == false || await _avatarItemRepository .HasUserUnlockedItemAsync(activeUserId, element.AvatarItemId))) { elementList.Add(element.Id); } else { _logger.LogWarning($"User {activeUserId} can't select item {selection.SelectedItem.Value} and color {selection.SelectedColor} for layer {layer.Id}."); throw new GraException($"Invalid selection for {layer.Name}"); } } else if (!layer.CanBeEmpty) { _logger.LogWarning($"User {activeUserId} can't have an empty selection for layer {layer.Id}."); throw new GraException($"A {layer.Name} must be selected"); } } await _avatarElementRepository.SetUserAvatarAsync(activeUserId, elementList); }