/// <summary> /// Конвертировать из модели базы данных в запрос /// </summary> public static PackageDataRequestServer PackageDataToRequest(PackageDataEntity packageDataEntity) => packageDataEntity != null ? new PackageDataRequestServer(Guid.Parse(packageDataEntity.Id), ConvertingSettingsToRequest(packageDataEntity.ConvertingSettings), packageDataEntity.FileDataEntities.Select(FileDataToRequest).ToList(), packageDataEntity.AttemptingConvertCount) : PackageDataRequestServer.EmptyPackage;
/// <summary> /// Обновить модель базы данных на основе промежуточного ответа с данными /// </summary> public static void UpdateFileDataFromIntermediateResponse(PackageDataEntity packageDataEntity, FileDataResponseServer fileDataResponseServer) { if (CheckStatusProcessing.CompletedStatusProcessingProject. Contains(packageDataEntity.StatusProcessingProject)) { return; } var fileDataEntity = packageDataEntity.FileDataEntities.First(fileData => fileData.FilePath == fileDataResponseServer.FilePath); UpdateFileDataFromResponse(fileDataEntity, fileDataResponseServer); }
/// <summary> /// Конвертировать пакет в архивную версию базы данных /// </summary> public static PackageDataEntity PackageDataToArchive(PackageDataEntity packageDataEntity) { packageDataEntity.StatusProcessingProject = StatusProcessingProject.Archived; foreach (var fileDataEntity in packageDataEntity.FileDataEntities) { fileDataEntity.StatusProcessing = StatusProcessing.Archive; fileDataEntity.FileDataSource = null; fileDataEntity.FileDataSourceAdditional = null; foreach (var fileDataSourceEntity in fileDataEntity.FileDataSourceServerEntities) { fileDataSourceEntity.FileDataSource = null; } } return(packageDataEntity); }
/// <summary> /// Обновить модель базы данных на основе промежуточного ответа /// </summary> public static PackageDataEntity UpdatePackageDataFromShortResponse(PackageDataEntity packageDataEntity, PackageDataShortResponseServer packageDataShortResponse) { packageDataEntity.StatusProcessingProject = packageDataShortResponse.StatusProcessingProject; var filesDataIntermediateEntity = packageDataEntity.FileDataEntities. Join(packageDataShortResponse.FilesData, fileEntity => fileEntity.FilePath, filesIntermediateResponse => filesIntermediateResponse.FilePath, UpdateFileDataFromShortResponse). ToList(); packageDataEntity.FileDataEntities = filesDataIntermediateEntity; return(packageDataEntity); }
/// <summary> /// Проверка правильности загружаемого пакета /// </summary> private void ValidatePackage(IResultValue <PackageDataRequestServer> packageDataRequest, PackageDataEntity packageDataEntity, string identityServerName) { const int attemptingConvertCount = 2; if (packageDataRequest.OkStatus && packageDataEntity?.AttemptingConvertCount <= attemptingConvertCount) { packageDataEntity?.StartConverting(identityServerName); } else if (packageDataRequest.HasErrors && packageDataEntity?.AttemptingConvertCount <= attemptingConvertCount) { packageDataEntity?.AddAttemptingCount(); } else { packageDataEntity?.ErrorConverting(identityServerName); } }
/// <summary> /// Обновить модель базы данных на основе окончательного ответа /// </summary> public static PackageDataEntity UpdatePackageDataFromResponse(PackageDataEntity packageDataEntity, PackageDataResponseServer packageDataResponse) { if (CheckStatusProcessing.CompletedStatusProcessingProject. Contains(packageDataEntity.StatusProcessingProject)) { return(packageDataEntity); } packageDataEntity.StatusProcessingProject = packageDataResponse.StatusProcessingProject; var fileDataEntities = packageDataEntity.FileDataEntities. Join(packageDataResponse.FilesData, fileEntity => fileEntity.FilePath, fileResponse => fileResponse.FilePath, UpdateFileDataFromResponse). ToList(); packageDataEntity.FileDataEntities = fileDataEntities; return(packageDataEntity); }
/// <summary> /// Получить данные о количестве пакетов и файлов в очереди на конвертирование /// </summary> private static async Task <FilesQueueInfo> GetQueueCount(IUnitOfWork unitOfWork, PackageDataEntity packageDataEntity) { var packageData = unitOfWork.Session.Query <PackageDataEntity>(). Where(package => !CheckStatusProcessing.CompletedStatusProcessingProject.Contains(package.StatusProcessingProject) && package.CreationDateTime < packageDataEntity.CreationDateTime); int packagesInQueueCount = await packageData.CountAsync(); int filesInQueueCount = await packageData.SelectMany(package => package.FileDataEntities). Where(file => !CheckStatusProcessing.CompletedStatusProcessing.Contains(file.StatusProcessing)). CountAsync(); return(new FilesQueueInfo(filesInQueueCount, packagesInQueueCount)); }
/// <summary> /// Конвертировать из модели базы данных в основной ответ /// </summary> public static PackageDataResponseClient PackageDataAccessToResponse(PackageDataEntity packageDataEntity) => new PackageDataResponseClient(Guid.Parse(packageDataEntity.Id), packageDataEntity.StatusProcessingProject, packageDataEntity.FileDataEntities.Select(FileDataAccessToResponse).ToList());
/// <summary> /// Конвертировать из модели базы данных в промежуточную /// </summary> public static PackageDataShortResponseClient PackageDataToIntermediateResponse(PackageDataEntity packageDataEntity, FilesQueueInfo filesQueueInfo) => new PackageDataShortResponseClient(Guid.Parse(packageDataEntity.Id), packageDataEntity.StatusProcessingProject, packageDataEntity.FileDataEntities.Select(FileDataAccessToIntermediateResponse).ToList(), FilesQueueInfoToResponse(filesQueueInfo));
/// <summary> /// Преобразовать в транспортную модель /// </summary> public static HistoryDataResponse ToResponse(PackageDataEntity package) => new HistoryDataResponse(Guid.Parse(package.Id), package.CreationDateTime, package.IdentityLocalName, package.StatusProcessingProject, package.FileDataEntities.Count);
/// <summary> /// Проверить статус пакета. При отмене - удалить /// </summary> private static async Task <bool> DeleteFilesDataOnAbortionStatus(IUnitOfWork unitOfWork, PackageDataEntity packageDataEntity) { if (packageDataEntity.StatusProcessingProject == StatusProcessingProject.Abort) { await unitOfWork.Session.DeleteAsync(packageDataEntity); } return(packageDataEntity.StatusProcessingProject == StatusProcessingProject.Abort); }