mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-13 13:03:04 +00:00
added a RestRequest class for each http method
This commit is contained in:
@@ -1,22 +1,21 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs/Observable';
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
import { hasValue, isNotEmpty } from '../../../shared/empty.util';
|
||||||
import { PaginatedList } from '../../data/paginated-list';
|
import { PaginatedList } from '../../data/paginated-list';
|
||||||
|
import { RemoteData } from '../../data/remote-data';
|
||||||
import { RemoteDataError } from '../../data/remote-data-error';
|
import { RemoteDataError } from '../../data/remote-data-error';
|
||||||
|
import { GetRequest } from '../../data/request.models';
|
||||||
|
import { RequestEntry } from '../../data/request.reducer';
|
||||||
|
import { RequestService } from '../../data/request.service';
|
||||||
|
import { GenericConstructor } from '../../shared/generic-constructor';
|
||||||
|
import { NormalizedObjectFactory } from '../models/normalized-object-factory';
|
||||||
|
|
||||||
import { CacheableObject } from '../object-cache.reducer';
|
import { CacheableObject } from '../object-cache.reducer';
|
||||||
import { ObjectCacheService } from '../object-cache.service';
|
import { ObjectCacheService } from '../object-cache.service';
|
||||||
import { RequestService } from '../../data/request.service';
|
import { DSOSuccessResponse, ErrorResponse } from '../response-cache.models';
|
||||||
import { ResponseCacheService } from '../response-cache.service';
|
|
||||||
import { RequestEntry } from '../../data/request.reducer';
|
|
||||||
import { hasValue, isNotEmpty } from '../../../shared/empty.util';
|
|
||||||
import { ResponseCacheEntry } from '../response-cache.reducer';
|
import { ResponseCacheEntry } from '../response-cache.reducer';
|
||||||
import { ErrorResponse, DSOSuccessResponse } from '../response-cache.models';
|
import { ResponseCacheService } from '../response-cache.service';
|
||||||
import { RemoteData } from '../../data/remote-data';
|
|
||||||
import { GenericConstructor } from '../../shared/generic-constructor';
|
|
||||||
import { getMapsTo, getRelationMetadata, getRelationships } from './build-decorators';
|
import { getMapsTo, getRelationMetadata, getRelationships } from './build-decorators';
|
||||||
import { NormalizedObjectFactory } from '../models/normalized-object-factory';
|
|
||||||
import { RestRequest } from '../../data/request.models';
|
|
||||||
import { PageInfo } from '../../shared/page-info.model';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RemoteDataBuildService {
|
export class RemoteDataBuildService {
|
||||||
@@ -169,7 +168,7 @@ export class RemoteDataBuildService {
|
|||||||
const resourceConstructor = NormalizedObjectFactory.getConstructor(resourceType);
|
const resourceConstructor = NormalizedObjectFactory.getConstructor(resourceType);
|
||||||
if (Array.isArray(normalized[relationship])) {
|
if (Array.isArray(normalized[relationship])) {
|
||||||
normalized[relationship].forEach((href: string) => {
|
normalized[relationship].forEach((href: string) => {
|
||||||
this.requestService.configure(new RestRequest(this.requestService.generateRequestId(), href))
|
this.requestService.configure(new GetRequest(this.requestService.generateRequestId(), href))
|
||||||
});
|
});
|
||||||
|
|
||||||
const rdArr = [];
|
const rdArr = [];
|
||||||
@@ -183,7 +182,7 @@ export class RemoteDataBuildService {
|
|||||||
links[relationship] = rdArr[0];
|
links[relationship] = rdArr[0];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.requestService.configure(new RestRequest(this.requestService.generateRequestId(), normalized[relationship]));
|
this.requestService.configure(new GetRequest(this.requestService.generateRequestId(), normalized[relationship]));
|
||||||
|
|
||||||
// The rest API can return a single URL to represent a list of resources (e.g. /items/:id/bitstreams)
|
// The rest API can return a single URL to represent a list of resources (e.g. /items/:id/bitstreams)
|
||||||
// in that case only 1 href will be stored in the normalized obj (so the isArray above fails),
|
// in that case only 1 href will be stored in the normalized obj (so the isArray above fails),
|
||||||
|
@@ -6,19 +6,12 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv
|
|||||||
import { CacheableObject } from '../cache/object-cache.reducer';
|
import { CacheableObject } from '../cache/object-cache.reducer';
|
||||||
import { ResponseCacheService } from '../cache/response-cache.service';
|
import { ResponseCacheService } from '../cache/response-cache.service';
|
||||||
import { CoreState } from '../core.reducers';
|
import { CoreState } from '../core.reducers';
|
||||||
import { DSpaceObject } from '../shared/dspace-object.model';
|
|
||||||
import { GenericConstructor } from '../shared/generic-constructor';
|
import { GenericConstructor } from '../shared/generic-constructor';
|
||||||
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
||||||
import { URLCombiner } from '../url-combiner/url-combiner';
|
import { URLCombiner } from '../url-combiner/url-combiner';
|
||||||
import { PaginatedList } from './paginated-list';
|
import { PaginatedList } from './paginated-list';
|
||||||
import { RemoteData } from './remote-data';
|
import { RemoteData } from './remote-data';
|
||||||
import {
|
import { FindAllOptions, FindAllRequest, FindByIDRequest, GetRequest } from './request.models';
|
||||||
FindAllOptions,
|
|
||||||
FindAllRequest,
|
|
||||||
FindByIDRequest,
|
|
||||||
RestRequest,
|
|
||||||
RestRequestMethod
|
|
||||||
} from './request.models';
|
|
||||||
import { RequestService } from './request.service';
|
import { RequestService } from './request.service';
|
||||||
|
|
||||||
export abstract class DataService<TNormalized extends CacheableObject, TDomain> extends HALEndpointService {
|
export abstract class DataService<TNormalized extends CacheableObject, TDomain> extends HALEndpointService {
|
||||||
@@ -106,7 +99,7 @@ export abstract class DataService<TNormalized extends CacheableObject, TDomain>
|
|||||||
}
|
}
|
||||||
|
|
||||||
findByHref(href: string): Observable<RemoteData<TDomain>> {
|
findByHref(href: string): Observable<RemoteData<TDomain>> {
|
||||||
this.requestService.configure(new RestRequest(this.requestService.generateRequestId(), href));
|
this.requestService.configure(new GetRequest(this.requestService.generateRequestId(), href));
|
||||||
return this.rdbService.buildSingle<TNormalized, TDomain>(href, this.normalizedResourceType);
|
return this.rdbService.buildSingle<TNormalized, TDomain>(href, this.normalizedResourceType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,14 +22,14 @@ import { ConfigResponseParsingService } from './config-response-parsing.service'
|
|||||||
export enum RestRequestMethod {
|
export enum RestRequestMethod {
|
||||||
Get = 'GET',
|
Get = 'GET',
|
||||||
Post = 'POST',
|
Post = 'POST',
|
||||||
// Put = 'PUT',
|
Put = 'PUT',
|
||||||
// Delete = 'DELETE',
|
Delete = 'DELETE',
|
||||||
// Options = 'OPTIONS',
|
Options = 'OPTIONS',
|
||||||
// Head = 'HEAD',
|
Head = 'HEAD',
|
||||||
// Patch = 'PATCH'
|
Patch = 'PATCH'
|
||||||
}
|
}
|
||||||
|
|
||||||
export class RestRequest {
|
export abstract class RestRequest {
|
||||||
constructor(
|
constructor(
|
||||||
public uuid: string,
|
public uuid: string,
|
||||||
public href: string,
|
public href: string,
|
||||||
@@ -43,6 +43,76 @@ export class RestRequest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class GetRequest extends RestRequest {
|
||||||
|
constructor(
|
||||||
|
public uuid: string,
|
||||||
|
public href: string,
|
||||||
|
public body?: any
|
||||||
|
) {
|
||||||
|
super(uuid, href, RestRequestMethod.Get, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PostRequest extends RestRequest {
|
||||||
|
constructor(
|
||||||
|
public uuid: string,
|
||||||
|
public href: string,
|
||||||
|
public body?: any
|
||||||
|
) {
|
||||||
|
super(uuid, href, RestRequestMethod.Post, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PutRequest extends RestRequest {
|
||||||
|
constructor(
|
||||||
|
public uuid: string,
|
||||||
|
public href: string,
|
||||||
|
public body?: any
|
||||||
|
) {
|
||||||
|
super(uuid, href, RestRequestMethod.Put, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DeleteRequest extends RestRequest {
|
||||||
|
constructor(
|
||||||
|
public uuid: string,
|
||||||
|
public href: string,
|
||||||
|
public body?: any
|
||||||
|
) {
|
||||||
|
super(uuid, href, RestRequestMethod.Delete, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class OptionsRequest extends RestRequest {
|
||||||
|
constructor(
|
||||||
|
public uuid: string,
|
||||||
|
public href: string,
|
||||||
|
public body?: any
|
||||||
|
) {
|
||||||
|
super(uuid, href, RestRequestMethod.Options, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class HeadRequest extends RestRequest {
|
||||||
|
constructor(
|
||||||
|
public uuid: string,
|
||||||
|
public href: string,
|
||||||
|
public body?: any
|
||||||
|
) {
|
||||||
|
super(uuid, href, RestRequestMethod.Head, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PatchRequest extends RestRequest {
|
||||||
|
constructor(
|
||||||
|
public uuid: string,
|
||||||
|
public href: string,
|
||||||
|
public body?: any
|
||||||
|
) {
|
||||||
|
super(uuid, href, RestRequestMethod.Patch, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class FindByIDRequest extends RestRequest {
|
export class FindByIDRequest extends RestRequest {
|
||||||
constructor(
|
constructor(
|
||||||
uuid: string,
|
uuid: string,
|
||||||
|
@@ -4,7 +4,7 @@ import { requestReducer, RequestState } from './request.reducer';
|
|||||||
import {
|
import {
|
||||||
RequestCompleteAction, RequestConfigureAction, RequestExecuteAction
|
RequestCompleteAction, RequestConfigureAction, RequestExecuteAction
|
||||||
} from './request.actions';
|
} from './request.actions';
|
||||||
import { RestRequest } from './request.models';
|
import { GetRequest, RestRequest } from './request.models';
|
||||||
|
|
||||||
class NullAction extends RequestCompleteAction {
|
class NullAction extends RequestCompleteAction {
|
||||||
type = null;
|
type = null;
|
||||||
@@ -22,7 +22,7 @@ describe('requestReducer', () => {
|
|||||||
const link2 = 'https://dspace7.4science.it/dspace-spring-rest/api/core/items/1911e8a4-6939-490c-b58b-a5d70f8d91fb';
|
const link2 = 'https://dspace7.4science.it/dspace-spring-rest/api/core/items/1911e8a4-6939-490c-b58b-a5d70f8d91fb';
|
||||||
const testState: RequestState = {
|
const testState: RequestState = {
|
||||||
[id1]: {
|
[id1]: {
|
||||||
request: new RestRequest(id1, link1),
|
request: new GetRequest(id1, link1),
|
||||||
requestPending: false,
|
requestPending: false,
|
||||||
responsePending: false,
|
responsePending: false,
|
||||||
completed: false
|
completed: false
|
||||||
@@ -46,7 +46,7 @@ describe('requestReducer', () => {
|
|||||||
|
|
||||||
it('should add the new RestRequest and set \'requestPending\' to true, \'responsePending\' to false and \'completed\' to false for the given RestRequest in the state, in response to a CONFIGURE action', () => {
|
it('should add the new RestRequest and set \'requestPending\' to true, \'responsePending\' to false and \'completed\' to false for the given RestRequest in the state, in response to a CONFIGURE action', () => {
|
||||||
const state = testState;
|
const state = testState;
|
||||||
const request = new RestRequest(id2, link2);
|
const request = new GetRequest(id2, link2);
|
||||||
|
|
||||||
const action = new RequestConfigureAction(request);
|
const action = new RequestConfigureAction(request);
|
||||||
const newState = requestReducer(state, action);
|
const newState = requestReducer(state, action);
|
||||||
|
Reference in New Issue
Block a user