mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-19 16:03:02 +00:00
refactoring
This commit is contained in:
@@ -22,6 +22,7 @@ import {
|
||||
getResponseFromSelflink,
|
||||
filterSuccessfulResponses
|
||||
} from '../../shared/operators';
|
||||
import { ReplaySubject } from 'rxjs/ReplaySubject';
|
||||
|
||||
@Injectable()
|
||||
export class RemoteDataBuildService {
|
||||
@@ -34,6 +35,8 @@ export class RemoteDataBuildService {
|
||||
if (typeof href$ === 'string') {
|
||||
href$ = Observable.of(href$);
|
||||
}
|
||||
href$ = href$.multicast(new ReplaySubject(1)).refCount();
|
||||
|
||||
const requestHref$ = href$.pipe(flatMap((href: string) =>
|
||||
this.objectCache.getRequestHrefBySelfLink(href)));
|
||||
|
||||
@@ -112,6 +115,7 @@ export class RemoteDataBuildService {
|
||||
if (typeof href$ === 'string') {
|
||||
href$ = Observable.of(href$);
|
||||
}
|
||||
href$ = href$.shareReplay();
|
||||
|
||||
const requestEntry$ = href$.pipe(getRequestFromSelflink(this.requestService));
|
||||
const responseCache$ = href$.pipe(getResponseFromSelflink(this.responseCache));
|
||||
|
@@ -63,7 +63,6 @@ import { RegistryBitstreamformatsResponseParsingService } from './data/registry-
|
||||
import { NotificationsService } from '../shared/notifications/notifications.service';
|
||||
import { UploaderService } from '../shared/uploader/uploader.service';
|
||||
import { DSpaceObjectDataService } from './data/dspace-object-data.service';
|
||||
import { SingleDsoResponseParsingService } from './data/single-dso-response-parsing.service';
|
||||
|
||||
const IMPORTS = [
|
||||
CommonModule,
|
||||
@@ -127,7 +126,6 @@ const PROVIDERS = [
|
||||
UploaderService,
|
||||
UUIDService,
|
||||
DSpaceObjectDataService,
|
||||
SingleDsoResponseParsingService,
|
||||
// register AuthInterceptor as HttpInterceptor
|
||||
{
|
||||
provide: HTTP_INTERCEPTORS,
|
||||
|
@@ -18,20 +18,18 @@ import {
|
||||
} from './request.models';
|
||||
import { RequestService } from './request.service';
|
||||
import { NormalizedObject } from '../cache/models/normalized-object.model';
|
||||
import { distinctUntilChanged, flatMap, map, switchMap, take, withLatestFrom } from 'rxjs/operators';
|
||||
import { distinctUntilChanged, first, map, take, tap } from 'rxjs/operators';
|
||||
import {
|
||||
configureRequest,
|
||||
filterSuccessfulResponses,
|
||||
getResponseFromSelflink, getSucceededRemoteData
|
||||
getResponseFromSelflink
|
||||
} from '../shared/operators';
|
||||
import { ResponseCacheEntry } from '../cache/response-cache.reducer';
|
||||
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
|
||||
import { HttpClient, HttpEvent, HttpHeaders, HttpRequest } from '@angular/common/http';
|
||||
import { ErrorResponse, GenericSuccessResponse } from '../cache/response-cache.models';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { DSOSuccessResponse, ErrorResponse } from '../cache/response-cache.models';
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||
import { NotificationOptions } from '../../shared/notifications/models/notification-options.model';
|
||||
import { combineLatest } from 'rxjs/observable/combineLatest';
|
||||
|
||||
export abstract class DataService<TNormalized extends NormalizedObject, TDomain> {
|
||||
protected abstract responseCache: ResponseCacheService;
|
||||
@@ -118,7 +116,7 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
|
||||
return this.rdbService.buildSingle<TNormalized, TDomain>(href);
|
||||
}
|
||||
|
||||
public create(dso: TDomain, parentUUID: string): Observable<RemoteData<TDomain>> {
|
||||
create(dso: TDomain, parentUUID: string): Observable<RemoteData<TDomain>> {
|
||||
const requestId = this.requestService.generateRequestId();
|
||||
const endpoint$ = this.halService.getEndpoint(this.linkPath).pipe(
|
||||
isNotEmptyOperator(),
|
||||
@@ -132,7 +130,7 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
|
||||
configureRequest(this.requestService)
|
||||
);
|
||||
|
||||
const payload$ = request$.pipe(
|
||||
const selfLink$ = request$.pipe(
|
||||
map((request: RestRequest) => request.href),
|
||||
getResponseFromSelflink(this.responseCache),
|
||||
map((response: ResponseCacheEntry) => {
|
||||
@@ -144,16 +142,12 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
|
||||
}),
|
||||
filterSuccessfulResponses(),
|
||||
map((entry: ResponseCacheEntry) => entry.response),
|
||||
map((response: GenericSuccessResponse<TDomain>) => response.payload),
|
||||
map((response: DSOSuccessResponse) => {
|
||||
return response.resourceSelfLinks[0];
|
||||
}),
|
||||
distinctUntilChanged()
|
||||
);
|
||||
|
||||
const requestEntry$ = this.requestService.getByUUID(requestId);
|
||||
const responseCache$ = endpoint$.pipe(getResponseFromSelflink(this.responseCache));
|
||||
|
||||
return this.rdbService.toRemoteDataObservable(requestEntry$, responseCache$, payload$).pipe(
|
||||
getSucceededRemoteData()
|
||||
);
|
||||
return this.rdbService.buildSingle(selfLink$) as Observable<RemoteData<TDomain>>;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,7 +1,5 @@
|
||||
import { SortOptions } from '../cache/models/sort-options.model';
|
||||
import { GenericConstructor } from '../shared/generic-constructor';
|
||||
import { GlobalConfig } from '../../../config/global-config.interface';
|
||||
import { RESTURLCombiner } from '../url-combiner/rest-url-combiner';
|
||||
import { BrowseEntriesResponseParsingService } from './browse-entries-response-parsing.service';
|
||||
import { DSOResponseParsingService } from './dso-response-parsing.service';
|
||||
import { ResponseParsingService } from './parsing.service';
|
||||
@@ -10,9 +8,7 @@ import { BrowseResponseParsingService } from './browse-response-parsing.service'
|
||||
import { ConfigResponseParsingService } from './config-response-parsing.service';
|
||||
import { AuthResponseParsingService } from '../auth/auth-response-parsing.service';
|
||||
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
|
||||
import { HttpHeaders } from '@angular/common/http';
|
||||
import { IntegrationResponseParsingService } from '../integration/integration-response-parsing.service';
|
||||
import { SingleDsoResponseParsingService } from './single-dso-response-parsing.service';
|
||||
|
||||
/* tslint:disable:max-classes-per-file */
|
||||
|
||||
@@ -231,7 +227,7 @@ export class CreateRequest extends PostRequest {
|
||||
}
|
||||
|
||||
getResponseParser(): GenericConstructor<ResponseParsingService> {
|
||||
return SingleDsoResponseParsingService;
|
||||
return DSOResponseParsingService;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,40 +0,0 @@
|
||||
import { Inject, Injectable } from '@angular/core';
|
||||
import { ResponseParsingService } from './parsing.service';
|
||||
import { BaseResponseParsingService } from './base-response-parsing.service';
|
||||
import { GlobalConfig } from '../../../config/global-config.interface';
|
||||
import { GLOBAL_CONFIG } from '../../../config';
|
||||
import { ObjectCacheService } from '../cache/object-cache.service';
|
||||
import { RestRequest } from './request.models';
|
||||
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
|
||||
import {
|
||||
DSOSuccessResponse,
|
||||
GenericSuccessResponse,
|
||||
RestResponse
|
||||
} from '../cache/response-cache.models';
|
||||
import { NormalizedObjectFactory } from '../cache/models/normalized-object-factory';
|
||||
import { DSpaceRESTv2Serializer } from '../dspace-rest-v2/dspace-rest-v2.serializer';
|
||||
import { DSpaceObject } from '../shared/dspace-object.model';
|
||||
import { NormalizedObject } from '../cache/models/normalized-object.model';
|
||||
import { ResourceType } from '../shared/resource-type';
|
||||
import { hasNoValue, hasValue } from '../../shared/empty.util';
|
||||
|
||||
@Injectable()
|
||||
export class SingleDsoResponseParsingService extends BaseResponseParsingService implements ResponseParsingService {
|
||||
protected objectFactory = NormalizedObjectFactory;
|
||||
protected toCache = true;
|
||||
|
||||
constructor(
|
||||
@Inject(GLOBAL_CONFIG) protected EnvConfig: GlobalConfig,
|
||||
protected objectCache: ObjectCacheService,
|
||||
) { super();
|
||||
}
|
||||
|
||||
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
|
||||
const processRequestDTO = this.process<NormalizedObject,ResourceType>(data.payload, request.href);
|
||||
if (hasNoValue(processRequestDTO)) {
|
||||
return new GenericSuccessResponse<DSpaceObject>(undefined, data.statusCode)
|
||||
}
|
||||
return new GenericSuccessResponse<DSpaceObject>(processRequestDTO, data.statusCode);
|
||||
}
|
||||
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { distinctUntilChanged, map, flatMap, startWith, tap } from 'rxjs/operators';
|
||||
import { distinctUntilChanged, map, flatMap, startWith, tap, switchMap } from 'rxjs/operators';
|
||||
import { RequestService } from '../data/request.service';
|
||||
import { ResponseCacheService } from '../cache/response-cache.service';
|
||||
import { GlobalConfig } from '../../../config/global-config.interface';
|
||||
@@ -48,7 +48,7 @@ export class HALEndpointService {
|
||||
let currentPath;
|
||||
const pipeArguments = path
|
||||
.map((subPath: string, index: number) => [
|
||||
flatMap((href: string) => this.getEndpointMapAt(href)),
|
||||
switchMap((href: string) => this.getEndpointMapAt(href)),
|
||||
map((endpointMap: EndpointMap) => {
|
||||
if (hasValue(endpointMap) && hasValue(endpointMap[subPath])) {
|
||||
currentPath = endpointMap[subPath];
|
||||
|
Reference in New Issue
Block a user