import { Injectable } from '@angular/core'; import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse, } from '@angular/common/http'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; @Injectable() export class PropertyInterceptor implements HttpInterceptor { intercept( request: HttpRequest, next: HttpHandler ): Observable> { return next.handle(request).pipe( map((event) => { if (event instanceof HttpResponse && event.body) { let modifiedBody; if (Array.isArray(event.body)) { // Wenn es sich um ein Array von Ressourcen handelt modifiedBody = this.mapDataItems(event.body); } else if (event.body['hydra:member']) { // Wenn es sich um eine Ressourcenkollektion handelt modifiedBody = { ...event.body, 'hydra:member': this.mapDataItems( event.body['hydra:member'] ), }; } else { // Wenn es sich um eine einzelne Ressource handelt modifiedBody = this.mapDataItem(event.body); } return event.clone({ body: modifiedBody, }); } return event; }) ); } private mapDataItems(items: any[]): any[] { return items.map((item) => this.mapDataItem(item)); } private mapDataItem(item: any): any { if (item && typeof item === 'object') { // Wenn es ein Objekt ist, überprüfe rekursiv const mappedItem = { ...item }; for (const key in mappedItem) { if (mappedItem.hasOwnProperty(key) && key === '@id') { mappedItem['id'] = mappedItem[key]; delete mappedItem[key]; } else if (Array.isArray(mappedItem[key])) { // Wenn es sich um ein Array handelt, überprüfe rekursiv jedes Element mappedItem[key] = this.mapDataItems(mappedItem[key]); } else if (mappedItem[key] && typeof mappedItem[key] === 'object') { // Wenn es ein Objekt ist, überprüfe rekursiv mappedItem[key] = this.mapDataItem(mappedItem[key]); } } return mappedItem; } return item; } }