diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 6aa58f791e..dfcb2b4fa1 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -68,7 +68,7 @@ import { WorkflowitemDataService } from './submission/workflowitem-data.service' import { NotificationsService } from '../shared/notifications/notifications.service'; import { UploaderService } from '../shared/uploader/uploader.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 { DSpaceObjectDataService } from './data/dspace-object-data.service'; import { MetadataschemaParsingService } from './data/metadataschema-parsing.service'; diff --git a/src/app/submission/submission-rest.service.spec.ts b/src/app/core/submission/submission-rest.service.spec.ts similarity index 83% rename from src/app/submission/submission-rest.service.spec.ts rename to src/app/core/submission/submission-rest.service.spec.ts index c5992d7d10..6e748c5575 100644 --- a/src/app/submission/submission-rest.service.spec.ts +++ b/src/app/core/submission/submission-rest.service.spec.ts @@ -2,18 +2,18 @@ import { TestScheduler } from 'rxjs/testing'; import { getTestScheduler } from 'jasmine-marbles'; import { SubmissionRestService } from './submission-rest.service'; -import { RequestService } from '../core/data/request.service'; -import { RemoteDataBuildService } from '../core/cache/builders/remote-data-build.service'; -import { getMockRequestService } from '../shared/mocks/mock-request.service'; -import { getMockRemoteDataBuildService } from '../shared/mocks/mock-remote-data-build.service'; -import { HALEndpointServiceStub } from '../shared/testing/hal-endpoint-service-stub'; +import { RequestService } from '../data/request.service'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { getMockRequestService } from '../../shared/mocks/mock-request.service'; +import { getMockRemoteDataBuildService } from '../../shared/mocks/mock-remote-data-build.service'; +import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service-stub'; import { SubmissionDeleteRequest, SubmissionPatchRequest, SubmissionPostRequest, SubmissionRequest -} from '../core/data/request.models'; -import { FormFieldMetadataValueObject } from '../shared/form/builder/models/form-field-metadata-value.model'; +} from '../data/request.models'; +import { FormFieldMetadataValueObject } from '../../shared/form/builder/models/form-field-metadata-value.model'; describe('SubmissionRestService test suite', () => { let scheduler: TestScheduler; diff --git a/src/app/submission/submission-rest.service.ts b/src/app/core/submission/submission-rest.service.ts similarity index 60% rename from src/app/submission/submission-rest.service.ts rename to src/app/core/submission/submission-rest.service.ts index b5d563549f..a249f10c6f 100644 --- a/src/app/submission/submission-rest.service.ts +++ b/src/app/core/submission/submission-rest.service.ts @@ -3,8 +3,8 @@ import { Injectable } from '@angular/core'; import { merge as observableMerge, Observable, throwError as observableThrowError } from 'rxjs'; import { distinctUntilChanged, filter, flatMap, map, mergeMap, tap } from 'rxjs/operators'; -import { RequestService } from '../core/data/request.service'; -import { isNotEmpty } from '../shared/empty.util'; +import { RequestService } from '../data/request.service'; +import { isNotEmpty } from '../../shared/empty.util'; import { DeleteRequest, PostRequest, @@ -13,14 +13,17 @@ import { SubmissionPatchRequest, SubmissionPostRequest, SubmissionRequest -} from '../core/data/request.models'; -import { SubmitDataResponseDefinitionObject } from '../core/shared/submit-data-response-definition.model'; -import { HttpOptions } from '../core/dspace-rest-v2/dspace-rest-v2.service'; -import { HALEndpointService } from '../core/shared/hal-endpoint.service'; -import { RemoteDataBuildService } from '../core/cache/builders/remote-data-build.service'; -import { ErrorResponse, RestResponse, SubmissionSuccessResponse } from '../core/cache/response.models'; -import { getResponseFromEntry } from '../core/shared/operators'; +} from '../data/request.models'; +import { SubmitDataResponseDefinitionObject } from '../shared/submit-data-response-definition.model'; +import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { ErrorResponse, RestResponse, SubmissionSuccessResponse } from '../cache/response.models'; +import { getResponseFromEntry } from '../shared/operators'; +/** + * The service handling all submission requests + */ @Injectable() export class SubmissionRestService { protected linkPath = 'workspaceitems'; @@ -31,6 +34,14 @@ export class SubmissionRestService { protected halService: HALEndpointService) { } + /** + * Fetch a RestRequest + * + * @param requestId + * The base endpoint for the type of object + * @return Observable + * server response + */ protected fetchRequest(requestId: string): Observable { const responses = this.requestService.getByUUID(requestId).pipe( getResponseFromEntry() @@ -47,10 +58,28 @@ export class SubmissionRestService { 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 { 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 + * server response + */ public deleteById(scopeId: string, linkName?: string): Observable { const requestId = this.requestService.generateRequestId(); 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) => new SubmissionDeleteRequest(requestId, endpointURL)), tap((request: DeleteRequest) => this.requestService.configure(request)), - flatMap((request: DeleteRequest) => this.fetchRequest(requestId)), + flatMap(() => this.fetchRequest(requestId)), distinctUntilChanged()); } - public getDataById(linkName: string, id: string): Observable { + /** + * Return an existing submission Object from the server + * + * @param linkName + * The endpoint link name + * @param id + * The submission Object to retrieve + * @return Observable + * server response + */ + public getDataById(linkName: string, id: string): Observable { const requestId = this.requestService.generateRequestId(); return this.halService.getEndpoint(linkName).pipe( map((endpointURL: string) => this.getEndpointByIDHref(endpointURL, id)), @@ -71,10 +110,24 @@ export class SubmissionRestService { distinctUntilChanged(), map((endpointURL: string) => new SubmissionRequest(requestId, endpointURL)), tap((request: RestRequest) => this.requestService.configure(request, true)), - flatMap((request: RestRequest) => this.fetchRequest(requestId)), + flatMap(() => this.fetchRequest(requestId)), 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 + * server response + */ public postToEndpoint(linkName: string, body: any, scopeId?: string, options?: HttpOptions): Observable { const requestId = this.requestService.generateRequestId(); return this.halService.getEndpoint(linkName).pipe( @@ -83,10 +136,22 @@ export class SubmissionRestService { distinctUntilChanged(), map((endpointURL: string) => new SubmissionPostRequest(requestId, endpointURL, body, options)), tap((request: PostRequest) => this.requestService.configure(request)), - flatMap((request: PostRequest) => this.fetchRequest(requestId)), + flatMap(() => this.fetchRequest(requestId)), 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 + * server response + */ public patchToEndpoint(linkName: string, body: any, scopeId?: string): Observable { const requestId = this.requestService.generateRequestId(); return this.halService.getEndpoint(linkName).pipe( @@ -95,7 +160,7 @@ export class SubmissionRestService { distinctUntilChanged(), map((endpointURL: string) => new SubmissionPatchRequest(requestId, endpointURL, body)), tap((request: PostRequest) => this.requestService.configure(request)), - flatMap((request: PostRequest) => this.fetchRequest(requestId)), + flatMap(() => this.fetchRequest(requestId)), distinctUntilChanged()); } diff --git a/src/app/submission/form/footer/submission-form-footer.component.spec.ts b/src/app/submission/form/footer/submission-form-footer.component.spec.ts index fb3a810501..5fbfd84cb8 100644 --- a/src/app/submission/form/footer/submission-form-footer.component.spec.ts +++ b/src/app/submission/form/footer/submission-form-footer.component.spec.ts @@ -13,7 +13,7 @@ import { mockSubmissionId } from '../../../shared/mocks/mock-submission'; import { SubmissionService } from '../../submission.service'; import { SubmissionRestServiceStub } from '../../../shared/testing/submission-rest-service-stub'; 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'; describe('SubmissionFormFooterComponent Component', () => { diff --git a/src/app/submission/form/footer/submission-form-footer.component.ts b/src/app/submission/form/footer/submission-form-footer.component.ts index 5f2f36cc22..7245234fb4 100644 --- a/src/app/submission/form/footer/submission-form-footer.component.ts +++ b/src/app/submission/form/footer/submission-form-footer.component.ts @@ -4,7 +4,7 @@ import { Observable, of as observableOf } from 'rxjs'; import { map } from 'rxjs/operators'; 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 { SubmissionScopeType } from '../../../core/submission/submission-scope-type'; import { isNotEmpty } from '../../../shared/empty.util'; diff --git a/src/app/submission/sections/upload/section-upload.component.ts b/src/app/submission/sections/upload/section-upload.component.ts index ff620cfa65..0c2eda5d77 100644 --- a/src/app/submission/sections/upload/section-upload.component.ts +++ b/src/app/submission/sections/upload/section-upload.component.ts @@ -160,7 +160,6 @@ export class UploadSectionComponent extends SectionModelComponent { return acc; }, []), ).subscribe((entries: AccessConditionGroupsMapEntry[]) => { - console.log(entries); entries.forEach((entry: AccessConditionGroupsMapEntry) => { this.availableGroups.set(entry.accessCondition, entry.groups); }); diff --git a/src/app/submission/submission.module.ts b/src/app/submission/submission.module.ts index 80a11cb27d..1b29f43a51 100644 --- a/src/app/submission/submission.module.ts +++ b/src/app/submission/submission.module.ts @@ -19,7 +19,6 @@ import { submissionEffects } from './submission.effects'; import { UploadSectionComponent } from './sections/upload/section-upload.component'; import { SectionUploadService } from './sections/upload/section-upload.service'; 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 { SubmissionUploadsConfigService } from '../core/config/submission-uploads-config.service'; import { SubmissionEditComponent } from './edit/submission-edit.component'; @@ -69,9 +68,12 @@ import { SubmissionSubmitComponent } from './submit/submission-submit.component' providers: [ SectionUploadService, SectionsService, - SubmissionRestService, SubmissionUploadsConfigService ] }) + +/** + * This module handles all components that are necessary for the submission process + */ export class SubmissionModule { } diff --git a/src/app/submission/submission.service.spec.ts b/src/app/submission/submission.service.spec.ts index 0522f279dd..a35cf8329c 100644 --- a/src/app/submission/submission.service.spec.ts +++ b/src/app/submission/submission.service.spec.ts @@ -11,7 +11,7 @@ import { cold, getTestScheduler, hot, } from 'jasmine-marbles'; import { MockRouter } from '../shared/mocks/mock-router'; import { SubmissionService } from './submission.service'; 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 { SubmissionRestServiceStub } from '../shared/testing/submission-rest-service-stub'; import { MockActivatedRoute } from '../shared/mocks/mock-active-router'; diff --git a/src/app/submission/submission.service.ts b/src/app/submission/submission.service.ts index d086f6f3d4..11b26e2b5e 100644 --- a/src/app/submission/submission.service.ts +++ b/src/app/submission/submission.service.ts @@ -31,7 +31,7 @@ import { submissionObjectFromIdSelector } from './selectors'; import { GlobalConfig } from '../../config/global-config.interface'; import { GLOBAL_CONFIG } from '../../config'; 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 { SubmissionScopeType } from '../core/submission/submission-scope-type'; import { SubmissionObject } from '../core/submission/models/submission-object.model';