@punks/backend-entity-manager 0.0.245 → 0.0.247

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/cjs/index.js CHANGED
@@ -2111,15 +2111,33 @@ var ConnectorMode;
2111
2111
  class EntityConnectorsManager {
2112
2112
  constructor(services) {
2113
2113
  this.services = services;
2114
+ this.logger = backendCore.Log.getLogger(`[${services.getEntityName()}]: ${EntityConnectorsManager.name}`);
2114
2115
  }
2115
2116
  async syncEntity(entity) {
2116
2117
  for (const connector of this.getEnabledConnectors()) {
2118
+ this.logger.debug(`Entity sync started - connector: ${connector.name}`, {
2119
+ entity,
2120
+ });
2117
2121
  switch (connector.options.mode) {
2118
2122
  case ConnectorMode.Sync:
2119
2123
  await this.processSync(connector, entity);
2124
+ this.logger.debug(`Entity sync completed - connector: ${connector.name}`, {
2125
+ connector: connector.name,
2126
+ entity,
2127
+ });
2120
2128
  break;
2121
2129
  case ConnectorMode.Async:
2122
- this.processSync(connector, entity).catch((error) => { });
2130
+ this.processSync(connector, entity)
2131
+ .then(() => this.logger.debug(`Entity sync completed - connector: ${connector.name}`, {
2132
+ connector: connector.name,
2133
+ entity,
2134
+ }))
2135
+ .catch((error) => {
2136
+ this.logger.exception(`Entity sync error - connector: ${connector.name}`, error, {
2137
+ connector: connector.name,
2138
+ entity,
2139
+ });
2140
+ });
2123
2141
  break;
2124
2142
  default:
2125
2143
  throw new Error("Invalid connector mode found");
@@ -2134,12 +2152,28 @@ class EntityConnectorsManager {
2134
2152
  }
2135
2153
  async deleteEntity(entityId) {
2136
2154
  for (const connector of this.getEnabledConnectors()) {
2155
+ this.logger.debug(`Entity sync delete started - connector: ${connector.name}`, {
2156
+ entityId,
2157
+ });
2137
2158
  switch (connector.options.mode) {
2138
2159
  case ConnectorMode.Sync:
2139
2160
  await this.processDelete(connector, entityId);
2161
+ this.logger.debug(`Entity sync delete completed - connector: ${connector.name}`, {
2162
+ entityId,
2163
+ });
2140
2164
  break;
2141
2165
  case ConnectorMode.Async:
2142
- this.processDelete(connector, entityId);
2166
+ this.processDelete(connector, entityId)
2167
+ .then(() => this.logger.debug(`Entity sync delete completed - connector: ${connector.name}`, {
2168
+ connector: connector.name,
2169
+ entityId,
2170
+ }))
2171
+ .catch((error) => {
2172
+ this.logger.exception(`Entity sync delete error - connector: ${connector.name}`, error, {
2173
+ connector: connector.name,
2174
+ entityId,
2175
+ });
2176
+ });
2143
2177
  break;
2144
2178
  default:
2145
2179
  throw new Error("Invalid connector mode");
@@ -2171,15 +2205,15 @@ class EntityEventsManager {
2171
2205
  this.logger = backendCore.Log.getLogger("EntityEventsManager");
2172
2206
  }
2173
2207
  async processEntityCreatedEvent(entity) {
2174
- this.services.resolveReplicaSyncManager().syncReplicas(entity);
2175
- this.services.resolveConnectorSyncManager().syncEntity(entity);
2208
+ await this.services.resolveReplicaSyncManager().syncReplicas(entity);
2209
+ await this.services.resolveConnectorSyncManager().syncEntity(entity);
2176
2210
  await this.emitEntityEvent("created", {
2177
2211
  entity,
2178
2212
  });
2179
2213
  }
2180
2214
  async processEntityUpdatedEvent(entity) {
2181
- this.services.resolveReplicaSyncManager().syncReplicas(entity);
2182
- this.services.resolveConnectorSyncManager().syncEntity(entity);
2215
+ await this.services.resolveReplicaSyncManager().syncReplicas(entity);
2216
+ await this.services.resolveConnectorSyncManager().syncEntity(entity);
2183
2217
  await this.emitEntityEvent("updated", {
2184
2218
  entity,
2185
2219
  });
@@ -3479,6 +3513,7 @@ const EntityManagerSymbols = {
3479
3513
  EntityAuthMiddleware: Symbol.for("WP:ENTITY_AUTH_MIDDLEWARE"),
3480
3514
  EntityRepository: Symbol.for("WP:ENTITY_REPOSITORY"),
3481
3515
  EntityConnector: Symbol.for("WP:ENTITY_CONNECTOR"),
3516
+ EntityConnectorMapper: Symbol.for("WP:ENTITY_CONNECTOR_MAPPER"),
3482
3517
  EntityConverter: Symbol.for("WP:ENTITY_CONVERTER"),
3483
3518
  EntitySerializer: Symbol.for("WP:ENTITY_SERIALIZER"),
3484
3519
  EntitySnapshotService: Symbol.for("WP:ENTITY_SNAPSHOT_SERVICE"),
@@ -3528,7 +3563,12 @@ const WpEntityAdapter = (entityName, props = {}) => common.applyDecorators(commo
3528
3563
  ...props,
3529
3564
  }));
3530
3565
 
3531
- const WpEntityConnector = (entityName, props = {}) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EntityConnector, {
3566
+ const WpEntityConnector = (entityName, props) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EntityConnector, {
3567
+ entityName,
3568
+ ...props,
3569
+ }));
3570
+
3571
+ const WpEntityConnectorMapper = (entityName, props) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EntityConnectorMapper, {
3532
3572
  entityName,
3533
3573
  ...props,
3534
3574
  }));
@@ -3951,7 +3991,7 @@ exports.EntityManagerRegistry = class EntityManagerRegistry {
3951
3991
  .registerEventEmitter(eventEmitter);
3952
3992
  }
3953
3993
  }
3954
- async registerDiscoveredEntity(app, { adapter, entityName, entity, converter, queryBuilder, repository, authMiddleware, serializer, snapshotService, settings, }) {
3994
+ async registerDiscoveredEntity(app, { adapter, entityName, entity, converter, queryBuilder, repository, authMiddleware, serializer, snapshotService, connectors, connectorMappers, settings, }) {
3955
3995
  if (!repository.discoveredClass.injectType) {
3956
3996
  throw new Error(`No inject type found for entity repository: ${entityName}`);
3957
3997
  }
@@ -3995,7 +4035,31 @@ exports.EntityManagerRegistry = class EntityManagerRegistry {
3995
4035
  middleware: authMiddlewareInstance,
3996
4036
  });
3997
4037
  }
3998
- // todo: configure mappers and replica
4038
+ const mappers = backendCore.toDict(connectorMappers ?? [], (x) => x.meta.connectorName);
4039
+ for (const connector of connectors ?? []) {
4040
+ if (!connector.discoveredClass.injectType) {
4041
+ throw new Error(`No inject type found for entity connector: ${entityName}`);
4042
+ }
4043
+ const mapper = mappers[connector.meta.connectorName];
4044
+ if (!mapper) {
4045
+ throw new Error(`No connector mapper found for entity connector: entityName:${entityName} - connectorName:${connector.meta.connectorName}`);
4046
+ }
4047
+ if (!mapper.discoveredClass.injectType) {
4048
+ throw new Error(`No inject type found for entity connector mapper: ${entityName} - ${connector.meta.connectorName}`);
4049
+ }
4050
+ const connectorInstance = (await app.resolve(connector.discoveredClass.injectType));
4051
+ const mapperInstance = (await app.resolve(connector.discoveredClass.injectType));
4052
+ registration.withSynchronization({
4053
+ name: connector.meta.connectorName,
4054
+ mapper: mapperInstance,
4055
+ connector: connectorInstance,
4056
+ options: {
4057
+ mode: connector.meta.mode,
4058
+ enabled: connector.meta.enabled,
4059
+ },
4060
+ });
4061
+ }
4062
+ // todo: configure replica
3999
4063
  }
4000
4064
  resolveEntityServicesCollection(entityName) {
4001
4065
  return this.container.getEntityServicesLocator(entityName);
@@ -22628,6 +22692,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22628
22692
  const snapshotServices = await this.discoverSnapshotService();
22629
22693
  const adapters = await this.discoverAdapters();
22630
22694
  const auth = await this.discoverAuthMiddlewares();
22695
+ const connectors = await this.discoverEntityConnectors();
22696
+ const connectorMappers = await this.discoverEntityConnectorMappers();
22631
22697
  const repositoriesDict = backendCore.toDict(repositories, (q) => q.meta.entityName);
22632
22698
  const queryBuilderDict = backendCore.toDict(queryBuilders, (q) => q.meta.entityName);
22633
22699
  const converterDict = backendCore.toDict(converters, (c) => c.meta.entityName);
@@ -22635,6 +22701,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22635
22701
  const snapshotServicesDict = backendCore.toDict(snapshotServices, (s) => s.meta.entityName);
22636
22702
  const adapterDict = backendCore.toDict(adapters, (a) => a.meta.entityName);
22637
22703
  const authDict = backendCore.toDict(auth, (a) => a.meta.entityName);
22704
+ const connectorsDict = backendCore.toArrayDict(connectors, (c) => c.meta.entityName);
22705
+ const connectorMappersDict = backendCore.toArrayDict(connectorMappers, (c) => c.meta.entityName);
22638
22706
  const sortedEntities = lodash.exports.orderBy(entities, (x) => x.meta.name);
22639
22707
  this.logger.log(`Discovered entities: \n${sortedEntities
22640
22708
  .map((x) => x.discoveredClass.name)
@@ -22658,6 +22726,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22658
22726
  const authMiddleware = authDict[entityName];
22659
22727
  const serializer = serializerDict[entityName];
22660
22728
  const snapshotService = snapshotServicesDict[entityName];
22729
+ const connectors = connectorsDict[entityName];
22730
+ const connectorMappers = connectorMappersDict[entityName];
22661
22731
  await this.registry.registerDiscoveredEntity(app, {
22662
22732
  entityName,
22663
22733
  entity,
@@ -22669,6 +22739,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22669
22739
  snapshotService,
22670
22740
  authMiddleware,
22671
22741
  settings: staticProviders.settings,
22742
+ connectorMappers,
22743
+ connectors,
22672
22744
  });
22673
22745
  this.logger.log(`Entity ${entityName} registered:
22674
22746
  - Repository: ${repository.discoveredClass.injectType?.name ?? ""}
@@ -22915,6 +22987,12 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
22915
22987
  async discoverGlobalAuthenticationMiddlewares() {
22916
22988
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.GlobalAuthenticationMiddleware);
22917
22989
  }
22990
+ async discoverEntityConnectors() {
22991
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntityConnector);
22992
+ }
22993
+ async discoverEntityConnectorMappers() {
22994
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntityConnectorMapper);
22995
+ }
22918
22996
  async discoverAppInitializers() {
22919
22997
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.AppInitializer);
22920
22998
  }
@@ -32607,6 +32685,7 @@ exports.WpEntityActions = WpEntityActions;
32607
32685
  exports.WpEntityAdapter = WpEntityAdapter;
32608
32686
  exports.WpEntityAuthMiddleware = WpEntityAuthMiddleware;
32609
32687
  exports.WpEntityConnector = WpEntityConnector;
32688
+ exports.WpEntityConnectorMapper = WpEntityConnectorMapper;
32610
32689
  exports.WpEntityConverter = WpEntityConverter;
32611
32690
  exports.WpEntityManager = WpEntityManager;
32612
32691
  exports.WpEntityQueryBuilder = WpEntityQueryBuilder;