private async Task UpdateConfigEntryAsync(GameConfigurationUpdateRequest <TConfigType> request, int ownershipId, CancellationToken token = default)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            switch (request.Source)
            {
            case ConfigurationSourceType.Account:
            {
                var entry = await AccountConfigRepository.RetrieveAsync(new GameConfigurationKey <TConfigType>(ownershipId, request.ConfigType), token);

                entry.Data = new GameConfigData(request.Data);
                await AccountConfigRepository.UpdateAsync(new GameConfigurationKey <TConfigType>(ownershipId, request.ConfigType), entry, token);

                return;
            }

            case ConfigurationSourceType.Character:
            {
                var entry = await CharacterConfigRepository.RetrieveAsync(new GameConfigurationKey <TConfigType>(ownershipId, request.ConfigType), token);

                entry.Data = new GameConfigData(request.Data);
                await CharacterConfigRepository.UpdateAsync(new GameConfigurationKey <TConfigType>(ownershipId, request.ConfigType), entry, token);

                return;
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(request.Source), request.Source, null);
            }
        }