@solidstarters/solid-core 1.2.124 → 1.2.125
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.
- package/dist/dtos/create-field-metadata.dto.d.ts +14 -0
- package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-field-metadata.dto.js +15 -2
- package/dist/dtos/create-field-metadata.dto.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts +2 -0
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +5 -1
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +15 -3
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +14 -5
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/interfaces.d.ts +11 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/computed-field-evaluation-publisher.service.d.ts +12 -0
- package/dist/jobs/database/computed-field-evaluation-publisher.service.d.ts.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-publisher.service.js +39 -0
- package/dist/jobs/database/computed-field-evaluation-publisher.service.js.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options.d.ts +8 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options.d.ts.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options.js +10 -0
- package/dist/jobs/database/computed-field-evaluation-queue-options.js.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-subscriber.service.d.ts +16 -0
- package/dist/jobs/database/computed-field-evaluation-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/database/computed-field-evaluation-subscriber.service.js +48 -0
- package/dist/jobs/database/computed-field-evaluation-subscriber.service.js.map +1 -0
- package/dist/repository/field-metadata.repository.d.ts +8 -0
- package/dist/repository/field-metadata.repository.d.ts.map +1 -0
- package/dist/repository/field-metadata.repository.js +38 -0
- package/dist/repository/field-metadata.repository.js.map +1 -0
- package/dist/repository/field.repository.d.ts +1 -1
- package/dist/repository/field.repository.d.ts.map +1 -1
- package/dist/repository/field.repository.js +6 -6
- package/dist/repository/field.repository.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +14 -1
- package/dist/seeders/system-fields-seeder.service.d.ts +3 -3
- package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
- package/dist/seeders/system-fields-seeder.service.js +5 -6
- package/dist/seeders/system-fields-seeder.service.js.map +1 -1
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts +14 -0
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts.map +1 -0
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js +45 -0
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js.map +1 -0
- package/dist/services/crud.service.d.ts +1 -0
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +9 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts +6 -2
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +21 -4
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/view-metadata.service.js +1 -2
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +64 -54
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +23 -0
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -0
- package/dist/subscribers/computed-entity-field.subscriber.js +95 -0
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/# computed field pending issues.md +3 -0
- package/src/dtos/create-field-metadata.dto.ts +18 -0
- package/src/entities/field-metadata.entity.ts +4 -0
- package/src/helpers/solid-registry.ts +46 -13
- package/src/interfaces.ts +18 -0
- package/src/jobs/database/computed-field-evaluation-publisher.service.ts +23 -0
- package/src/jobs/database/computed-field-evaluation-queue-options.ts +9 -0
- package/src/jobs/database/computed-field-evaluation-subscriber.service.ts +36 -0
- package/src/repository/field-metadata.repository.ts +26 -0
- package/src/repository/field.repository.ts +5 -2
- package/src/seeders/seed-data/solid-core-metadata.json +14 -1
- package/src/seeders/system-fields-seeder.service.ts +3 -4
- package/src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts +52 -0
- package/src/services/crud.service.ts +9 -1
- package/src/services/field-metadata.service.ts +38 -8
- package/src/services/view-metadata.service.ts +2 -2
- package/src/solid-core.module.ts +64 -54
- package/src/subscribers/computed-entity-field.subscriber.ts +108 -0
package/src/solid-core.module.ts
CHANGED
|
@@ -83,14 +83,14 @@ import { SolidRegistry } from './helpers/solid-registry';
|
|
|
83
83
|
import { LoggingInterceptor } from './interceptors/logging.interceptor';
|
|
84
84
|
import { ApiEmailQueuePublisher } from './jobs/api-email-publisher.service';
|
|
85
85
|
import { ApiEmailQueueSubscriber } from './jobs/api-email-subscriber.service';
|
|
86
|
+
import { TestQueueDbPublisher } from './jobs/database/queue-test-db-publisher.service';
|
|
87
|
+
import { TestQueueDbSubscriber } from './jobs/database/queue-test-db-subscriber.service';
|
|
86
88
|
import { EmailQueuePublisher } from './jobs/email-publisher.service';
|
|
87
89
|
import { EmailQueueSubscriber } from './jobs/email-subscriber.service';
|
|
88
90
|
import { OTPQueuePublisher } from './jobs/otp-publisher.service';
|
|
89
91
|
import { OTPQueueSubscriber } from './jobs/otp-subscriber.service';
|
|
90
92
|
import { TestQueuePublisher } from './jobs/queue-test-publisher.service';
|
|
91
|
-
import { TestQueueDbPublisher } from './jobs/database/queue-test-db-publisher.service';
|
|
92
93
|
import { TestQueueSubscriber } from './jobs/queue-test-subscriber.service';
|
|
93
|
-
import { TestQueueDbSubscriber } from './jobs/database/queue-test-db-subscriber.service';
|
|
94
94
|
import { SmsQueuePublisher } from './jobs/sms-publisher.service';
|
|
95
95
|
import { SmsQueueSubscriber } from './jobs/sms-subscriber.service';
|
|
96
96
|
import { WhatsappQueuePublisher } from './jobs/whatsapp-publisher.service';
|
|
@@ -127,70 +127,75 @@ import { PermissionMetadataController } from './controllers/permission-metadata.
|
|
|
127
127
|
import { PermissionMetadata } from './entities/permission-metadata.entity';
|
|
128
128
|
import { PermissionMetadataService } from './services/permission-metadata.service';
|
|
129
129
|
|
|
130
|
+
import { ClsModule } from 'nestjs-cls';
|
|
131
|
+
import { ChatterMessageDetailsController } from './controllers/chatter-message-details.controller';
|
|
132
|
+
import { ChatterMessageController } from './controllers/chatter-message.controller';
|
|
133
|
+
import { ExportTemplateController } from './controllers/export-template.controller';
|
|
134
|
+
import { ExportTransactionController } from './controllers/export-transaction.controller';
|
|
135
|
+
import { ImportTransactionErrorLogController } from './controllers/import-transaction-error-log.controller';
|
|
136
|
+
import { ImportTransactionController } from './controllers/import-transaction.controller';
|
|
137
|
+
import { ListOfValuesController } from './controllers/list-of-values.controller';
|
|
138
|
+
import { LocaleController } from './controllers/locale.controller';
|
|
130
139
|
import { RoleMetadataController } from './controllers/role-metadata.controller';
|
|
140
|
+
import { SavedFiltersController } from './controllers/saved-filters.controller';
|
|
141
|
+
import { SecurityRuleController } from './controllers/security-rule.controller';
|
|
142
|
+
import { SettingController } from './controllers/setting.controller';
|
|
143
|
+
import { UserActivityHistoryController } from './controllers/user-activity-history.controller';
|
|
144
|
+
import { UserViewMetadataController } from './controllers/user-view-metadata.controller';
|
|
131
145
|
import { UserController } from './controllers/user.controller';
|
|
146
|
+
import { ChatterMessageDetails } from './entities/chatter-message-details.entity';
|
|
147
|
+
import { ChatterMessage } from './entities/chatter-message.entity';
|
|
148
|
+
import { ExportTemplate } from './entities/export-template.entity';
|
|
149
|
+
import { ExportTransaction } from './entities/export-transaction.entity';
|
|
150
|
+
import { ImportTransactionErrorLog } from './entities/import-transaction-error-log.entity';
|
|
151
|
+
import { ImportTransaction } from './entities/import-transaction.entity';
|
|
152
|
+
import { Locale } from './entities/locale.entity';
|
|
132
153
|
import { RoleMetadata } from './entities/role-metadata.entity';
|
|
133
|
-
import {
|
|
134
|
-
import {
|
|
135
|
-
import { RoleMetadataService } from './services/role-metadata.service';
|
|
136
|
-
import { UserService } from './services/user.service';
|
|
154
|
+
import { SavedFilters } from './entities/saved-filters.entity';
|
|
155
|
+
import { SecurityRule } from './entities/security-rule.entity';
|
|
137
156
|
import { Setting } from './entities/setting.entity';
|
|
138
|
-
import {
|
|
139
|
-
import {
|
|
157
|
+
import { UserActivityHistory } from './entities/user-activity-history.entity';
|
|
158
|
+
import { UserViewMetadata } from './entities/user-view-metadata.entity';
|
|
159
|
+
import { User } from './entities/user.entity';
|
|
160
|
+
import { ModelMetadataHelperService } from './helpers/model-metadata-helper.service';
|
|
140
161
|
import { ModuleMetadataHelperService } from './helpers/module-metadata-helper.service';
|
|
141
|
-
import {
|
|
142
|
-
import {
|
|
143
|
-
import {
|
|
162
|
+
import { ComputedFieldEvaluationPublisher } from './jobs/database/computed-field-evaluation-publisher.service';
|
|
163
|
+
import { ComputedFieldEvaluationSubscriber } from './jobs/database/computed-field-evaluation-subscriber.service';
|
|
164
|
+
import { GenerateCodePublisher } from './jobs/database/generate-code-publisher.service';
|
|
165
|
+
import { GenerateCodeSubscriber } from './jobs/database/generate-code-subscriber.service';
|
|
166
|
+
import { FieldMetadataRepository } from './repository/field-metadata.repository';
|
|
167
|
+
import { FieldRepository } from './repository/field.repository';
|
|
144
168
|
import { MediaRepository } from './repository/media.repository';
|
|
145
|
-
import { ViewMetadataSubsciber } from './subscribers/view-metadata.subscriber';
|
|
146
|
-
import { SavedFilters } from './entities/saved-filters.entity';
|
|
147
|
-
import { SavedFiltersService } from './services/saved-filters.service';
|
|
148
|
-
import { SavedFiltersController } from './controllers/saved-filters.controller';
|
|
149
|
-
import { UserViewMetadata } from './entities/user-view-metadata.entity';
|
|
150
|
-
import { UserViewMetadataService } from './services/user-view-metadata.service';
|
|
151
|
-
import { UserViewMetadataController } from './controllers/user-view-metadata.controller';
|
|
152
|
-
import { SecurityRule } from './entities/security-rule.entity';
|
|
153
|
-
import { SecurityRuleService } from './services/security-rule.service';
|
|
154
|
-
import { SecurityRuleController } from './controllers/security-rule.controller';
|
|
155
|
-
import { RequestContextService } from './services/request-context.service';
|
|
156
169
|
import { SecurityRuleRepository } from './repository/security-rule.repository';
|
|
157
|
-
import {
|
|
158
|
-
import {
|
|
159
|
-
import { ChatterMessage } from './entities/chatter-message.entity';
|
|
160
|
-
import { ChatterMessageService } from './services/chatter-message.service';
|
|
161
|
-
import { ChatterMessageController } from './controllers/chatter-message.controller';
|
|
162
|
-
import { ChatterMessageDetails } from './entities/chatter-message-details.entity';
|
|
170
|
+
import { PermissionMetadataSeederService } from './seeders/permission-metadata-seeder.service';
|
|
171
|
+
import { SystemFieldsSeederService } from './seeders/system-fields-seeder.service';
|
|
163
172
|
import { ChatterMessageDetailsService } from './services/chatter-message-details.service';
|
|
164
|
-
import {
|
|
165
|
-
import {
|
|
166
|
-
import {
|
|
167
|
-
import {
|
|
168
|
-
import {
|
|
169
|
-
import { ExportTemplate } from './entities/export-template.entity';
|
|
173
|
+
import { ChatterMessageService } from './services/chatter-message.service';
|
|
174
|
+
import { ConcatComputedFieldProvider } from './services/computed-fields/concat-computed-field-provider.service';
|
|
175
|
+
import { ConcatEntityComputedFieldProvider } from './services/computed-fields/entity/concat-entity-computed-field-provider.service';
|
|
176
|
+
import { CsvService } from './services/csv.service';
|
|
177
|
+
import { ExcelService } from './services/excel.service';
|
|
170
178
|
import { ExportTemplateService } from './services/export-template.service';
|
|
171
|
-
import { ExportTemplateController } from './controllers/export-template.controller';
|
|
172
|
-
import { ExportTransaction } from './entities/export-transaction.entity';
|
|
173
179
|
import { ExportTransactionService } from './services/export-transaction.service';
|
|
174
|
-
import { ExportTransactionController } from './controllers/export-transaction.controller';
|
|
175
|
-
import { ExcelService } from './services/excel.service';
|
|
176
|
-
import { CsvService } from './services/csv.service';
|
|
177
|
-
import { ClsModule } from 'nestjs-cls';
|
|
178
|
-
import { FieldRepository } from './repository/field.repository';
|
|
179
|
-
import { ImportTransaction } from './entities/import-transaction.entity';
|
|
180
|
-
import { ImportTransactionService } from './services/import-transaction.service';
|
|
181
|
-
import { ImportTransactionController } from './controllers/import-transaction.controller';
|
|
182
|
-
import { ImportTransactionErrorLog } from './entities/import-transaction-error-log.entity';
|
|
183
180
|
import { ImportTransactionErrorLogService } from './services/import-transaction-error-log.service';
|
|
184
|
-
import {
|
|
181
|
+
import { ImportTransactionService } from './services/import-transaction.service';
|
|
182
|
+
import { LocaleService } from './services/locale.service';
|
|
183
|
+
import { FileS3StorageProvider } from './services/mediaStorageProviders/file-s3-storage-provider';
|
|
184
|
+
import { FileStorageProvider } from './services/mediaStorageProviders/file-storage-provider';
|
|
185
|
+
import { RequestContextService } from './services/request-context.service';
|
|
186
|
+
import { RoleMetadataService } from './services/role-metadata.service';
|
|
187
|
+
import { SavedFiltersService } from './services/saved-filters.service';
|
|
188
|
+
import { SecurityRuleService } from './services/security-rule.service';
|
|
185
189
|
import { LocaleListSelectionProvider } from './services/selection-providers/locale-list-selection-provider.service';
|
|
186
|
-
import {
|
|
187
|
-
import { SystemFieldsSeederService } from './seeders/system-fields-seeder.service';
|
|
188
|
-
import { ModelMetadataHelperService } from './helpers/model-metadata-helper.service';
|
|
189
|
-
import { GenerateCodePublisher } from './jobs/database/generate-code-publisher.service';
|
|
190
|
-
import { GenerateCodeSubscriber } from './jobs/database/generate-code-subscriber.service';
|
|
191
|
-
import { UserActivityHistory } from './entities/user-activity-history.entity';
|
|
190
|
+
import { SettingService } from './services/setting.service';
|
|
192
191
|
import { UserActivityHistoryService } from './services/user-activity-history.service';
|
|
193
|
-
import {
|
|
192
|
+
import { UserViewMetadataService } from './services/user-view-metadata.service';
|
|
193
|
+
import { UserService } from './services/user.service';
|
|
194
|
+
import { AuditSubscriber } from './subscribers/audit.subscriber';
|
|
195
|
+
import { ComputedEntityFieldSubscriber } from './subscribers/computed-entity-field.subscriber';
|
|
196
|
+
import { CreatedByUpdatedBySubscriber } from './subscribers/created-by-updated-by.subscriber';
|
|
197
|
+
import { SecurityRuleSubscriber } from './subscribers/security-rule.subscriber';
|
|
198
|
+
import { ViewMetadataSubsciber } from './subscribers/view-metadata.subscriber';
|
|
194
199
|
|
|
195
200
|
|
|
196
201
|
@Global()
|
|
@@ -405,6 +410,11 @@ import { UserActivityHistoryController } from './controllers/user-activity-histo
|
|
|
405
410
|
ImportTransactionErrorLogService,
|
|
406
411
|
CreatedByUpdatedBySubscriber,
|
|
407
412
|
SystemFieldsSeederService,
|
|
413
|
+
FieldMetadataRepository,
|
|
414
|
+
ComputedEntityFieldSubscriber,
|
|
415
|
+
ComputedFieldEvaluationPublisher,
|
|
416
|
+
ComputedFieldEvaluationSubscriber,
|
|
417
|
+
ConcatEntityComputedFieldProvider,
|
|
408
418
|
UserActivityHistoryService,
|
|
409
419
|
|
|
410
420
|
],
|
|
@@ -437,7 +447,7 @@ import { UserActivityHistoryController } from './controllers/user-activity-histo
|
|
|
437
447
|
RequestContextService,
|
|
438
448
|
SecurityRuleRepository,
|
|
439
449
|
FieldRepository,
|
|
440
|
-
UserActivityHistoryService
|
|
450
|
+
UserActivityHistoryService,
|
|
441
451
|
],
|
|
442
452
|
})
|
|
443
453
|
export class SolidCoreModule { }
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { camelize } from "@angular-devkit/core/src/utils/strings";
|
|
2
|
+
import { Injectable } from "@nestjs/common";
|
|
3
|
+
import { InjectDataSource } from "@nestjs/typeorm";
|
|
4
|
+
import { ComputedFieldTriggerOperation } from "src/dtos/create-field-metadata.dto";
|
|
5
|
+
import { ComputedFieldMetadata, SolidRegistry } from "src/helpers/solid-registry";
|
|
6
|
+
import { IEntityPreComputeFieldProvider } from "src/interfaces";
|
|
7
|
+
import { ComputedFieldEvaluationPublisher } from "src/jobs/database/computed-field-evaluation-publisher.service";
|
|
8
|
+
import { DataSource, EntitySubscriberInterface, EventSubscriber, InsertEvent, UpdateEvent } from "typeorm";
|
|
9
|
+
|
|
10
|
+
// Create an interface i.e ComputedFieldEvaluationPayload which has same fields as the ComputedFieldMetadata and an additional field for the database entity
|
|
11
|
+
export interface ComputedFieldEvaluationPayload extends ComputedFieldMetadata {
|
|
12
|
+
databaseEntity: any;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@Injectable()
|
|
16
|
+
@EventSubscriber()
|
|
17
|
+
export class ComputedEntityFieldSubscriber implements EntitySubscriberInterface {
|
|
18
|
+
constructor(
|
|
19
|
+
@InjectDataSource()
|
|
20
|
+
private readonly dataSource: DataSource,
|
|
21
|
+
private readonly solidRegistry: SolidRegistry,
|
|
22
|
+
private readonly computedFieldPublisher: ComputedFieldEvaluationPublisher,
|
|
23
|
+
) {
|
|
24
|
+
this.dataSource.subscribers.push(this);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async beforeInsert(event: InsertEvent<any>): Promise<any> {
|
|
28
|
+
await this.handleComputedFieldEvaluation(event.entity, ComputedFieldTriggerOperation.beforeInsert);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async beforeUpdate(event: UpdateEvent<any>): Promise<any>{
|
|
32
|
+
await this.handleComputedFieldEvaluation(event.databaseEntity, ComputedFieldTriggerOperation.beforeUpdate);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async afterInsert(event: InsertEvent<any>) {
|
|
36
|
+
await this.handleComputedFieldEvaluationJob(event.entity, ComputedFieldTriggerOperation.afterInsert);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async afterUpdate(event: UpdateEvent<any>) {
|
|
40
|
+
await this.handleComputedFieldEvaluationJob(event.databaseEntity, ComputedFieldTriggerOperation.afterUpdate);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async afterRemove(event: any) {
|
|
44
|
+
await this.handleComputedFieldEvaluationJob(event.databaseEntity, ComputedFieldTriggerOperation.afterRemove);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//FIXME: Need to add support for beforeRemmove, beforeSoftRemove, afterSoftRemove, beforeRecover, afterRecover
|
|
48
|
+
|
|
49
|
+
private async handleComputedFieldEvaluation(entity: any, currentOperation: ComputedFieldTriggerOperation): Promise<void> {
|
|
50
|
+
if (!entity) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const currentModelName = camelize(entity.constructor.name); // Resolve the model name from the entity class name
|
|
54
|
+
const computedFieldsTobeEvaluated = this.getComputedFieldsToBeEvaluated(
|
|
55
|
+
this.solidRegistry.getComputedFieldMetadata(),
|
|
56
|
+
currentOperation,
|
|
57
|
+
currentModelName
|
|
58
|
+
);
|
|
59
|
+
for (const computedFieldMetadata of computedFieldsTobeEvaluated) {
|
|
60
|
+
const computedValue = await this.getComputedValue(computedFieldMetadata, entity); //FIXME: There should some way to check/assert if the provider actually has a postComputeAndSaveValue
|
|
61
|
+
entity[computedFieldMetadata.fieldName] = computedValue; // Set the computed value on the entity
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private async handleComputedFieldEvaluationJob(entity: any, currentOperation: ComputedFieldTriggerOperation): Promise<void> {
|
|
66
|
+
if (!entity) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const currentModelName = camelize(entity.constructor.name); //Resolve the model name from the entity class name
|
|
70
|
+
const computedFieldsTobeEvaluated = this.getComputedFieldsToBeEvaluated(
|
|
71
|
+
this.solidRegistry.getComputedFieldMetadata(),
|
|
72
|
+
currentOperation,
|
|
73
|
+
currentModelName
|
|
74
|
+
);
|
|
75
|
+
for (const computedField of computedFieldsTobeEvaluated) {
|
|
76
|
+
this.enqueueComputedFieldEvaluationJob(computedField, entity);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private async getComputedValue(computedFieldMetadata: ComputedFieldMetadata<any>, entity: any) {
|
|
81
|
+
const provider = this.solidRegistry.getComputedFieldProvider(computedFieldMetadata.computedFieldValueProviderName);
|
|
82
|
+
// Get the instance of the provider and assert it is of type IEntityComputedFieldProvider
|
|
83
|
+
const providerInstance = provider.instance as IEntityPreComputeFieldProvider<any, any, any>; // IEntityComputedFieldProvider
|
|
84
|
+
const computedValue = await providerInstance.preComputeValue(entity, computedFieldMetadata); //FIXME There should some way to check/assert if the provider actually has a postComputeAndSaveValue
|
|
85
|
+
return computedValue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private enqueueComputedFieldEvaluationJob(computedField: ComputedFieldMetadata<any>, databaseEntity: any) {
|
|
89
|
+
const payload = {
|
|
90
|
+
...computedField,
|
|
91
|
+
databaseEntity,
|
|
92
|
+
};
|
|
93
|
+
this.computedFieldPublisher.publish({
|
|
94
|
+
payload
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Based on the current model name and current operation, identify all the computed providers that need to be evaluated
|
|
99
|
+
// Pass the database entity and the context to the provider of type IEntityComputedFieldProvider
|
|
100
|
+
private getComputedFieldsToBeEvaluated(computedFieldMetadata: ComputedFieldMetadata[], currentOperation: ComputedFieldTriggerOperation, currentModelName: string) {
|
|
101
|
+
return computedFieldMetadata.filter(
|
|
102
|
+
(computedField) => computedField.computedFieldTriggerConfig.some(
|
|
103
|
+
(trigger) => trigger.operations.includes(currentOperation) &&
|
|
104
|
+
trigger.modelName === currentModelName
|
|
105
|
+
)
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
}
|