Move SubmissionRestService to submission core dir

This commit is contained in:
Giuseppe Digilio
2019-03-18 09:57:31 +01:00
parent 299c7f7e2c
commit bbd6225cd4
9 changed files with 95 additions and 29 deletions

View File

@@ -68,7 +68,7 @@ import { WorkflowitemDataService } from './submission/workflowitem-data.service'
import { NotificationsService } from '../shared/notifications/notifications.service'; import { NotificationsService } from '../shared/notifications/notifications.service';
import { UploaderService } from '../shared/uploader/uploader.service'; import { UploaderService } from '../shared/uploader/uploader.service';
import { FileService } from './shared/file.service'; import { FileService } from './shared/file.service';
import { SubmissionRestService } from '../submission/submission-rest.service'; import { SubmissionRestService } from './submission/submission-rest.service';
import { BrowseItemsResponseParsingService } from './data/browse-items-response-parsing-service'; import { BrowseItemsResponseParsingService } from './data/browse-items-response-parsing-service';
import { DSpaceObjectDataService } from './data/dspace-object-data.service'; import { DSpaceObjectDataService } from './data/dspace-object-data.service';
import { MetadataschemaParsingService } from './data/metadataschema-parsing.service'; import { MetadataschemaParsingService } from './data/metadataschema-parsing.service';

View File

@@ -2,18 +2,18 @@ import { TestScheduler } from 'rxjs/testing';
import { getTestScheduler } from 'jasmine-marbles'; import { getTestScheduler } from 'jasmine-marbles';
import { SubmissionRestService } from './submission-rest.service'; import { SubmissionRestService } from './submission-rest.service';
import { RequestService } from '../core/data/request.service'; import { RequestService } from '../data/request.service';
import { RemoteDataBuildService } from '../core/cache/builders/remote-data-build.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { getMockRequestService } from '../shared/mocks/mock-request.service'; import { getMockRequestService } from '../../shared/mocks/mock-request.service';
import { getMockRemoteDataBuildService } from '../shared/mocks/mock-remote-data-build.service'; import { getMockRemoteDataBuildService } from '../../shared/mocks/mock-remote-data-build.service';
import { HALEndpointServiceStub } from '../shared/testing/hal-endpoint-service-stub'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service-stub';
import { import {
SubmissionDeleteRequest, SubmissionDeleteRequest,
SubmissionPatchRequest, SubmissionPatchRequest,
SubmissionPostRequest, SubmissionPostRequest,
SubmissionRequest SubmissionRequest
} from '../core/data/request.models'; } from '../data/request.models';
import { FormFieldMetadataValueObject } from '../shared/form/builder/models/form-field-metadata-value.model'; import { FormFieldMetadataValueObject } from '../../shared/form/builder/models/form-field-metadata-value.model';
describe('SubmissionRestService test suite', () => { describe('SubmissionRestService test suite', () => {
let scheduler: TestScheduler; let scheduler: TestScheduler;

View File

@@ -3,8 +3,8 @@ import { Injectable } from '@angular/core';
import { merge as observableMerge, Observable, throwError as observableThrowError } from 'rxjs'; import { merge as observableMerge, Observable, throwError as observableThrowError } from 'rxjs';
import { distinctUntilChanged, filter, flatMap, map, mergeMap, tap } from 'rxjs/operators'; import { distinctUntilChanged, filter, flatMap, map, mergeMap, tap } from 'rxjs/operators';
import { RequestService } from '../core/data/request.service'; import { RequestService } from '../data/request.service';
import { isNotEmpty } from '../shared/empty.util'; import { isNotEmpty } from '../../shared/empty.util';
import { import {
DeleteRequest, DeleteRequest,
PostRequest, PostRequest,
@@ -13,14 +13,17 @@ import {
SubmissionPatchRequest, SubmissionPatchRequest,
SubmissionPostRequest, SubmissionPostRequest,
SubmissionRequest SubmissionRequest
} from '../core/data/request.models'; } from '../data/request.models';
import { SubmitDataResponseDefinitionObject } from '../core/shared/submit-data-response-definition.model'; import { SubmitDataResponseDefinitionObject } from '../shared/submit-data-response-definition.model';
import { HttpOptions } from '../core/dspace-rest-v2/dspace-rest-v2.service'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
import { HALEndpointService } from '../core/shared/hal-endpoint.service'; import { HALEndpointService } from '../shared/hal-endpoint.service';
import { RemoteDataBuildService } from '../core/cache/builders/remote-data-build.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { ErrorResponse, RestResponse, SubmissionSuccessResponse } from '../core/cache/response.models'; import { ErrorResponse, RestResponse, SubmissionSuccessResponse } from '../cache/response.models';
import { getResponseFromEntry } from '../core/shared/operators'; import { getResponseFromEntry } from '../shared/operators';
/**
* The service handling all submission requests
*/
@Injectable() @Injectable()
export class SubmissionRestService { export class SubmissionRestService {
protected linkPath = 'workspaceitems'; protected linkPath = 'workspaceitems';
@@ -31,6 +34,14 @@ export class SubmissionRestService {
protected halService: HALEndpointService) { protected halService: HALEndpointService) {
} }
/**
* Fetch a RestRequest
*
* @param requestId
* The base endpoint for the type of object
* @return Observable<SubmitDataResponseDefinitionObject>
* server response
*/
protected fetchRequest(requestId: string): Observable<SubmitDataResponseDefinitionObject> { protected fetchRequest(requestId: string): Observable<SubmitDataResponseDefinitionObject> {
const responses = this.requestService.getByUUID(requestId).pipe( const responses = this.requestService.getByUUID(requestId).pipe(
getResponseFromEntry() getResponseFromEntry()
@@ -47,10 +58,28 @@ export class SubmissionRestService {
return observableMerge(errorResponses, successResponses); return observableMerge(errorResponses, successResponses);
} }
/**
* Create the HREF for a specific submission object based on its identifier
*
* @param endpoint
* The base endpoint for the type of object
* @param resourceID
* The identifier for the object
*/
protected getEndpointByIDHref(endpoint, resourceID): string { protected getEndpointByIDHref(endpoint, resourceID): string {
return isNotEmpty(resourceID) ? `${endpoint}/${resourceID}` : `${endpoint}`; return isNotEmpty(resourceID) ? `${endpoint}/${resourceID}` : `${endpoint}`;
} }
/**
* Delete an existing submission Object on the server
*
* @param scopeId
* The submission Object to be removed
* @param linkName
* The endpoint link name
* @return Observable<SubmitDataResponseDefinitionObject>
* server response
*/
public deleteById(scopeId: string, linkName?: string): Observable<SubmitDataResponseDefinitionObject> { public deleteById(scopeId: string, linkName?: string): Observable<SubmitDataResponseDefinitionObject> {
const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
return this.halService.getEndpoint(linkName || this.linkPath).pipe( return this.halService.getEndpoint(linkName || this.linkPath).pipe(
@@ -59,11 +88,21 @@ export class SubmissionRestService {
map((endpointURL: string) => this.getEndpointByIDHref(endpointURL, scopeId)), map((endpointURL: string) => this.getEndpointByIDHref(endpointURL, scopeId)),
map((endpointURL: string) => new SubmissionDeleteRequest(requestId, endpointURL)), map((endpointURL: string) => new SubmissionDeleteRequest(requestId, endpointURL)),
tap((request: DeleteRequest) => this.requestService.configure(request)), tap((request: DeleteRequest) => this.requestService.configure(request)),
flatMap((request: DeleteRequest) => this.fetchRequest(requestId)), flatMap(() => this.fetchRequest(requestId)),
distinctUntilChanged()); distinctUntilChanged());
} }
public getDataById(linkName: string, id: string): Observable<any> { /**
* Return an existing submission Object from the server
*
* @param linkName
* The endpoint link name
* @param id
* The submission Object to retrieve
* @return Observable<SubmitDataResponseDefinitionObject>
* server response
*/
public getDataById(linkName: string, id: string): Observable<SubmitDataResponseDefinitionObject> {
const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
return this.halService.getEndpoint(linkName).pipe( return this.halService.getEndpoint(linkName).pipe(
map((endpointURL: string) => this.getEndpointByIDHref(endpointURL, id)), map((endpointURL: string) => this.getEndpointByIDHref(endpointURL, id)),
@@ -71,10 +110,24 @@ export class SubmissionRestService {
distinctUntilChanged(), distinctUntilChanged(),
map((endpointURL: string) => new SubmissionRequest(requestId, endpointURL)), map((endpointURL: string) => new SubmissionRequest(requestId, endpointURL)),
tap((request: RestRequest) => this.requestService.configure(request, true)), tap((request: RestRequest) => this.requestService.configure(request, true)),
flatMap((request: RestRequest) => this.fetchRequest(requestId)), flatMap(() => this.fetchRequest(requestId)),
distinctUntilChanged()); distinctUntilChanged());
} }
/**
* Make a new post request
*
* @param linkName
* The endpoint link name
* @param body
* The post request body
* @param scopeId
* The submission Object id
* @param options
* The [HttpOptions] object
* @return Observable<SubmitDataResponseDefinitionObject>
* server response
*/
public postToEndpoint(linkName: string, body: any, scopeId?: string, options?: HttpOptions): Observable<SubmitDataResponseDefinitionObject> { public postToEndpoint(linkName: string, body: any, scopeId?: string, options?: HttpOptions): Observable<SubmitDataResponseDefinitionObject> {
const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
return this.halService.getEndpoint(linkName).pipe( return this.halService.getEndpoint(linkName).pipe(
@@ -83,10 +136,22 @@ export class SubmissionRestService {
distinctUntilChanged(), distinctUntilChanged(),
map((endpointURL: string) => new SubmissionPostRequest(requestId, endpointURL, body, options)), map((endpointURL: string) => new SubmissionPostRequest(requestId, endpointURL, body, options)),
tap((request: PostRequest) => this.requestService.configure(request)), tap((request: PostRequest) => this.requestService.configure(request)),
flatMap((request: PostRequest) => this.fetchRequest(requestId)), flatMap(() => this.fetchRequest(requestId)),
distinctUntilChanged()); distinctUntilChanged());
} }
/**
* Make a new patch to a specified object
*
* @param linkName
* The endpoint link name
* @param body
* The post request body
* @param scopeId
* The submission Object id
* @return Observable<SubmitDataResponseDefinitionObject>
* server response
*/
public patchToEndpoint(linkName: string, body: any, scopeId?: string): Observable<SubmitDataResponseDefinitionObject> { public patchToEndpoint(linkName: string, body: any, scopeId?: string): Observable<SubmitDataResponseDefinitionObject> {
const requestId = this.requestService.generateRequestId(); const requestId = this.requestService.generateRequestId();
return this.halService.getEndpoint(linkName).pipe( return this.halService.getEndpoint(linkName).pipe(
@@ -95,7 +160,7 @@ export class SubmissionRestService {
distinctUntilChanged(), distinctUntilChanged(),
map((endpointURL: string) => new SubmissionPatchRequest(requestId, endpointURL, body)), map((endpointURL: string) => new SubmissionPatchRequest(requestId, endpointURL, body)),
tap((request: PostRequest) => this.requestService.configure(request)), tap((request: PostRequest) => this.requestService.configure(request)),
flatMap((request: PostRequest) => this.fetchRequest(requestId)), flatMap(() => this.fetchRequest(requestId)),
distinctUntilChanged()); distinctUntilChanged());
} }

View File

@@ -13,7 +13,7 @@ import { mockSubmissionId } from '../../../shared/mocks/mock-submission';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { SubmissionRestServiceStub } from '../../../shared/testing/submission-rest-service-stub'; import { SubmissionRestServiceStub } from '../../../shared/testing/submission-rest-service-stub';
import { SubmissionFormFooterComponent } from './submission-form-footer.component'; import { SubmissionFormFooterComponent } from './submission-form-footer.component';
import { SubmissionRestService } from '../../submission-rest.service'; import { SubmissionRestService } from '../../../core/submission/submission-rest.service';
import { createTestComponent } from '../../../shared/testing/utils'; import { createTestComponent } from '../../../shared/testing/utils';
describe('SubmissionFormFooterComponent Component', () => { describe('SubmissionFormFooterComponent Component', () => {

View File

@@ -4,7 +4,7 @@ import { Observable, of as observableOf } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { SubmissionRestService } from '../../submission-rest.service'; import { SubmissionRestService } from '../../../core/submission/submission-rest.service';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { SubmissionScopeType } from '../../../core/submission/submission-scope-type'; import { SubmissionScopeType } from '../../../core/submission/submission-scope-type';
import { isNotEmpty } from '../../../shared/empty.util'; import { isNotEmpty } from '../../../shared/empty.util';

View File

@@ -160,7 +160,6 @@ export class UploadSectionComponent extends SectionModelComponent {
return acc; return acc;
}, []), }, []),
).subscribe((entries: AccessConditionGroupsMapEntry[]) => { ).subscribe((entries: AccessConditionGroupsMapEntry[]) => {
console.log(entries);
entries.forEach((entry: AccessConditionGroupsMapEntry) => { entries.forEach((entry: AccessConditionGroupsMapEntry) => {
this.availableGroups.set(entry.accessCondition, entry.groups); this.availableGroups.set(entry.accessCondition, entry.groups);
}); });

View File

@@ -19,7 +19,6 @@ import { submissionEffects } from './submission.effects';
import { UploadSectionComponent } from './sections/upload/section-upload.component'; import { UploadSectionComponent } from './sections/upload/section-upload.component';
import { SectionUploadService } from './sections/upload/section-upload.service'; import { SectionUploadService } from './sections/upload/section-upload.service';
import { SubmissionUploadFilesComponent } from './form/submission-upload-files/submission-upload-files.component'; import { SubmissionUploadFilesComponent } from './form/submission-upload-files/submission-upload-files.component';
import { SubmissionRestService } from './submission-rest.service';
import { LicenseSectionComponent } from './sections/license/section-license.component'; import { LicenseSectionComponent } from './sections/license/section-license.component';
import { SubmissionUploadsConfigService } from '../core/config/submission-uploads-config.service'; import { SubmissionUploadsConfigService } from '../core/config/submission-uploads-config.service';
import { SubmissionEditComponent } from './edit/submission-edit.component'; import { SubmissionEditComponent } from './edit/submission-edit.component';
@@ -69,9 +68,12 @@ import { SubmissionSubmitComponent } from './submit/submission-submit.component'
providers: [ providers: [
SectionUploadService, SectionUploadService,
SectionsService, SectionsService,
SubmissionRestService,
SubmissionUploadsConfigService SubmissionUploadsConfigService
] ]
}) })
/**
* This module handles all components that are necessary for the submission process
*/
export class SubmissionModule { export class SubmissionModule {
} }

View File

@@ -11,7 +11,7 @@ import { cold, getTestScheduler, hot, } from 'jasmine-marbles';
import { MockRouter } from '../shared/mocks/mock-router'; import { MockRouter } from '../shared/mocks/mock-router';
import { SubmissionService } from './submission.service'; import { SubmissionService } from './submission.service';
import { submissionReducers } from './submission.reducers'; import { submissionReducers } from './submission.reducers';
import { SubmissionRestService } from './submission-rest.service'; import { SubmissionRestService } from '../core/submission/submission-rest.service';
import { RouteService } from '../shared/services/route.service'; import { RouteService } from '../shared/services/route.service';
import { SubmissionRestServiceStub } from '../shared/testing/submission-rest-service-stub'; import { SubmissionRestServiceStub } from '../shared/testing/submission-rest-service-stub';
import { MockActivatedRoute } from '../shared/mocks/mock-active-router'; import { MockActivatedRoute } from '../shared/mocks/mock-active-router';

View File

@@ -31,7 +31,7 @@ import { submissionObjectFromIdSelector } from './selectors';
import { GlobalConfig } from '../../config/global-config.interface'; import { GlobalConfig } from '../../config/global-config.interface';
import { GLOBAL_CONFIG } from '../../config'; import { GLOBAL_CONFIG } from '../../config';
import { HttpOptions } from '../core/dspace-rest-v2/dspace-rest-v2.service'; import { HttpOptions } from '../core/dspace-rest-v2/dspace-rest-v2.service';
import { SubmissionRestService } from './submission-rest.service'; import { SubmissionRestService } from '../core/submission/submission-rest.service';
import { SectionDataObject } from './sections/models/section-data.model'; import { SectionDataObject } from './sections/models/section-data.model';
import { SubmissionScopeType } from '../core/submission/submission-scope-type'; import { SubmissionScopeType } from '../core/submission/submission-scope-type';
import { SubmissionObject } from '../core/submission/models/submission-object.model'; import { SubmissionObject } from '../core/submission/models/submission-object.model';