-
Notifications
You must be signed in to change notification settings - Fork 138
/
base-entity.service.ts
88 lines (69 loc) · 2.63 KB
/
base-entity.service.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// angular
import { HttpClient } from '@angular/common/http';
// libs
import { Observable } from 'rxjs';
import { retry } from 'rxjs/operators';
import { flow } from 'lodash/fp';
import { ConfigService } from '@ngx-config/core';
// module
import { BaseDocument, UniqueId } from './models/base-document';
import { HTTP_CLIENT__MAX_RETRIES } from './constants';
export abstract class BaseEntityService<T extends BaseDocument> {
protected constructor(protected readonly config: ConfigService,
protected readonly http: HttpClient,
protected readonly settingsKey: string | Array<string>) {
}
getMany$(): Observable<Array<T>> {
const backend = this.config.getSettings(this.settingsKey);
return this.http
.get<Array<T>>(backend.endpoint)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES));
}
getOne$(id: UniqueId): Observable<T> {
const backend = this.config.getSettings(this.settingsKey);
return this.http
.get<T>(`${backend.endpoint}/${id}`)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES));
}
createMany$(resources: Array<T>): Observable<Array<T>> {
const backend = this.config.getSettings(this.settingsKey);
return this.http
.post<Array<T>>(backend.endpoint, resources)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES));
}
createOne$(resource: T): Observable<T> {
const backend = this.config.getSettings(this.settingsKey);
return this.http
.post<T>(backend.endpoint, resource)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES));
}
updateMany$(resources: Array<T>): Observable<Array<T>> {
const backend = this.config.getSettings(this.settingsKey);
return flow(
(cur: Array<T>) => cur
.map(resource => resource._id)
.join(','),
cur => this.http
.patch<Array<T>>(`${backend.endpoint}/${cur}`, resources)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES))
)(resources);
}
updateOne$(resource: T): Observable<T> {
const backend = this.config.getSettings(this.settingsKey);
return this.http
.patch<T>(`${backend.endpoint}/${resource._id}`, resource)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES));
}
deleteMany$(ids: Array<UniqueId>): Observable<Array<UniqueId>> {
const backend = this.config.getSettings(this.settingsKey);
return this.http
.delete<Array<UniqueId>>(`${backend.endpoint}/${ids.join(',')}`)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES));
}
deleteOne$(id: UniqueId): Observable<UniqueId> {
const backend = this.config.getSettings(this.settingsKey);
return this.http
.delete<UniqueId>(`${backend.endpoint}/${id}`)
.pipe(retry(HTTP_CLIENT__MAX_RETRIES));
}
}