Skip to content

Commit 2d6d1c6

Browse files
committed
feat: remaining entity service methods
* Fixed issue with operation not being passed to url prefix resolver + Added createMany + Added updateMany + Added replaceMany + Added deleteMany + Added deleteManyByKeys
1 parent e615fca commit 2d6d1c6

File tree

1 file changed

+35
-2
lines changed

1 file changed

+35
-2
lines changed

projects/ngrx-auto-entity-service/src/lib/entity.service.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class EntityService implements IAutoEntityService<any> {
2020
}
2121

2222
protected buildUrl(operation: string, info: IEntityInfo, criteria?: EntityCriteria, key?: string | number) {
23-
return this.getUrlPrefix('load', info, criteria).pipe(
23+
return this.getUrlPrefix(operation, info, criteria).pipe(
2424
first(),
2525
map(prefix => buildUrl(prefix, info, criteria, key))
2626
);
@@ -48,25 +48,58 @@ export class EntityService implements IAutoEntityService<any> {
4848
return this.buildUrl('create', entityInfo, criteria).pipe(switchMap(url => this.http.post<any>(url, entity)));
4949
}
5050

51+
createMany(entityInfo: IEntityInfo, entities: any[], criteria?: any, originalEntities?: any[]): Observable<any[]> {
52+
return this.buildUrl('createMany', entityInfo, criteria).pipe(switchMap(url => this.http.post<any>(url, entities)));
53+
}
54+
5155
update(entityInfo: IEntityInfo, entity: any, criteria?: EntityCriteria, originalEntity?: any): Observable<any> {
5256
return this.buildUrl('update', entityInfo, criteria, getKeyFromModel(entityInfo.modelType, entity)).pipe(
5357
switchMap(url => this.http.patch<any>(url, entity))
5458
);
5559
}
5660

61+
updateMany(entityInfo: IEntityInfo, entities: any[], criteria?: any, originalEntities?: any[]): Observable<any[]> {
62+
return this.buildUrl('updateMany', entityInfo, criteria).pipe(switchMap(url => this.http.patch<any>(url, entities)));
63+
}
64+
5765
replace(entityInfo: IEntityInfo, entity: any, criteria?: EntityCriteria, originalEntity?: any): Observable<any> {
5866
return this.buildUrl('replace', entityInfo, criteria, getKeyFromModel(entityInfo.modelType, entity)).pipe(
5967
switchMap(url => this.http.put<any>(url, entity))
6068
);
6169
}
6270

71+
replaceMany(entityInfo: IEntityInfo, entities: any[], criteria?: any, originalEntities?: any[]): Observable<any[]> {
72+
return this.buildUrl('replaceMany', entityInfo, criteria).pipe(switchMap(url => this.http.put<any>(url, entities)));
73+
}
74+
6375
delete(entityInfo: IEntityInfo, entity: any, criteria?: EntityCriteria, originalEntity?: any): Observable<any> {
6476
return this.buildUrl('delete', entityInfo, criteria, getKeyFromModel(entityInfo.modelType, entity)).pipe(
65-
switchMap(url => this.http.delete<any>(url, entity).pipe(map(() => entity)))
77+
switchMap(url =>
78+
this.http.delete<any>(url, {
79+
body: entity
80+
})
81+
),
82+
map(() => entity)
83+
);
84+
}
85+
86+
deleteMany(entityInfo: IEntityInfo, entities: any[], criteria?: any, originalEntities?: any[]): Observable<any[]> {
87+
return this.buildUrl('deleteMany', entityInfo, criteria).pipe(
88+
switchMap(url => this.http.delete<any>(url, { body: entities })),
89+
map(() => entities)
6690
);
6791
}
6892

6993
deleteByKey(entityInfo: IEntityInfo, key: EntityIdentity, criteria?: EntityCriteria): Observable<EntityIdentity> {
7094
return this.buildUrl('deleteByKey', entityInfo, criteria, key).pipe(switchMap(url => this.http.delete<any>(url).pipe(map(() => key))));
7195
}
96+
97+
deleteManyByKeys(entityInfo: IEntityInfo, keys: EntityIdentity[], criteria?: any): Observable<any[]> {
98+
// TODO: Is this the best way to handle this case?
99+
// This seems like a somewhat odd REST API pattern.
100+
return this.buildUrl('deleteManyByKeys', entityInfo, criteria).pipe(
101+
switchMap(url => this.http.delete<any>(url, { body: { keys } })),
102+
map(() => keys)
103+
);
104+
}
72105
}

0 commit comments

Comments
 (0)