From b52ad9d7862628f87687320b4be70b5af62e310f Mon Sep 17 00:00:00 2001
From: kbeyro <121854496+kbeyro@users.noreply.github.com>
Date: Thu, 20 Jun 2024 14:14:27 +0200
Subject: [PATCH] Implement new json exports

---
 .../appmanagementlist.component.html          |  5 ++++-
 .../appmanagementlist.component.ts            | 20 ++++++++++++++++++-
 src/app/model/application-dto.ts              | 11 ++++++++++
 src/app/service/apps.service.ts               |  7 ++++++-
 4 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html
index 139fac8a..19fca710 100644
--- a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html
+++ b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.html
@@ -48,6 +48,9 @@
                <li>
                 <a (click)="appAddJsonVersion.show()" >{{ 'APPS_MANAGEMENT.ADD_NEW_VERSION_BUTTON' | translate }} (JSON)</a>
               </li>
+              <li>
+                <a (click)="getApplicationInfoJSONWithBase(app?.id)"> {{'APPS_MANAGEMENT.EXPORT_JSON' | translate}}</a>
+              </li>
               <li>
                 <a [routerLink]="['/admin/apps/edit', app?.id]">{{ 'APPS_MANAGEMENT.EDIT_BUTTON' | translate }}</a>
               </li>
@@ -78,7 +81,7 @@
                 <a (click)="showModal($event, app, version)" *ngIf="getStateAsString(version?.state) !== 'DELETED'">{{ 'APPS_MANAGEMENT.CHANGE_STATE_BUTTON' | translate }}</a>
               </li>
               <li>
-                <a (click)="getApplicationInfoJSON(version?.appVersionId)">{{'APPS_MANAGEMENT.EXPORT_JSON' | translate}}</a>
+                <a (click)="getApplicationInfoJSONWithoutBase(version?.appVersionId)">{{'APPS_MANAGEMENT.EXPORT_JSON' | translate}}</a>
               </li>
               <li>
                 <a [routerLink]="['/admin/apps/edit/version', version?.appVersionId]">{{ 'APPS_MANAGEMENT.EDIT_BUTTON' | translate }}</a>
diff --git a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts
index c4c0cd82..698eaf0d 100644
--- a/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts
+++ b/src/app/appmarket/appmanagement/app-management-list/appmanagementlist.component.ts
@@ -130,9 +130,27 @@ export class AppManagementListComponent implements OnInit {
         })
     }
 
-    public getApplicationInfoJSON(id: number) {
+    public getApplicationInfoJSONWithBase(id: number) {
+        this.appsService.getApplicationBaseWithVersion(id).subscribe( appDTO => {
+            // appDTO = this.deleteIDsFields(appDTO);
+           let blob = new Blob([JSON.stringify(appDTO, null, 4)], {type: 'application/json'})
+            this.blobUrl = window.URL.createObjectURL(blob);
+            let a = document.createElement('a');
+            document.body.appendChild(a);
+            a.setAttribute('style', 'display: none');
+            a.href = this.blobUrl;
+            a.download = `${appDTO.applicationBase.name}.json`
+            a.click();
+            window.URL.revokeObjectURL(this.blobUrl);
+            a.remove();
+        })
+    }
+
+    public getApplicationInfoJSONWithoutBase(id: number) {
         this.appsService.getApplicationDTO(id).subscribe( appDTO => {
             appDTO = this.deleteIDsFields(appDTO);
+            // delete appDTO.applicationBase;
+            console.log(appDTO);
            let blob = new Blob([JSON.stringify(appDTO, null, 4)], {type: 'application/json'})
             this.blobUrl = window.URL.createObjectURL(blob);
             let a = document.createElement('a');
diff --git a/src/app/model/application-dto.ts b/src/app/model/application-dto.ts
index 03e171da..9678f698 100644
--- a/src/app/model/application-dto.ts
+++ b/src/app/model/application-dto.ts
@@ -10,3 +10,14 @@ export class ApplicationDTO {
         this.application = new Application()
     }
 }
+
+
+export class ApplicationVersionList {
+    public applicationBase: ApplicationBase = undefined;
+    public applications: Application[] = []
+
+    constructor() {
+        this.applicationBase = new ApplicationBase();
+        this.applications = []
+    }
+}
\ No newline at end of file
diff --git a/src/app/service/apps.service.ts b/src/app/service/apps.service.ts
index 944f5db9..708b9132 100644
--- a/src/app/service/apps.service.ts
+++ b/src/app/service/apps.service.ts
@@ -9,7 +9,7 @@ import {catchError, debounceTime} from 'rxjs/operators';
 import {AppStateChange} from '../model/appstatechange';
 import {ApplicationBase} from '../model/application-base';
 import {Application} from '../model/application';
-import {ApplicationDTO} from '../model/application-dto';
+import {ApplicationDTO, ApplicationVersionList} from '../model/application-dto';
 import {ApplicationVersion} from '../model/application-version';
 
 @Injectable({
@@ -50,6 +50,11 @@ export class AppsService extends GenericDataService {
     public hasRunningInstances(id: number): Observable<boolean> {
         return this.http.get<boolean>(this.appConfig.getApiUrl() + '/apps/instances/running/app/' + id);
     }
+    // getAllVersionWithBase 
+    public getApplicationBaseWithVersion(id: number): Observable<ApplicationVersionList> {
+        return this.get<ApplicationVersionList>(this.appConfig.getApiUrl() + '/apps/base/allversions/' + id);
+    }
+
     // application version
     public getApplicationVersions(id: number): Observable<ApplicationVersion[]> {
         return  this.get<ApplicationVersion[]>(this.appConfig.getApiUrl() + `/apps/versions/${id}`)
-- 
GitLab