@minimaltech/ra-core-infra 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +119 -0
  3. package/dist/base/applications/base.application.d.ts +12 -0
  4. package/dist/base/applications/base.application.js +22 -0
  5. package/dist/base/applications/base.application.js.map +1 -0
  6. package/dist/base/applications/index.d.ts +1 -0
  7. package/dist/base/applications/index.js +2 -0
  8. package/dist/base/applications/index.js.map +1 -0
  9. package/dist/base/index.d.ts +3 -0
  10. package/dist/base/index.js +4 -0
  11. package/dist/base/index.js.map +1 -0
  12. package/dist/base/providers/base.provider.d.ts +10 -0
  13. package/dist/base/providers/base.provider.js +8 -0
  14. package/dist/base/providers/base.provider.js.map +1 -0
  15. package/dist/base/providers/count-rest-data.provider.d.ts +19 -0
  16. package/dist/base/providers/count-rest-data.provider.js +28 -0
  17. package/dist/base/providers/count-rest-data.provider.js.map +1 -0
  18. package/dist/base/providers/default-auth.provider.d.ts +17 -0
  19. package/dist/base/providers/default-auth.provider.js +116 -0
  20. package/dist/base/providers/default-auth.provider.js.map +1 -0
  21. package/dist/base/providers/default-i18n.provider.d.ts +8 -0
  22. package/dist/base/providers/default-i18n.provider.js +42 -0
  23. package/dist/base/providers/default-i18n.provider.js.map +1 -0
  24. package/dist/base/providers/default-rest-data.provider.d.ts +66 -0
  25. package/dist/base/providers/default-rest-data.provider.js +355 -0
  26. package/dist/base/providers/default-rest-data.provider.js.map +1 -0
  27. package/dist/base/providers/index.d.ts +5 -0
  28. package/dist/base/providers/index.js +6 -0
  29. package/dist/base/providers/index.js.map +1 -0
  30. package/dist/base/services/base-crud.service.d.ts +34 -0
  31. package/dist/base/services/base-crud.service.js +157 -0
  32. package/dist/base/services/base-crud.service.js.map +1 -0
  33. package/dist/base/services/base-network-request.service.d.ts +18 -0
  34. package/dist/base/services/base-network-request.service.js +43 -0
  35. package/dist/base/services/base-network-request.service.js.map +1 -0
  36. package/dist/base/services/default-auth.service.d.ts +22 -0
  37. package/dist/base/services/default-auth.service.js +38 -0
  38. package/dist/base/services/default-auth.service.js.map +1 -0
  39. package/dist/base/services/default-network-data.service.d.ts +173 -0
  40. package/dist/base/services/default-network-data.service.js +158 -0
  41. package/dist/base/services/default-network-data.service.js.map +1 -0
  42. package/dist/base/services/index.d.ts +4 -0
  43. package/dist/base/services/index.js +5 -0
  44. package/dist/base/services/index.js.map +1 -0
  45. package/dist/common/constants.d.ts +52 -0
  46. package/dist/common/constants.js +86 -0
  47. package/dist/common/constants.js.map +1 -0
  48. package/dist/common/index.d.ts +4 -0
  49. package/dist/common/index.js +5 -0
  50. package/dist/common/index.js.map +1 -0
  51. package/dist/common/keys.d.ts +15 -0
  52. package/dist/common/keys.js +16 -0
  53. package/dist/common/keys.js.map +1 -0
  54. package/dist/common/locales/en.d.ts +2 -0
  55. package/dist/common/locales/en.js +207 -0
  56. package/dist/common/locales/en.js.map +1 -0
  57. package/dist/common/locales/index.d.ts +2 -0
  58. package/dist/common/locales/index.js +3 -0
  59. package/dist/common/locales/index.js.map +1 -0
  60. package/dist/common/locales/vi.d.ts +2 -0
  61. package/dist/common/locales/vi.js +206 -0
  62. package/dist/common/locales/vi.js.map +1 -0
  63. package/dist/common/types.d.ts +147 -0
  64. package/dist/common/types.js +2 -0
  65. package/dist/common/types.js.map +1 -0
  66. package/dist/helpers/di-container.helper.d.ts +8 -0
  67. package/dist/helpers/di-container.helper.js +20 -0
  68. package/dist/helpers/di-container.helper.js.map +1 -0
  69. package/dist/helpers/index.d.ts +3 -0
  70. package/dist/helpers/index.js +4 -0
  71. package/dist/helpers/index.js.map +1 -0
  72. package/dist/helpers/logger.helper.d.ts +37 -0
  73. package/dist/helpers/logger.helper.js +65 -0
  74. package/dist/helpers/logger.helper.js.map +1 -0
  75. package/dist/helpers/network.helper.d.ts +25 -0
  76. package/dist/helpers/network.helper.js +56 -0
  77. package/dist/helpers/network.helper.js.map +1 -0
  78. package/dist/index.d.ts +5 -0
  79. package/dist/index.js +6 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/ui/components/CoreRaApplication.d.ts +3 -0
  82. package/dist/ui/components/CoreRaApplication.js +31 -0
  83. package/dist/ui/components/CoreRaApplication.js.map +1 -0
  84. package/dist/ui/components/index.d.ts +1 -0
  85. package/dist/ui/components/index.js +2 -0
  86. package/dist/ui/components/index.js.map +1 -0
  87. package/dist/ui/context.d.ts +8 -0
  88. package/dist/ui/context.js +7 -0
  89. package/dist/ui/context.js.map +1 -0
  90. package/dist/ui/hooks/index.d.ts +10 -0
  91. package/dist/ui/hooks/index.js +11 -0
  92. package/dist/ui/hooks/index.js.map +1 -0
  93. package/dist/ui/hooks/use-application-context.d.ts +2 -0
  94. package/dist/ui/hooks/use-application-context.js +22 -0
  95. package/dist/ui/hooks/use-application-context.js.map +1 -0
  96. package/dist/ui/hooks/use-autosave.d.ts +8 -0
  97. package/dist/ui/hooks/use-autosave.js +38 -0
  98. package/dist/ui/hooks/use-autosave.js.map +1 -0
  99. package/dist/ui/hooks/use-before-unload.d.ts +5 -0
  100. package/dist/ui/hooks/use-before-unload.js +22 -0
  101. package/dist/ui/hooks/use-before-unload.js.map +1 -0
  102. package/dist/ui/hooks/use-confirm.d.ts +10 -0
  103. package/dist/ui/hooks/use-confirm.js +29 -0
  104. package/dist/ui/hooks/use-confirm.js.map +1 -0
  105. package/dist/ui/hooks/use-copy-to-clipboard.d.ts +6 -0
  106. package/dist/ui/hooks/use-copy-to-clipboard.js +20 -0
  107. package/dist/ui/hooks/use-copy-to-clipboard.js.map +1 -0
  108. package/dist/ui/hooks/use-debounce.d.ts +9 -0
  109. package/dist/ui/hooks/use-debounce.js +20 -0
  110. package/dist/ui/hooks/use-debounce.js.map +1 -0
  111. package/dist/ui/hooks/use-document-title.d.ts +5 -0
  112. package/dist/ui/hooks/use-document-title.js +11 -0
  113. package/dist/ui/hooks/use-document-title.js.map +1 -0
  114. package/dist/ui/hooks/use-injectable.d.ts +10 -0
  115. package/dist/ui/hooks/use-injectable.js +15 -0
  116. package/dist/ui/hooks/use-injectable.js.map +1 -0
  117. package/dist/ui/hooks/use-sizer.d.ts +6 -0
  118. package/dist/ui/hooks/use-sizer.js +33 -0
  119. package/dist/ui/hooks/use-sizer.js.map +1 -0
  120. package/dist/ui/hooks/use-window-dimensions.d.ts +4 -0
  121. package/dist/ui/hooks/use-window-dimensions.js +21 -0
  122. package/dist/ui/hooks/use-window-dimensions.js.map +1 -0
  123. package/dist/ui/index.d.ts +4 -0
  124. package/dist/ui/index.js +5 -0
  125. package/dist/ui/index.js.map +1 -0
  126. package/dist/ui/types.d.ts +14 -0
  127. package/dist/ui/types.js +2 -0
  128. package/dist/ui/types.js.map +1 -0
  129. package/dist/utilities/boolean.utility.d.ts +6 -0
  130. package/dist/utilities/boolean.utility.js +26 -0
  131. package/dist/utilities/boolean.utility.js.map +1 -0
  132. package/dist/utilities/error.utility.d.ts +18 -0
  133. package/dist/utilities/error.utility.js +35 -0
  134. package/dist/utilities/error.utility.js.map +1 -0
  135. package/dist/utilities/index.d.ts +4 -0
  136. package/dist/utilities/index.js +5 -0
  137. package/dist/utilities/index.js.map +1 -0
  138. package/dist/utilities/parse.utility.d.ts +14 -0
  139. package/dist/utilities/parse.utility.js +130 -0
  140. package/dist/utilities/parse.utility.js.map +1 -0
  141. package/dist/utilities/url.utility.d.ts +4 -0
  142. package/dist/utilities/url.utility.js +27 -0
  143. package/dist/utilities/url.utility.js.map +1 -0
  144. package/package.json +117 -0
@@ -0,0 +1,355 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var DefaultRestDataProvider_1;
14
+ import { inject } from '@loopback/context';
15
+ import omit from 'lodash/omit';
16
+ import { DefaultNetworkRequestService } from '@/base/services';
17
+ import { CoreBindings, RequestMethods, RequestTypes, } from '@/common';
18
+ import { getError } from '@/utilities';
19
+ import { BaseProvider } from './base.provider';
20
+ let DefaultRestDataProvider = DefaultRestDataProvider_1 = class DefaultRestDataProvider extends BaseProvider {
21
+ restDataProviderOptions;
22
+ networkService;
23
+ constructor(restDataProviderOptions) {
24
+ super({ scope: DefaultRestDataProvider_1.name });
25
+ this.restDataProviderOptions = restDataProviderOptions;
26
+ this.networkService = new DefaultNetworkRequestService({
27
+ name: 'default-application-network-service',
28
+ baseUrl: this.restDataProviderOptions.url,
29
+ noAuthPaths: this.restDataProviderOptions.noAuthPaths,
30
+ });
31
+ }
32
+ getListHelper(opts) {
33
+ const { type, resource, queryKey, filter, requestProps } = opts;
34
+ const paths = [resource];
35
+ const response = this.networkService.doRequest({
36
+ type,
37
+ paths,
38
+ query: { ...queryKey, filter },
39
+ ...requestProps,
40
+ });
41
+ return response;
42
+ }
43
+ getList(opts) {
44
+ const { resource, params } = opts;
45
+ const { pagination, sort, filter: filterGetList, meta, ...rest } = params;
46
+ let filter = {};
47
+ if (filterGetList?.where) {
48
+ filter = { ...filterGetList, where: filterGetList.where };
49
+ }
50
+ else {
51
+ filter['where'] = {
52
+ ...omit(filterGetList, ['include', 'params', 'noLimit', 'fields']),
53
+ };
54
+ filter['include'] = filterGetList?.include;
55
+ filter['fields'] = filterGetList?.fields;
56
+ filter['params'] = filterGetList?.params;
57
+ filter['noLimit'] = filterGetList?.noLimit;
58
+ }
59
+ if (sort?.field) {
60
+ filter['order'] = [`${sort.field} ${sort.order}`];
61
+ }
62
+ if (filter?.noLimit) {
63
+ filter['limit'] = undefined;
64
+ filter['skip'] = undefined;
65
+ filter['offset'] = undefined;
66
+ filter['noLimit'] = undefined;
67
+ }
68
+ else {
69
+ const { page = 0, perPage = 0 } = pagination ?? {};
70
+ if (perPage >= 0) {
71
+ filter['limit'] = perPage;
72
+ }
73
+ if (perPage > 0 && page >= 0) {
74
+ filter['skip'] = (page - 1) * perPage;
75
+ filter['offset'] = (page - 1) * perPage;
76
+ }
77
+ }
78
+ for (const key in rest) {
79
+ if (!params[key]) {
80
+ continue;
81
+ }
82
+ filter[key] = params[key];
83
+ }
84
+ const queryKey = {};
85
+ if (filter?.params) {
86
+ for (const key in filter.params) {
87
+ queryKey[key] = filter.params[key];
88
+ }
89
+ filter['params'] = undefined;
90
+ }
91
+ if (meta) {
92
+ for (const key in meta) {
93
+ queryKey[key] = meta[key];
94
+ }
95
+ }
96
+ const request = this.networkService.getRequestProps({ resource });
97
+ const requestProps = {
98
+ method: RequestMethods.GET,
99
+ ...request,
100
+ };
101
+ const response = this.getListHelper({
102
+ type: RequestTypes.GET_LIST,
103
+ resource,
104
+ queryKey,
105
+ filter,
106
+ requestProps,
107
+ });
108
+ return response;
109
+ }
110
+ getOne(opts) {
111
+ const { resource, params } = opts;
112
+ const request = this.networkService.getRequestProps({ resource });
113
+ const filter = params?.meta?.filter || {};
114
+ const queryKey = {};
115
+ if (filter?.params) {
116
+ for (const key in filter.params) {
117
+ queryKey[key] = filter.params[key];
118
+ }
119
+ }
120
+ const response = this.networkService.doRequest({
121
+ type: RequestTypes.GET_ONE,
122
+ method: RequestMethods.GET,
123
+ query: { ...queryKey, filter: { ...omit(filter, 'params') } },
124
+ paths: [resource, `${params.id}`],
125
+ ...request,
126
+ });
127
+ return response;
128
+ }
129
+ getMany(opts) {
130
+ const { resource, params } = opts;
131
+ const request = this.networkService.getRequestProps({ resource });
132
+ const filter = params?.meta?.filter || {};
133
+ const queryKey = {};
134
+ if (filter?.params) {
135
+ for (const key in filter.params) {
136
+ queryKey[key] = filter.params[key];
137
+ }
138
+ }
139
+ const response = this.networkService.doRequest({
140
+ type: RequestTypes.GET_MANY,
141
+ method: RequestMethods.GET,
142
+ query: {
143
+ ...queryKey,
144
+ filter: {
145
+ ...omit(filter, 'params'),
146
+ where: { ...filter?.where, id: { inq: params.ids } },
147
+ },
148
+ },
149
+ paths: [resource],
150
+ ...request,
151
+ });
152
+ return response;
153
+ }
154
+ getManyReference(opts) {
155
+ const { resource, params } = opts;
156
+ const { pagination, sort, filter: filterGetMany, meta, target, id, ...rest } = params;
157
+ let filter = {};
158
+ if (filterGetMany?.where) {
159
+ filter = { ...filterGetMany, where: { ...filterGetMany.where } };
160
+ }
161
+ else {
162
+ filter['where'] = {
163
+ ...omit(filterGetMany, ['include', 'params', 'noLimit', 'fields']),
164
+ };
165
+ filter['include'] = filterGetMany?.include;
166
+ filter['fields'] = filterGetMany?.fields;
167
+ filter['params'] = filterGetMany?.params;
168
+ filter['noLimit'] = filterGetMany?.noLimit;
169
+ }
170
+ filter.where[target] = id;
171
+ if (sort?.field) {
172
+ filter['order'] = [`${sort.field} ${sort.order}`];
173
+ }
174
+ if (filter?.noLimit) {
175
+ filter['limit'] = undefined;
176
+ filter['skip'] = undefined;
177
+ filter['offset'] = undefined;
178
+ filter['noLimit'] = undefined;
179
+ }
180
+ else {
181
+ const { page = 0, perPage = 0 } = pagination;
182
+ if (perPage >= 0) {
183
+ filter['limit'] = perPage;
184
+ }
185
+ if (perPage > 0 && page >= 0) {
186
+ filter['skip'] = (page - 1) * perPage;
187
+ filter['offset'] = (page - 1) * perPage;
188
+ }
189
+ }
190
+ for (const key in rest) {
191
+ if (!params[key]) {
192
+ continue;
193
+ }
194
+ filter[key] = params[key];
195
+ }
196
+ const queryKey = {};
197
+ if (filter?.params) {
198
+ for (const key in filter.params) {
199
+ queryKey[key] = filter.params[key];
200
+ }
201
+ filter['params'] = undefined;
202
+ }
203
+ if (meta) {
204
+ for (const key in meta) {
205
+ queryKey[key] = meta[key];
206
+ }
207
+ }
208
+ const request = this.networkService.getRequestProps({ resource });
209
+ const requestProps = {
210
+ method: RequestMethods.GET,
211
+ ...request,
212
+ };
213
+ const response = this.getListHelper({
214
+ type: RequestTypes.GET_MANY_REFERENCE,
215
+ resource,
216
+ queryKey,
217
+ filter,
218
+ requestProps,
219
+ });
220
+ return response;
221
+ }
222
+ update(opts) {
223
+ const { resource, params } = opts;
224
+ const request = this.networkService.getRequestProps({
225
+ resource,
226
+ body: params.data,
227
+ });
228
+ const response = this.networkService.doRequest({
229
+ type: RequestTypes.UPDATE,
230
+ method: RequestMethods.PATCH,
231
+ paths: [resource, `${params.id}`],
232
+ ...request,
233
+ });
234
+ return response;
235
+ }
236
+ updateMany(opts) {
237
+ const { resource, params } = opts;
238
+ const { ids, data } = params;
239
+ if (!ids.length) {
240
+ throw getError({ message: '[updateMany] No IDs to execute update!' });
241
+ }
242
+ const request = this.networkService.getRequestProps({ resource, body: data });
243
+ const response = this.networkService.doRequest({
244
+ type: RequestTypes.UPDATE_MANY,
245
+ method: RequestMethods.PATCH,
246
+ paths: [resource],
247
+ query: { filter: { where: { id: { inq: ids } } } },
248
+ ...request,
249
+ });
250
+ return response;
251
+ }
252
+ create(opts) {
253
+ const { resource, params } = opts;
254
+ const request = this.networkService.getRequestProps({ resource, body: params.data });
255
+ const response = this.networkService.doRequest({
256
+ type: RequestTypes.CREATE,
257
+ method: RequestMethods.POST,
258
+ paths: [resource],
259
+ ...request,
260
+ });
261
+ return response;
262
+ }
263
+ delete(opts) {
264
+ const { resource, params } = opts;
265
+ const request = this.networkService.getRequestProps({ resource });
266
+ const response = this.networkService.doRequest({
267
+ type: RequestTypes.DELETE,
268
+ method: RequestMethods.DELETE,
269
+ paths: [resource, `${params.id}`],
270
+ ...request,
271
+ });
272
+ return response;
273
+ }
274
+ deleteMany(opts) {
275
+ const { resource, params } = opts;
276
+ const { ids } = params;
277
+ if (!ids.length) {
278
+ throw getError({ message: '[deleteMany] No IDs to execute delete!' });
279
+ }
280
+ const request = this.networkService.getRequestProps({ resource });
281
+ const rs = Promise.all(ids
282
+ .map(id => [resource, `${id}`])
283
+ .map(paths => {
284
+ return this.networkService.doRequest({
285
+ type: RequestTypes.DELETE_MANY,
286
+ method: RequestMethods.DELETE,
287
+ paths,
288
+ ...request,
289
+ });
290
+ })).then(responses => {
291
+ return {
292
+ data: responses.map(response => response.data),
293
+ };
294
+ });
295
+ return rs;
296
+ }
297
+ send(opts) {
298
+ const { resource, params } = opts;
299
+ if (!params?.method) {
300
+ throw getError({
301
+ message: '[send] Invalid http method to send request!',
302
+ });
303
+ }
304
+ const { method, query, ...rest } = params;
305
+ const request = this.networkService.getRequestProps({ ...rest, resource });
306
+ const response = this.networkService.doRequest({
307
+ type: RequestTypes.SEND,
308
+ method,
309
+ query,
310
+ paths: [resource],
311
+ ...request,
312
+ });
313
+ return response;
314
+ }
315
+ value() {
316
+ return {
317
+ getList: (resource, params) => {
318
+ return this.getList({ resource, params });
319
+ },
320
+ getOne: (resource, params) => {
321
+ return this.getOne({ resource, params });
322
+ },
323
+ getMany: (resource, params) => {
324
+ return this.getMany({ resource, params });
325
+ },
326
+ getManyReference: (resource, params) => {
327
+ return this.getManyReference({ resource, params });
328
+ },
329
+ create: (resource, params) => {
330
+ return this.create({ resource, params });
331
+ },
332
+ update: (resource, params) => {
333
+ return this.update({ resource, params });
334
+ },
335
+ updateMany: (resource, params) => {
336
+ return this.updateMany({ resource, params });
337
+ },
338
+ delete: (resource, params) => {
339
+ return this.delete({ resource, params });
340
+ },
341
+ deleteMany: (resource, params) => {
342
+ return this.deleteMany({ resource, params });
343
+ },
344
+ send: (opts) => {
345
+ return this.send(opts);
346
+ },
347
+ };
348
+ }
349
+ };
350
+ DefaultRestDataProvider = DefaultRestDataProvider_1 = __decorate([
351
+ __param(0, inject(CoreBindings.REST_DATA_PROVIDER_OPTIONS)),
352
+ __metadata("design:paramtypes", [Object])
353
+ ], DefaultRestDataProvider);
354
+ export { DefaultRestDataProvider };
355
+ //# sourceMappingURL=default-rest-data.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-rest-data.provider.js","sourceRoot":"","sources":["../../../src/base/providers/default-rest-data.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './base.provider';
2
+ export * from './default-auth.provider';
3
+ export * from './default-i18n.provider';
4
+ export * from './default-rest-data.provider';
5
+ export * from './count-rest-data.provider';
@@ -0,0 +1,6 @@
1
+ export * from './base.provider';
2
+ export * from './default-auth.provider';
3
+ export * from './default-i18n.provider';
4
+ export * from './default-rest-data.provider';
5
+ export * from './count-rest-data.provider';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Filter, Where } from '@loopback/filter';
2
+ import { EntityRelationType, ICrudService, IDataProvider, IdType } from '@/common';
3
+ import { Logger } from '@/helpers';
4
+ export interface ICrudServiceOptions {
5
+ basePath: string;
6
+ }
7
+ export declare class BaseCrudService<E extends {
8
+ id: IdType;
9
+ [extra: string | symbol]: any;
10
+ } = any> implements ICrudService<E> {
11
+ protected logger: Logger;
12
+ protected dataProvider: IDataProvider;
13
+ protected serviceOptions: ICrudServiceOptions;
14
+ constructor(opts: {
15
+ scope: string;
16
+ dataProvider: IDataProvider;
17
+ serviceOptions: ICrudServiceOptions;
18
+ });
19
+ find(filter: Filter<E>): Promise<(E & EntityRelationType)[]>;
20
+ findById(id: IdType, filter: Filter<E>): Promise<E & EntityRelationType>;
21
+ findOne(filter: Filter<E>): Promise<(E & EntityRelationType) | null>;
22
+ count(where: Where<E>): Promise<{
23
+ count: number;
24
+ }>;
25
+ create(data: Omit<E, 'id'>): Promise<E>;
26
+ updateAll(data: Partial<E>, where: Where<E>): Promise<{
27
+ count: number;
28
+ }>;
29
+ updateById(id: IdType, data: Partial<E>): Promise<E>;
30
+ replaceById(id: IdType, data: E): Promise<E>;
31
+ deleteById(id: IdType): Promise<{
32
+ id: IdType;
33
+ }>;
34
+ }
@@ -0,0 +1,157 @@
1
+ import { RequestMethods, } from '@/common';
2
+ import { Logger } from '@/helpers';
3
+ export class BaseCrudService {
4
+ logger;
5
+ dataProvider;
6
+ serviceOptions;
7
+ constructor(opts) {
8
+ this.logger = Logger.getInstance({ scope: opts.scope });
9
+ this.dataProvider = opts.dataProvider;
10
+ this.serviceOptions = opts.serviceOptions;
11
+ }
12
+ find(filter) {
13
+ return new Promise((resolve, reject) => {
14
+ this.dataProvider
15
+ .send({
16
+ resource: [this.serviceOptions.basePath].join('/'),
17
+ params: {
18
+ method: RequestMethods.GET,
19
+ query: { filter },
20
+ },
21
+ })
22
+ .then(rs => {
23
+ resolve(rs.data);
24
+ })
25
+ .catch(reject);
26
+ });
27
+ }
28
+ findById(id, filter) {
29
+ return new Promise((resolve, reject) => {
30
+ this.dataProvider
31
+ .send({
32
+ resource: [this.serviceOptions.basePath, id].join('/'),
33
+ params: {
34
+ method: RequestMethods.GET,
35
+ query: { filter },
36
+ },
37
+ })
38
+ .then(rs => {
39
+ resolve(rs?.data);
40
+ })
41
+ .catch(reject);
42
+ });
43
+ }
44
+ findOne(filter) {
45
+ return new Promise((resolve, reject) => {
46
+ this.dataProvider
47
+ .send({
48
+ resource: [this.serviceOptions.basePath, 'find-one'].join('/'),
49
+ params: {
50
+ method: RequestMethods.GET,
51
+ query: { filter },
52
+ },
53
+ })
54
+ .then(rs => {
55
+ resolve(rs?.data);
56
+ })
57
+ .catch(reject);
58
+ });
59
+ }
60
+ count(where) {
61
+ return new Promise((resolve, reject) => {
62
+ this.dataProvider
63
+ .send({
64
+ resource: [this.serviceOptions.basePath, 'count'].join('/'),
65
+ params: {
66
+ method: RequestMethods.GET,
67
+ query: { where },
68
+ },
69
+ })
70
+ .then(rs => {
71
+ resolve(rs?.data);
72
+ })
73
+ .catch(reject);
74
+ });
75
+ }
76
+ create(data) {
77
+ return new Promise((resolve, reject) => {
78
+ this.dataProvider
79
+ .send({
80
+ resource: [this.serviceOptions.basePath].join('/'),
81
+ params: {
82
+ method: RequestMethods.POST,
83
+ body: data,
84
+ },
85
+ })
86
+ .then(rs => {
87
+ resolve(rs?.data);
88
+ })
89
+ .catch(reject);
90
+ });
91
+ }
92
+ updateAll(data, where) {
93
+ return new Promise((resolve, reject) => {
94
+ this.dataProvider
95
+ .send({
96
+ resource: [this.serviceOptions.basePath].join('/'),
97
+ params: {
98
+ method: RequestMethods.PATCH,
99
+ query: { where },
100
+ body: data,
101
+ },
102
+ })
103
+ .then(rs => {
104
+ resolve(rs?.data);
105
+ })
106
+ .catch(reject);
107
+ });
108
+ }
109
+ updateById(id, data) {
110
+ return new Promise((resolve, reject) => {
111
+ this.dataProvider
112
+ .send({
113
+ resource: [this.serviceOptions.basePath, id].join('/'),
114
+ params: {
115
+ method: RequestMethods.PATCH,
116
+ body: data,
117
+ },
118
+ })
119
+ .then(rs => {
120
+ resolve(rs?.data);
121
+ })
122
+ .catch(reject);
123
+ });
124
+ }
125
+ replaceById(id, data) {
126
+ return new Promise((resolve, reject) => {
127
+ this.dataProvider
128
+ .send({
129
+ resource: [this.serviceOptions.basePath, id].join('/'),
130
+ params: {
131
+ method: RequestMethods.PUT,
132
+ body: data,
133
+ },
134
+ })
135
+ .then(rs => {
136
+ resolve(rs?.data);
137
+ })
138
+ .catch(reject);
139
+ });
140
+ }
141
+ deleteById(id) {
142
+ return new Promise((resolve, reject) => {
143
+ this.dataProvider
144
+ .send({
145
+ resource: [this.serviceOptions.basePath, id].join('/'),
146
+ params: {
147
+ method: RequestMethods.DELETE,
148
+ },
149
+ })
150
+ .then(rs => {
151
+ resolve(rs?.data);
152
+ })
153
+ .catch(reject);
154
+ });
155
+ }
156
+ }
157
+ //# sourceMappingURL=base-crud.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-crud.service.js","sourceRoot":"","sources":["../../../src/base/services/base-crud.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { NetworkHelper } from '@/helpers';
2
+ export declare abstract class BaseNetworkRequestService {
3
+ protected baseUrl: string;
4
+ protected networkService: NetworkHelper;
5
+ constructor(opts: {
6
+ name: string;
7
+ scope: string;
8
+ baseUrl?: string;
9
+ });
10
+ getRequestPath(opts: {
11
+ paths: Array<string>;
12
+ }): string;
13
+ getRequestUrl(opts: {
14
+ baseUrl?: string;
15
+ paths: Array<string>;
16
+ }): string;
17
+ getNetworkService(): NetworkHelper;
18
+ }
@@ -0,0 +1,43 @@
1
+ import isEmpty from 'lodash/isEmpty';
2
+ import { NetworkHelper } from '@/helpers';
3
+ import { getError } from '@/utilities';
4
+ export class BaseNetworkRequestService {
5
+ baseUrl;
6
+ networkService;
7
+ constructor(opts) {
8
+ const { name, baseUrl } = opts;
9
+ this.baseUrl = baseUrl ?? '';
10
+ this.networkService = new NetworkHelper({ name });
11
+ }
12
+ getRequestPath(opts) {
13
+ const paths = opts?.paths ?? [];
14
+ const joined = paths
15
+ .map((path) => {
16
+ if (!path.startsWith('/')) {
17
+ path = `/${path}`;
18
+ }
19
+ return path;
20
+ })
21
+ .join('');
22
+ return joined;
23
+ }
24
+ getRequestUrl(opts) {
25
+ let baseUrl = opts?.baseUrl ?? this.baseUrl ?? '';
26
+ const paths = opts?.paths ?? [];
27
+ if (!baseUrl || isEmpty(baseUrl)) {
28
+ throw getError({
29
+ statusCode: 500,
30
+ message: '[getRequestUrl] Invalid configuration for third party request base url!',
31
+ });
32
+ }
33
+ if (baseUrl.endsWith('/')) {
34
+ baseUrl = baseUrl.slice(0, -1);
35
+ }
36
+ const joined = this.getRequestPath({ paths });
37
+ return `${baseUrl ?? this.baseUrl}${joined}`;
38
+ }
39
+ getNetworkService() {
40
+ return this.networkService;
41
+ }
42
+ }
43
+ //# sourceMappingURL=base-network-request.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-network-request.service.js","sourceRoot":"","sources":["../../../src/base/services/base-network-request.service.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,OAAgB,yBAAyB;IACnC,OAAO,CAAS;IAChB,cAAc,CAAgB;IAExC,YAAY,IAAuD;QACjE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAE/B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,cAAc,CAAC,IAA8B;QAC3C,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAEhC,MAAM,MAAM,GAAG,KAAK;aACjB,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACpB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,IAAgD;QAC5D,IAAI,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAEhC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,QAAQ,CAAC;gBACb,UAAU,EAAE,GAAG;gBACf,OAAO,EACL,yEAAyE;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;IAC/C,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF"}