|
- 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<any>,
- next: HttpHandler
- ): Observable<HttpEvent<any>> {
- 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;
- }
- }
|