diff --git a/src/app/core/cache/builders/remote-data-build.service.ts b/src/app/core/cache/builders/remote-data-build.service.ts index 6fb24328c2..a986754b0d 100644 --- a/src/app/core/cache/builders/remote-data-build.service.ts +++ b/src/app/core/cache/builders/remote-data-build.service.ts @@ -1,22 +1,21 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; +import { hasValue, isNotEmpty } from '../../../shared/empty.util'; import { PaginatedList } from '../../data/paginated-list'; +import { RemoteData } from '../../data/remote-data'; 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 { ObjectCacheService } from '../object-cache.service'; -import { RequestService } from '../../data/request.service'; -import { ResponseCacheService } from '../response-cache.service'; -import { RequestEntry } from '../../data/request.reducer'; -import { hasValue, isNotEmpty } from '../../../shared/empty.util'; +import { DSOSuccessResponse, ErrorResponse } from '../response-cache.models'; import { ResponseCacheEntry } from '../response-cache.reducer'; -import { ErrorResponse, DSOSuccessResponse } from '../response-cache.models'; -import { RemoteData } from '../../data/remote-data'; -import { GenericConstructor } from '../../shared/generic-constructor'; +import { ResponseCacheService } from '../response-cache.service'; 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() export class RemoteDataBuildService { @@ -169,7 +168,7 @@ export class RemoteDataBuildService { const resourceConstructor = NormalizedObjectFactory.getConstructor(resourceType); if (Array.isArray(normalized[relationship])) { 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 = []; @@ -183,7 +182,7 @@ export class RemoteDataBuildService { links[relationship] = rdArr[0]; } } 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) // in that case only 1 href will be stored in the normalized obj (so the isArray above fails), diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts index 8cdcac1796..2d003d6fd1 100644 --- a/src/app/core/data/data.service.ts +++ b/src/app/core/data/data.service.ts @@ -6,19 +6,12 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv import { CacheableObject } from '../cache/object-cache.reducer'; import { ResponseCacheService } from '../cache/response-cache.service'; import { CoreState } from '../core.reducers'; -import { DSpaceObject } from '../shared/dspace-object.model'; import { GenericConstructor } from '../shared/generic-constructor'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { URLCombiner } from '../url-combiner/url-combiner'; import { PaginatedList } from './paginated-list'; import { RemoteData } from './remote-data'; -import { - FindAllOptions, - FindAllRequest, - FindByIDRequest, - RestRequest, - RestRequestMethod -} from './request.models'; +import { FindAllOptions, FindAllRequest, FindByIDRequest, GetRequest } from './request.models'; import { RequestService } from './request.service'; export abstract class DataService extends HALEndpointService { @@ -106,7 +99,7 @@ export abstract class DataService } findByHref(href: string): Observable> { - this.requestService.configure(new RestRequest(this.requestService.generateRequestId(), href)); + this.requestService.configure(new GetRequest(this.requestService.generateRequestId(), href)); return this.rdbService.buildSingle(href, this.normalizedResourceType); } diff --git a/src/app/core/data/request.models.ts b/src/app/core/data/request.models.ts index 46f40b0abf..fbf394cc01 100644 --- a/src/app/core/data/request.models.ts +++ b/src/app/core/data/request.models.ts @@ -22,14 +22,14 @@ import { ConfigResponseParsingService } from './config-response-parsing.service' export enum RestRequestMethod { Get = 'GET', Post = 'POST', - // Put = 'PUT', - // Delete = 'DELETE', - // Options = 'OPTIONS', - // Head = 'HEAD', - // Patch = 'PATCH' + Put = 'PUT', + Delete = 'DELETE', + Options = 'OPTIONS', + Head = 'HEAD', + Patch = 'PATCH' } -export class RestRequest { +export abstract class RestRequest { constructor( public uuid: 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 { constructor( uuid: string, diff --git a/src/app/core/data/request.reducer.spec.ts b/src/app/core/data/request.reducer.spec.ts index 138d3ea5dd..bd8fad5de7 100644 --- a/src/app/core/data/request.reducer.spec.ts +++ b/src/app/core/data/request.reducer.spec.ts @@ -4,7 +4,7 @@ import { requestReducer, RequestState } from './request.reducer'; import { RequestCompleteAction, RequestConfigureAction, RequestExecuteAction } from './request.actions'; -import { RestRequest } from './request.models'; +import { GetRequest, RestRequest } from './request.models'; class NullAction extends RequestCompleteAction { 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 testState: RequestState = { [id1]: { - request: new RestRequest(id1, link1), + request: new GetRequest(id1, link1), requestPending: false, responsePending: 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', () => { const state = testState; - const request = new RestRequest(id2, link2); + const request = new GetRequest(id2, link2); const action = new RequestConfigureAction(request); const newState = requestReducer(state, action);