/// <summary>
        /// Inserts the right stream for key identifier asynchronous.
        /// </summary>
        /// <param name="keyIdentifier">The key identifier.</param>
        /// <param name="stream">The stream.</param>
        /// <returns></returns>
        private async Task InsertRightStreamForKeyIdentifierAsync(int keyIdentifier, Stream stream)
        {
            string rightPartFilePath = GetFilePathForPart(DiffPartEnum.Right, keyIdentifier);

            #region Set Db part

            var diffPartsEnt = new DiffPartsEntity
            {
                KeyIdentifier       = keyIdentifier,
                RightPartFilePath   = rightPartFilePath,
                IsRightPartUpdating = true.ToString(),
                RightPartTimestamp  = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)
            };

            _genericRepository.Insert(diffPartsEnt);

            await _genericRepository.DbContext.SaveChangesAsync();

            #endregion

            await SaveFile(stream, rightPartFilePath);

            #region Set Db part

            diffPartsEnt.IsRightPartUpdating = false.ToString();

            _genericRepository.UpdateFieldsInEntity(diffPartsEnt,
                                                    new List <string> {
                $"{nameof(diffPartsEnt.IsRightPartUpdating)}"
            });

            await _genericRepository.DbContext.SaveChangesAsync();

            #endregion
        }
        /// <summary>
        /// Saves the serialized calculated diffs for key identifier asynchronous.
        /// </summary>
        /// <param name="keyIdentifier">The key identifier.</param>
        /// <param name="calculatedDiffs">The calculated diffs.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">calculatedDiffs</exception>
        /// <exception cref="System.ApplicationException">keyIdentifier</exception>
        public async Task SaveSerializedCalculatedDiffsForKeyIdentifierAsync(int keyIdentifier, string calculatedDiffs)
        {
            if (calculatedDiffs == null)
            {
                throw new ArgumentNullException($"'{nameof(calculatedDiffs)}' parameter must not be null");
            }

            int?id = await GetIdForKeyIdentifier(keyIdentifier);

            if (id == null)
            {
                throw new ApplicationException(
                          $"Could not find the {nameof(keyIdentifier)} = {keyIdentifier} in database");
            }

            var diffPartsEntity = new DiffPartsEntity
            {
                Id = id.Value,
                CalculatedDiffsMetadata          = calculatedDiffs,
                CalculatedDiffsMetadataTimestamp = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)
            };

            _genericRepository.UpdateFieldsInEntity(diffPartsEntity,
                                                    new List <string>
            {
                $"{nameof(diffPartsEntity.CalculatedDiffsMetadata)}",
                $"{nameof(diffPartsEntity.CalculatedDiffsMetadataTimestamp)}"
            });

            await _genericRepository.DbContext.SaveChangesAsync();
        }
        /// <summary>
        /// Updates the right stream for key identifier asynchronous.
        /// </summary>
        /// <param name="keyIdentifier">The key identifier.</param>
        /// <param name="stream">The stream.</param>
        /// <returns></returns>
        /// <exception cref="System.ApplicationException">keyIdentifier</exception>
        private async Task UpdateRightStreamForKeyIdentifierAsync(int keyIdentifier, Stream stream)
        {
            int?id = await GetIdForKeyIdentifier(keyIdentifier);

            if (id == null)
            {
                throw new ApplicationException(
                          $"Could not find the {nameof(keyIdentifier)} = {keyIdentifier} in database");
            }

            string rightPartFilePath = GetFilePathForPart(DiffPartEnum.Right, keyIdentifier);

            #region Set Db part

            var diffPartsEntity = new DiffPartsEntity
            {
                Id = id.Value,
                RightPartFilePath   = rightPartFilePath,
                IsRightPartUpdating = true.ToString(),
                RightPartTimestamp  = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)
            };

            _genericRepository.UpdateFieldsInEntity(diffPartsEntity,
                                                    new List <string>
            {
                $"{nameof(diffPartsEntity.RightPartFilePath)}",
                $"{nameof(diffPartsEntity.IsRightPartUpdating)}",
                $"{nameof(diffPartsEntity.RightPartTimestamp)}"
            });

            await _genericRepository.DbContext.SaveChangesAsync();

            #endregion

            await SaveFile(stream, rightPartFilePath);

            #region Set Db part

            diffPartsEntity.IsRightPartUpdating = false.ToString();

            _genericRepository.UpdateFieldsInEntity(diffPartsEntity,
                                                    new List <string>
            {
                $"{nameof(diffPartsEntity.IsRightPartUpdating)}"
            });

            await _genericRepository.DbContext.SaveChangesAsync();

            #endregion
        }