58522: implemented delete for coll and comms

This commit is contained in:
lotte
2019-01-04 16:30:25 +01:00
parent 773973cdef
commit ab5cc1c961
24 changed files with 281 additions and 32 deletions

View File

@@ -86,7 +86,7 @@ describe('ComColDataService', () => {
function initMockCommunityDataService(): CommunityDataService {
return jasmine.createSpyObj('responseCache', {
getEndpoint: hot('--a-', { a: communitiesEndpoint }),
getFindByIDHref: cold('b-', { b: communityEndpoint })
getIDHref: cold('b-', { b: communityEndpoint })
});
}

View File

@@ -42,7 +42,7 @@ export abstract class ComColDataService<TNormalized extends NormalizedObject, TD
return this.halService.getEndpoint(linkPath);
} else {
const scopeCommunityHrefObs = this.cds.getEndpoint().pipe(
mergeMap((endpoint: string) => this.cds.getFindByIDHref(endpoint, options.scopeID)),
mergeMap((endpoint: string) => this.cds.getIDHref(endpoint, options.scopeID)),
filter((href: string) => isNotEmpty(href)),
take(1),
tap((href: string) => {

View File

@@ -18,7 +18,7 @@ import { URLCombiner } from '../url-combiner/url-combiner';
import { PaginatedList } from './paginated-list';
import { RemoteData } from './remote-data';
import {
CreateRequest,
CreateRequest, DeleteByIDRequest,
FindAllOptions,
FindAllRequest,
FindByIDRequest,
@@ -33,7 +33,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s
import { HttpClient } from '@angular/common/http';
import {
configureRequest,
filterSuccessfulResponses, getResourceLinksFromResponse,
filterSuccessfulResponses, getFinishedRemoteData, getResourceLinksFromResponse,
getResponseFromEntry
} from '../shared/operators';
import { DSOSuccessResponse, ErrorResponse, RestResponse } from '../cache/response.models';
@@ -43,6 +43,7 @@ import { NormalizedObjectFactory } from '../cache/models/normalized-object-facto
import { CacheableObject } from '../cache/object-cache.reducer';
import { DataBuildService } from '../cache/builders/data-build.service';
import { UpdateComparator } from './update-comparator';
import { RequestEntry } from './request.reducer';
export abstract class DataService<TNormalized extends NormalizedObject, TDomain extends CacheableObject> {
protected abstract requestService: RequestService;
@@ -97,13 +98,13 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain
return this.rdbService.buildList<TNormalized, TDomain>(hrefObs) as Observable<RemoteData<PaginatedList<TDomain>>>;
}
getFindByIDHref(endpoint, resourceID): string {
getIDHref(endpoint, resourceID): string {
return `${endpoint}/${resourceID}`;
}
findById(id: string): Observable<RemoteData<TDomain>> {
const hrefObs = this.halService.getEndpoint(this.linkPath).pipe(
map((endpoint: string) => this.getFindByIDHref(endpoint, id)));
map((endpoint: string) => this.getIDHref(endpoint, id)));
hrefObs.pipe(
find((href: string) => hasValue(href)))
@@ -192,4 +193,24 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain
)
}
delete(dso: TDomain): Observable<boolean> {
const requestId = this.requestService.generateRequestId();
const hrefObs = this.halService.getEndpoint(this.linkPath).pipe(
map((endpoint: string) => this.getIDHref(endpoint, dso.uuid)));
hrefObs.pipe(
find((href: string) => hasValue(href)),
map((href: string) => {
const request = new DeleteByIDRequest(requestId, href, dso.uuid);
this.requestService.configure(request);
})
).subscribe();
return this.requestService.getByUUID(requestId).pipe(
find((request: RequestEntry) => request.completed),
map((request: RequestEntry) => request.response.isSuccessful)
);
}
}

View File

@@ -37,7 +37,7 @@ class DataServiceImpl extends DataService<NormalizedDSpaceObject, DSpaceObject>
return this.halService.getEndpoint(linkPath);
}
getFindByIDHref(endpoint, resourceID): string {
getIDHref(endpoint, resourceID): string {
return endpoint.replace(/\{\?uuid\}/,`?uuid=${resourceID}`);
}
}

View File

@@ -227,6 +227,17 @@ export class CreateRequest extends PostRequest {
}
}
export class DeleteByIDRequest extends DeleteRequest {
constructor(
uuid: string,
href: string,
public resourceID: string
) {
super(uuid, href);
}
}
export class RequestError extends Error {
statusText: string;
}