54472: request created dso

This commit is contained in:
Kristof De Langhe
2018-09-07 11:07:04 +02:00
parent e7c5a2a29c
commit 260ddd979a
3 changed files with 12 additions and 17 deletions

View File

@@ -1,12 +1,8 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { Community } from '../../core/shared/community.model'; import { Community } from '../../core/shared/community.model';
import { ComColDataService } from '../../core/data/comcol-data.service';
import { NormalizedCommunity } from '../../core/cache/models/normalized-community.model';
import { CommunityDataService } from '../../core/data/community-data.service'; import { CommunityDataService } from '../../core/data/community-data.service';
import { ResponseCacheEntry } from '../../core/cache/response-cache.reducer'; import { ErrorResponse } from '../../core/cache/response-cache.models';
import { DSOSuccessResponse, ErrorResponse, RestResponse } from '../../core/cache/response-cache.models';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { map } from 'rxjs/operators';
import { RouteService } from '../../shared/services/route.service'; import { RouteService } from '../../shared/services/route.service';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { RemoteData } from '../../core/data/remote-data'; import { RemoteData } from '../../core/data/remote-data';

View File

@@ -18,20 +18,17 @@ import {
} from './request.models'; } from './request.models';
import { RequestService } from './request.service'; import { RequestService } from './request.service';
import { NormalizedObject } from '../cache/models/normalized-object.model'; import { NormalizedObject } from '../cache/models/normalized-object.model';
import { distinctUntilChanged, map, share, withLatestFrom } from 'rxjs/operators'; import { distinctUntilChanged, map, share, switchMap, withLatestFrom } from 'rxjs/operators';
import { import {
configureRequest, configureRequest,
filterSuccessfulResponses, filterSuccessfulResponses,
getRequestFromSelflink,
getResponseFromSelflink getResponseFromSelflink
} from '../shared/operators'; } from '../shared/operators';
import { ResponseCacheEntry } from '../cache/response-cache.reducer'; import { ResponseCacheEntry } from '../cache/response-cache.reducer';
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
import { HttpHeaders } from '@angular/common/http'; import { HttpHeaders } from '@angular/common/http';
import { ErrorResponse, GenericSuccessResponse } from '../cache/response-cache.models'; import { DSOSuccessResponse } from '../cache/response-cache.models';
import { BrowseEntry } from '../shared/browse-entry.model';
import { AuthService } from '../auth/auth.service'; import { AuthService } from '../auth/auth.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
export abstract class DataService<TNormalized extends NormalizedObject, TDomain> { export abstract class DataService<TNormalized extends NormalizedObject, TDomain> {
protected abstract responseCache: ResponseCacheService; protected abstract responseCache: ResponseCacheService;
@@ -130,18 +127,16 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
); );
const href$ = request$.pipe(map((request: RestRequest) => request.href)); const href$ = request$.pipe(map((request: RestRequest) => request.href));
const requestEntry$ = href$.pipe(getRequestFromSelflink(this.requestService));
const responseCache$ = href$.pipe(getResponseFromSelflink(this.responseCache)); const responseCache$ = href$.pipe(getResponseFromSelflink(this.responseCache));
const payload$ = responseCache$.pipe( const dsoHref$ = responseCache$.pipe(
filterSuccessfulResponses(), filterSuccessfulResponses(),
map((entry: ResponseCacheEntry) => entry.response), map((entry: ResponseCacheEntry) => entry.response),
map((response: GenericSuccessResponse<TDomain>) => response.payload), map((response: DSOSuccessResponse) => response.resourceSelfLinks[0]),
distinctUntilChanged() distinctUntilChanged()
); );
return this.rdbService.toRemoteDataObservable(requestEntry$, responseCache$, payload$); return this.rdbService.buildSingle(dsoHref$);
} }
public abstract buildCreateParams(dso: TDomain): Observable<string>; public abstract buildCreateParams(dso: TDomain): Observable<string>;

View File

@@ -12,6 +12,7 @@ import { RestRequest } from './request.models';
import { ResponseParsingService } from './parsing.service'; import { ResponseParsingService } from './parsing.service';
import { BaseResponseParsingService } from './base-response-parsing.service'; import { BaseResponseParsingService } from './base-response-parsing.service';
import { isNotEmpty } from '../../shared/empty.util';
@Injectable() @Injectable()
export class DSOResponseParsingService extends BaseResponseParsingService implements ResponseParsingService { export class DSOResponseParsingService extends BaseResponseParsingService implements ResponseParsingService {
@@ -27,8 +28,11 @@ export class DSOResponseParsingService extends BaseResponseParsingService implem
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse { parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
const processRequestDTO = this.process<NormalizedObject,ResourceType>(data.payload, request.href); const processRequestDTO = this.process<NormalizedObject,ResourceType>(data.payload, request.href);
const selfLinks = this.flattenSingleKeyObject(processRequestDTO).map((no) => no.self); let selfLinks = [];
return new DSOSuccessResponse(selfLinks, data.statusCode, this.processPageInfo(data.payload)) if (processRequestDTO !== undefined) {
selfLinks = this.flattenSingleKeyObject(processRequestDTO).map((no) => no.self);
}
return new DSOSuccessResponse(selfLinks, data.statusCode, (isNotEmpty(data.payload) ? this.processPageInfo(data.payload) : null))
} }
} }