From e064646dc91038a2ada5ef7c590d33dc865ade72 Mon Sep 17 00:00:00 2001 From: Timo Date: Tue, 1 Jun 2021 09:48:12 +0300 Subject: [PATCH] http api refactor --- .../file/dossier-template-model.wrapper.ts | 52 +++++++++++++++++++ .../src/app/models/file/type-value.wrapper.ts | 2 + ...sier-templates-listing-screen.component.ts | 4 +- .../watermark/watermark-screen.component.ts | 16 +++--- .../dossier-listing-actions.component.ts | 27 ---------- .../annotation-icon.component.ts | 1 - .../file-download-btn.component.ts | 4 +- .../dictionary-manager.component.ts | 2 +- .../services/file-download.service.ts | 8 +-- .../services/file-upload.service.ts | 2 +- .../src/app/services/permissions.service.ts | 2 +- .../red-ui/src/app/state/app-state.service.ts | 15 +++--- libs/red-ui-http/src/lib/api.module.ts | 4 +- libs/red-ui-http/src/lib/api/api.ts | 6 ++- .../api/fileManagementController.service.ts | 15 +++++- libs/red-ui-http/src/lib/model/fileStatus.ts | 2 +- libs/red-ui-http/src/lib/model/reportData.ts | 2 +- 17 files changed, 102 insertions(+), 62 deletions(-) create mode 100644 apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts diff --git a/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts b/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts new file mode 100644 index 000000000..8fcfada48 --- /dev/null +++ b/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts @@ -0,0 +1,52 @@ +import { DossierTemplateModel } from '@redaction/red-ui-http'; + +export class DossierTemplateModelWrapper { + dictionariesCount = 0; + totalDictionaryEntries = 0; + + constructor(public dossierTemplateModel: DossierTemplateModel) {} + + get createdBy() { + return this.dossierTemplateModel.createdBy; + } + + get dateAdded() { + return this.dossierTemplateModel.dateAdded; + } + + get dateModified() { + return this.dossierTemplateModel.dateModified; + } + + get description() { + return this.dossierTemplateModel.description; + } + + get dossierTemplateId() { + return this.dossierTemplateModel.dossierTemplateId; + } + + get downloadFileTypes() { + return this.dossierTemplateModel.downloadFileTypes; + } + + get modifiedBy() { + return this.dossierTemplateModel.modifiedBy; + } + + get name() { + return this.dossierTemplateModel.name; + } + + get reportTypes() { + return this.dossierTemplateModel.reportTypes; + } + + get validFrom() { + return this.dossierTemplateModel.validFrom; + } + + get validTo() { + return this.dossierTemplateModel.validTo; + } +} diff --git a/apps/red-ui/src/app/models/file/type-value.wrapper.ts b/apps/red-ui/src/app/models/file/type-value.wrapper.ts index 2afca4c19..0e9636b88 100644 --- a/apps/red-ui/src/app/models/file/type-value.wrapper.ts +++ b/apps/red-ui/src/app/models/file/type-value.wrapper.ts @@ -1,6 +1,8 @@ import { TypeValue } from '@redaction/red-ui-http'; export class TypeValueWrapper { + entries: string[] = []; + constructor(public typeValue: TypeValue, public label?: string, public virtual?: boolean) {} get addToDictionaryAction() { diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts index a33b1342f..7ca63e92c 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts @@ -4,7 +4,7 @@ import { PermissionsService } from '@services/permissions.service'; import { UserPreferenceService } from '@services/user-preference.service'; import { AdminDialogService } from '../../services/admin-dialog.service'; import { BaseListingComponent } from '@shared/base/base-listing.component'; -import { DossierTemplateModel } from '@redaction/red-ui-http'; +import { DossierTemplateModelWrapper } from '../../../../models/file/dossier-template-model.wrapper'; @Component({ selector: 'redaction-dossier-templates-listing-screen', @@ -12,7 +12,7 @@ import { DossierTemplateModel } from '@redaction/red-ui-http'; styleUrls: ['./dossier-templates-listing-screen.component.scss'] }) export class DossierTemplatesListingScreenComponent - extends BaseListingComponent + extends BaseListingComponent implements OnInit { protected readonly _searchKey = 'name'; diff --git a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts index 209051962..8a1bd4f07 100644 --- a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts @@ -6,20 +6,20 @@ import { environment } from '@environments/environment'; import { HttpClient } from '@angular/common/http'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { debounce } from '@utils/debounce'; -import { WatermarkControllerService, WatermarkModel } from '@redaction/red-ui-http'; +import { WatermarkControllerService, WatermarkModelRes } from '@redaction/red-ui-http'; import { NotificationService, NotificationType } from '@services/notification.service'; import { TranslateService } from '@ngx-translate/core'; import { ActivatedRoute } from '@angular/router'; import { hexToRgb } from '@utils/functions'; import { BASE_HREF } from '../../../../tokens'; -export const DEFAULT_WATERMARK: WatermarkModel = { +export const DEFAULT_WATERMARK: WatermarkModelRes = { text: null, hexColor: '#dd4d50', opacity: 70, fontSize: 11, fontType: 'sans-serif', - orientation: WatermarkModel.WatermarkOrientationEnum.DIAGONAL + orientation: WatermarkModelRes.OrientationEnum.DIAGONAL }; @Component({ @@ -31,7 +31,7 @@ export class WatermarkScreenComponent implements OnInit { viewReady = false; configForm: FormGroup; private _instance: WebViewerInstance; - private _watermark: WatermarkModel = {}; + private _watermark: WatermarkModelRes = {}; @ViewChild('viewer', { static: true }) private _viewer: ElementRef; @@ -194,7 +194,7 @@ export class WatermarkScreenComponent implements OnInit { const text = this.configForm.get('text').value || ''; const fontSize = this.configForm.get('fontSize').value; const fontType = this.configForm.get('fontType').value; - const orientation: WatermarkModel.WatermarkOrientationEnum = + const orientation: WatermarkModelRes.OrientationEnum = this.configForm.get('orientation').value; const opacity = this.configForm.get('opacity').value; const color = this.configForm.get('hexColor').value; @@ -208,13 +208,13 @@ export class WatermarkScreenComponent implements OnInit { await stamper.setOpacity(opacity / 100); switch (orientation) { - case WatermarkModel.WatermarkOrientationEnum.VERTICAL: + case WatermarkModelRes.OrientationEnum.VERTICAL: await stamper.setAlignment(0, 0); await stamper.setRotation(-90); break; - case WatermarkModel.WatermarkOrientationEnum.HORIZONTAL: + case WatermarkModelRes.OrientationEnum.HORIZONTAL: break; - case WatermarkModel.WatermarkOrientationEnum.DIAGONAL: + case WatermarkModelRes.OrientationEnum.DIAGONAL: default: await stamper.setAlignment(0, 0); await stamper.setRotation(-45); diff --git a/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts b/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts index 5c4f99666..80df84c54 100644 --- a/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts @@ -2,8 +2,6 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { PermissionsService } from '@services/permissions.service'; import { DossierWrapper } from '@state/model/dossier.wrapper'; import { StatusSorter } from '@utils/sorters/status-sorter'; -import { download } from '@utils/file-download-utils'; -import { computerize } from '@utils/functions'; import { FileManagementControllerService } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { DossiersDialogService } from '../../services/dossiers-dialog.service'; @@ -44,31 +42,6 @@ export class DossierListingActionsComponent { }); } - // Download Files - downloadRedactedFiles($event: MouseEvent, dossier: DossierWrapper) { - $event.stopPropagation(); - this._fileManagementControllerService - .downloadRedactedFiles( - { fileIds: dossier.files.map((file) => file.fileId) }, - dossier.dossierId, - false, - 'response' - ) - .subscribe((data) => { - download(data, 'redacted_files_' + computerize(dossier.name) + '.zip'); - }); - } - - canDownloadRedactedFiles(dossier: DossierWrapper) { - return ( - dossier.files.length > 0 && - dossier.files.reduce( - (acc, file) => acc && this.permissionsService.canDownloadRedactedFile(file), - true - ) - ); - } - getDossierStatusConfig(pw: DossierWrapper) { const obj = pw.files.reduce((acc, file) => { const status = file.status; diff --git a/apps/red-ui/src/app/modules/shared/components/annotation-icon/annotation-icon.component.ts b/apps/red-ui/src/app/modules/shared/components/annotation-icon/annotation-icon.component.ts index 3dfca2b33..6d0fcc49a 100644 --- a/apps/red-ui/src/app/modules/shared/components/annotation-icon/annotation-icon.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/annotation-icon/annotation-icon.component.ts @@ -1,5 +1,4 @@ import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; -import { TypeValue } from '@redaction/red-ui-http'; import { TypeValueWrapper } from '@models/file/type-value.wrapper'; @Component({ diff --git a/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts b/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts index f3a491cea..04d942662 100644 --- a/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts @@ -34,12 +34,12 @@ export class FileDownloadBtnComponent { return ( this.file.length > 0 && this.file.reduce( - (acc, file) => acc && this._permissionsService.canDownloadRedactedFile(file), + (acc, file) => acc && this._permissionsService.canDownloadFiles(file), true ) ); } else { - return this._permissionsService.canDownloadRedactedFile(this.file); + return this._permissionsService.canDownloadFiles(this.file); } } diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts index 30da32c0e..4db3243cf 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts @@ -44,7 +44,7 @@ export class DictionaryManagerComponent implements OnChanges { searchText = ''; selectDossierTemplate = { name: 'dictionary-overview.compare.select-dossier-template' }; - selectDictionary = { label: 'dictionary-overview.compare.select-dictionary' }; + selectDictionary = new TypeValueWrapper(null, 'dictionary-overview.compare.select-dictionary'); dossierTemplates: DossierTemplateModel[]; dictionaries: TypeValueWrapper[] = [this.selectDictionary]; form: FormGroup; diff --git a/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts b/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts index 45f66edeb..a08c6d854 100644 --- a/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts +++ b/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts @@ -41,13 +41,7 @@ export class FileDownloadService { return this._downloadControllerService .prepareDownload({ fileIds: fileStatusWrappers.map((f) => f.fileId), - dossierId: dossier.dossierId, - reportTypes: [ - 'WORD_SINGLE_FILE_EFSA_TEMPLATE', - 'WORD_SINGLE_FILE_SYNGENTA_TEMPLATE', - 'EXCEL_MULTI_FILE' - ], - downloadFileTypes: ['PREVIEW', 'REDACTED'] + dossierId: dossier.dossierId }) .pipe(mergeMap(() => this.getDownloadStatus())); } diff --git a/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts b/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts index 184ee7f46..b028f1871 100644 --- a/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts +++ b/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts @@ -7,7 +7,7 @@ import { AppConfigKey, AppConfigService } from '@app-config/app-config.service'; import { TranslateService } from '@ngx-translate/core'; import { UploadDownloadDialogService } from './upload-download-dialog.service'; import { toNumber } from '@utils/functions'; -import { UploadControllerService } from '../../../../../../../libs/red-ui-http/src/lib/api/uploadController.service'; +import { UploadControllerService } from '@redaction/red-ui-http'; export interface ActiveUpload { subscription: Subscription; diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index a60a97a90..38a20316d 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -296,7 +296,7 @@ export class PermissionsService { ); } - canDownloadRedactedFile(fileStatus: FileStatusWrapper) { + canDownloadFiles(fileStatus: FileStatusWrapper) { if (!fileStatus) { fileStatus = this._appStateService.activeFile; } diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index 692e492a3..9bc3732cc 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -4,7 +4,6 @@ import { Dossier, DossierControllerService, DossierTemplateControllerService, - DossierTemplateModel, FileAttributesConfig, FileAttributesControllerService, FileStatus, @@ -21,10 +20,11 @@ import { humanize } from '@utils/functions'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { DossierWrapper } from './model/dossier.wrapper'; import { TypeValueWrapper } from '@models/file/type-value.wrapper'; +import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper'; export interface AppState { dossiers: DossierWrapper[]; - dossierTemplates: DossierTemplateModel[]; + dossierTemplates: DossierTemplateModelWrapper[]; activeDossierId: string; activeFileId: string; activeDossierTemplateId: string; @@ -99,11 +99,11 @@ export class AppStateService { return this._appState.activeDossierTemplateId; } - get activeDossierTemplate(): DossierTemplateModel { + get activeDossierTemplate(): DossierTemplateModelWrapper { return this.getDossierTemplateById(this.activeDossierTemplateId); } - get dossierTemplates(): DossierTemplateModel[] { + get dossierTemplates(): DossierTemplateModelWrapper[] { return this._appState.dossierTemplates; } @@ -206,7 +206,7 @@ export class AppStateService { return color ? color : this._dictionaryData[dossierTemplateId]['default'].hexColor; } - getDossierTemplateById(id: string): DossierTemplateModel { + getDossierTemplateById(id: string): DossierTemplateModelWrapper { return this.dossierTemplates.find((rs) => rs.dossierTemplateId === id); } @@ -429,9 +429,12 @@ export class AppStateService { } async loadAllDossierTemplates() { - this._appState.dossierTemplates = await this._dossierTemplateControllerService + const dossierTemplates = await this._dossierTemplateControllerService .getAllDossierTemplates1() .toPromise(); + this._appState.dossierTemplates = dossierTemplates.map( + (dossierTemplate) => new DossierTemplateModelWrapper(dossierTemplate) + ); this._appState.fileAttributesConfig = {}; for (const dossierTemplate of this._appState.dossierTemplates) { this._appState.fileAttributesConfig[dossierTemplate.dossierTemplateId] = diff --git a/libs/red-ui-http/src/lib/api.module.ts b/libs/red-ui-http/src/lib/api.module.ts index 7e7fa6e10..d2c91f7fd 100644 --- a/libs/red-ui-http/src/lib/api.module.ts +++ b/libs/red-ui-http/src/lib/api.module.ts @@ -23,6 +23,7 @@ import { DigitalSignatureControllerService } from './api/digitalSignatureControl import { AuditControllerService } from './api/auditController.service'; import { FileAttributesControllerService } from './api/fileAttributesController.service'; import { SmtpConfigurationControllerService } from './api/smtpConfigurationController.service'; +import { UploadControllerService } from './api/uploadController.service'; @NgModule({ imports: [], @@ -49,7 +50,8 @@ import { SmtpConfigurationControllerService } from './api/smtpConfigurationContr DownloadControllerService, DigitalSignatureControllerService, FileAttributesControllerService, - SmtpConfigurationControllerService + SmtpConfigurationControllerService, + UploadControllerService ] }) export class ApiModule { diff --git a/libs/red-ui-http/src/lib/api/api.ts b/libs/red-ui-http/src/lib/api/api.ts index 762b8d248..bd27628a0 100644 --- a/libs/red-ui-http/src/lib/api/api.ts +++ b/libs/red-ui-http/src/lib/api/api.ts @@ -22,6 +22,7 @@ import { DigitalSignatureControllerService } from './digitalSignatureController. import { FileAttributesControllerService } from './fileAttributesController.service'; import { SmtpConfigurationControllerService } from './smtpConfigurationController.service'; import { ReportTemplateControllerService } from './reportTemplateController.service'; +import { UploadControllerService } from './uploadController.service'; export * from './auditController.service'; @@ -71,6 +72,8 @@ export * from './smtpConfigurationController.service'; export * from './reportTemplateController.service'; +export * from './uploadController.service'; + export const APIS = [ AuditControllerService, DebugControllerService, @@ -95,5 +98,6 @@ export const APIS = [ DigitalSignatureControllerService, FileAttributesControllerService, SmtpConfigurationControllerService, - ReportTemplateControllerService + ReportTemplateControllerService, + UploadControllerService ]; diff --git a/libs/red-ui-http/src/lib/api/fileManagementController.service.ts b/libs/red-ui-http/src/lib/api/fileManagementController.service.ts index ac89bbb26..919de87fe 100644 --- a/libs/red-ui-http/src/lib/api/fileManagementController.service.ts +++ b/libs/red-ui-http/src/lib/api/fileManagementController.service.ts @@ -301,27 +301,34 @@ export class FileManagementControllerService { dossierId: string, fileId: string, inline?: boolean, + indicator?: string, observe?: 'body', reportProgress?: boolean ): Observable; + public downloadOriginalFile( dossierId: string, fileId: string, inline?: boolean, + indicator?: string, observe?: 'response', reportProgress?: boolean ): Observable>; + public downloadOriginalFile( dossierId: string, fileId: string, inline?: boolean, + indicator?: string, observe?: 'events', reportProgress?: boolean ): Observable>; + public downloadOriginalFile( dossierId: string, fileId: string, inline?: boolean, + indicator?: string, observe: any = 'body', reportProgress: boolean = false ): Observable { @@ -341,6 +348,9 @@ export class FileManagementControllerService { if (inline !== undefined && inline !== null) { queryParameters = queryParameters.set('inline', inline); } + if (indicator !== undefined && indicator !== null) { + queryParameters = queryParameters.set('indicator', indicator); + } let headers = this.defaultHeaders; @@ -361,12 +371,13 @@ export class FileManagementControllerService { headers = headers.set('Accept', httpHeaderAcceptSelected); } - return this.httpClient.request( + return this.httpClient.request( 'get', - `${this.basePath}/redaction-gateway-v1/download/original/${encodeURIComponent( + `${this.basePath}/download/original/${encodeURIComponent( String(dossierId) )}/${encodeURIComponent(String(fileId))}`, { + responseType: 'blob', params: queryParameters, withCredentials: this.configuration.withCredentials, headers: headers, diff --git a/libs/red-ui-http/src/lib/model/fileStatus.ts b/libs/red-ui-http/src/lib/model/fileStatus.ts index b37b93eda..2076c7c7e 100644 --- a/libs/red-ui-http/src/lib/model/fileStatus.ts +++ b/libs/red-ui-http/src/lib/model/fileStatus.ts @@ -155,7 +155,7 @@ export namespace FileStatus { ERROR: 'ERROR' as StatusEnum, EXCLUDED: 'EXCLUDED' as StatusEnum, FULLREPROCESS: 'FULLREPROCESS' as StatusEnum, - OCRPROCESSING: 'OCR_PROCESSING' as StatusEnum, + OCR_PROCESSING: 'OCR_PROCESSING' as StatusEnum, PROCESSING: 'PROCESSING' as StatusEnum, REPROCESS: 'REPROCESS' as StatusEnum, UNASSIGNED: 'UNASSIGNED' as StatusEnum, diff --git a/libs/red-ui-http/src/lib/model/reportData.ts b/libs/red-ui-http/src/lib/model/reportData.ts index 17174114e..990c6aea7 100644 --- a/libs/red-ui-http/src/lib/model/reportData.ts +++ b/libs/red-ui-http/src/lib/model/reportData.ts @@ -40,7 +40,7 @@ export namespace ReportData { ERROR: 'ERROR' as StatusEnum, EXCLUDED: 'EXCLUDED' as StatusEnum, FULLREPROCESS: 'FULLREPROCESS' as StatusEnum, - OCRPROCESSING: 'OCR_PROCESSING' as StatusEnum, + OCR_PROCESSING: 'OCR_PROCESSING' as StatusEnum, PROCESSING: 'PROCESSING' as StatusEnum, REPROCESS: 'REPROCESS' as StatusEnum, UNASSIGNED: 'UNASSIGNED' as StatusEnum,