1
0

Cache redesign part 1, and add support for alternative links

This commit is contained in:
Art Lowel
2020-12-11 14:18:44 +01:00
parent f4853972cc
commit 4e18fa35ca
522 changed files with 7537 additions and 6933 deletions

View File

@@ -1,28 +1,25 @@
import { Inject, Injectable, Injector } from '@angular/core';
import { Injectable, Injector } from '@angular/core';
import { Actions, Effect, ofType } from '@ngrx/effects';
import { Observable, of as observableOf } from 'rxjs';
import { catchError, filter, flatMap, map, take } from 'rxjs/operators';
import { hasValue, isNotEmpty } from '../../shared/empty.util';
import { StoreActionTypes } from '../../store.actions';
import { getClassForType } from '../cache/builders/build-decorators';
import { ErrorResponse, RestResponse } from '../cache/response.models';
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
import { RawRestResponse } from '../dspace-rest/raw-rest-response.model';
import { DSpaceRESTv2Service } from '../dspace-rest-v2/dspace-rest-v2.service';
import { DSpaceSerializer } from '../dspace-rest-v2/dspace.serializer';
import { RequestActionTypes, RequestCompleteAction, RequestExecuteAction, ResetResponseTimestampsAction } from './request.actions';
import { DspaceRestService } from '../dspace-rest/dspace-rest.service';
import { DSpaceSerializer } from '../dspace-rest/dspace.serializer';
import {
RequestActionTypes,
RequestExecuteAction,
ResetResponseTimestampsAction,
RequestSuccessAction,
RequestErrorAction
} from './request.actions';
import { RequestError, RestRequest } from './request.models';
import { RequestEntry } from './request.reducer';
import { RequestService } from './request.service';
export const addToResponseCacheAndCompleteAction = (request: RestRequest) =>
(source: Observable<RestResponse>): Observable<RequestCompleteAction> =>
source.pipe(
map((response: RestResponse) => {
return new RequestCompleteAction(request.uuid, response);
})
);
import { ParsedResponse } from '../cache/response.models';
@Injectable()
export class RequestEffects {
@@ -43,11 +40,17 @@ export class RequestEffects {
body = serializer.serialize(request.body);
}
return this.restApi.request(request.method, request.href, body, request.options, request.isMultipart).pipe(
map((data: DSpaceRESTV2Response) => this.injector.get(request.getResponseParser()).parse(request, data)),
addToResponseCacheAndCompleteAction(request),
catchError((error: RequestError) => observableOf(new ErrorResponse(error)).pipe(
addToResponseCacheAndCompleteAction(request)
))
map((data: RawRestResponse) => this.injector.get(request.getResponseParser()).parse(request, data)),
map((response: ParsedResponse) => new RequestSuccessAction(request.uuid, response.statusCode, response.link, response.unCacheableObject)),
catchError((error: RequestError) => {
if (hasValue(error.statusCode)) {
// if it's an error returned by the server, complete the request
return [new RequestErrorAction(request.uuid, error.statusCode, error.message)];
} else {
// if it's a client side error, throw it
throw error;
}
})
);
})
);
@@ -67,10 +70,9 @@ export class RequestEffects {
constructor(
private actions$: Actions,
private restApi: DSpaceRESTv2Service,
private restApi: DspaceRestService,
private injector: Injector,
protected requestService: RequestService
) { }
}
/* tslint:enable:max-classes-per-file */