@punks/backend-entity-manager 0.0.140 → 0.0.142

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 (34) hide show
  1. package/dist/cjs/index.js +83 -46
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/abstractions/commands.d.ts +9 -0
  4. package/dist/cjs/types/abstractions/email.d.ts +4 -0
  5. package/dist/cjs/types/abstractions/index.d.ts +1 -1
  6. package/dist/cjs/types/abstractions/manager.d.ts +2 -1
  7. package/dist/cjs/types/commands/version.d.ts +7 -0
  8. package/dist/cjs/types/concrete/index.d.ts +2 -1
  9. package/dist/cjs/types/platforms/nest/__test__/server/entities/foos/foo.snapshot.d.ts +2 -2
  10. package/dist/cjs/types/platforms/nest/decorators/email.d.ts +4 -0
  11. package/dist/cjs/types/platforms/nest/decorators/index.d.ts +1 -1
  12. package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +1 -0
  13. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +2 -0
  14. package/dist/cjs/types/platforms/nest/services/email/index.d.ts +1 -0
  15. package/dist/cjs/types/providers/services.d.ts +7 -2
  16. package/dist/cjs/types/symbols/ioc.d.ts +2 -0
  17. package/dist/esm/index.js +82 -47
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/esm/types/abstractions/commands.d.ts +9 -0
  20. package/dist/esm/types/abstractions/email.d.ts +4 -0
  21. package/dist/esm/types/abstractions/index.d.ts +1 -1
  22. package/dist/esm/types/abstractions/manager.d.ts +2 -1
  23. package/dist/esm/types/commands/version.d.ts +7 -0
  24. package/dist/esm/types/concrete/index.d.ts +2 -1
  25. package/dist/esm/types/platforms/nest/__test__/server/entities/foos/foo.snapshot.d.ts +2 -2
  26. package/dist/esm/types/platforms/nest/decorators/email.d.ts +4 -0
  27. package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -1
  28. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +1 -0
  29. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +2 -0
  30. package/dist/esm/types/platforms/nest/services/email/index.d.ts +1 -0
  31. package/dist/esm/types/providers/services.d.ts +7 -2
  32. package/dist/esm/types/symbols/ioc.d.ts +2 -0
  33. package/dist/index.d.ts +58 -28
  34. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { SortingType } from "./common";
2
2
  import { EntitiesExportInput, EntitiesExportResult, EntitiesSampleDownloadOptions, EntitiesSampleDownloadResult } from "./export";
3
3
  import { EntitiesImportInput, EntitiesImportResult } from "./import";
4
4
  import { IEntitySearchParameters, ISearchFilters, ISearchSorting } from "./searchParameters";
5
+ import { EntityVersionOperation } from "./versioning";
5
6
  export interface IEntityCreateCommand<TEntity, TEntityCreateData> {
6
7
  execute(input: TEntityCreateData): Promise<TEntity>;
7
8
  }
@@ -14,6 +15,14 @@ export interface IEntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData> {
14
15
  export interface IEntityDeleteCommand<TEntity, TEntityId> {
15
16
  execute(id: TEntityId): Promise<void>;
16
17
  }
18
+ export type EntityVersionCommandInput<TEntity, TEntityId> = {
19
+ operation: EntityVersionOperation;
20
+ id: TEntityId;
21
+ entity?: TEntity;
22
+ };
23
+ export interface IEntityVersionCommand<TEntity, TEntityId> {
24
+ execute(input: EntityVersionCommandInput<TEntity, TEntityId>): Promise<void>;
25
+ }
17
26
  export interface IEntitiesDeleteParameters<TSorting> {
18
27
  filters?: ISearchFilters;
19
28
  sorting?: ISearchSorting<TSorting>;
@@ -30,3 +30,7 @@ export interface IEmailProvider<TTemplateData> {
30
30
  sendTemplatedEmail<TPayload, TAugmentedPayload>(input: TemplatedEmailInput<TPayload>, template: IEmailTemplate<TTemplateData, TPayload, TAugmentedPayload>): Promise<void>;
31
31
  sendHtmlEmail<TPayload>(input: HtmlEmailInput<TPayload>): Promise<void>;
32
32
  }
33
+ export interface IEmailLogger {
34
+ logTemplatedEmail<TPayload>(input: TemplatedEmailInput<TPayload>): Promise<void>;
35
+ logHtmlEmail<TPayload>(input: HtmlEmailInput<TPayload>): Promise<void>;
36
+ }
@@ -3,7 +3,7 @@ export { IEntityAdapter } from "./adapters";
3
3
  export * from "./authentication";
4
4
  export * from "./buckets";
5
5
  export { IAuthorizationResult, IEntityAuthorizationMiddleware, } from "./authorization";
6
- export { IEntityCreateCommand, IEntityUpdateCommand, IEntityUpsertCommand, IEntityDeleteCommand, IEntitiesImportCommand, IEntitiesExportCommand, IEntitiesDeleteParameters, IEntitiesDeleteCommand, IEntitiesDeleteResult, IEntitiesSampleDownloadCommand, } from "./commands";
6
+ export { IEntityCreateCommand, IEntityUpdateCommand, IEntityUpsertCommand, IEntityDeleteCommand, IEntityVersionCommand, IEntitiesImportCommand, IEntitiesExportCommand, IEntitiesDeleteParameters, IEntitiesDeleteCommand, IEntitiesDeleteResult, IEntitiesSampleDownloadCommand, } from "./commands";
7
7
  export { SortingType, ClassType, EnumType } from "./common";
8
8
  export { IEntityManagerServiceRoot, IEntityManagerServiceCollection, } from "./configuration";
9
9
  export { IEntityConverter } from "./converters";
@@ -1,4 +1,4 @@
1
- import { IEntitiesDeleteCommand, IEntitiesDeleteParameters, IEntitiesExportCommand, IEntitiesImportCommand, IEntitiesSampleDownloadCommand, IEntityCreateCommand, IEntityDeleteCommand, IEntityUpdateCommand, IEntityUpsertCommand } from "./commands";
1
+ import { IEntitiesDeleteCommand, IEntitiesDeleteParameters, IEntitiesExportCommand, IEntitiesImportCommand, IEntitiesSampleDownloadCommand, IEntityCreateCommand, IEntityDeleteCommand, IEntityUpdateCommand, IEntityUpsertCommand, IEntityVersionCommand } from "./commands";
2
2
  import { SortingType } from "./common";
3
3
  import { IEntitiesCountQuery, IEntitiesFindQuery, IEntitiesSearchQuery, IEntityExistsQuery, IEntityGetQuery, IEntityVersionsSearchQuery } from "./queries";
4
4
  import { IEntitySearchParameters } from "./searchParameters";
@@ -9,6 +9,7 @@ export interface IEntityManager<TEntity, TEntityId, TEntityCreateData, TEntityUp
9
9
  get find(): IEntitiesFindQuery<TEntity, TEntitySearchParameters, TSorting, TCursor>;
10
10
  get exists(): IEntityExistsQuery<TEntity, NonNullable<TEntitySearchParameters["filters"]>>;
11
11
  get count(): IEntitiesCountQuery<TEntity, NonNullable<TEntitySearchParameters["filters"]>>;
12
+ get version(): IEntityVersionCommand<TEntity, TEntityId>;
12
13
  get create(): IEntityCreateCommand<TEntity, TEntityCreateData>;
13
14
  get update(): IEntityUpdateCommand<TEntity, TEntityId, TEntityUpdateData>;
14
15
  get upsert(): IEntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData>;
@@ -0,0 +1,7 @@
1
+ import { EntityVersionCommandInput, IEntityVersionCommand } from "../abstractions/commands";
2
+ import { EntityServiceLocator } from "../providers/services";
3
+ export declare class EntityVersionCommand<TEntity, TEntityId> implements IEntityVersionCommand<TEntity, TEntityId> {
4
+ private readonly services;
5
+ constructor(services: EntityServiceLocator<TEntity, TEntityId>);
6
+ execute({ id, operation, entity, }: EntityVersionCommandInput<TEntity, TEntityId>): Promise<void>;
7
+ }
@@ -1,5 +1,5 @@
1
1
  import { IEntitiesCountAction, IEntitiesDeleteAction, IEntitiesExportAction, IEntitiesImportAction, IEntitiesSampleDownloadAction, IEntitiesSearchAction, IEntityActions, IEntityCreateAction, IEntityDeleteAction, IEntityExistsAction, IEntityGetAction, IEntityUpdateAction, IEntityUpsertAction, IEntityVersionsSearchAction } from "../abstractions/actions";
2
- import { IEntitiesDeleteCommand, IEntitiesDeleteParameters, IEntitiesExportCommand, IEntitiesImportCommand, IEntitiesSampleDownloadCommand, IEntityCreateCommand, IEntityDeleteCommand, IEntityUpdateCommand, IEntityUpsertCommand } from "../abstractions/commands";
2
+ import { IEntitiesDeleteCommand, IEntitiesDeleteParameters, IEntitiesExportCommand, IEntitiesImportCommand, IEntitiesSampleDownloadCommand, IEntityCreateCommand, IEntityDeleteCommand, IEntityUpdateCommand, IEntityUpsertCommand, IEntityVersionCommand } from "../abstractions/commands";
3
3
  import { SortingType } from "../abstractions/common";
4
4
  import { IEntityManager } from "../abstractions/manager";
5
5
  import { IEntitiesCountQuery, IEntitiesFindQuery, IEntitiesSearchQuery, IEntityExistsQuery, IEntityGetQuery, IEntityVersionsSearchQuery } from "../abstractions/queries";
@@ -15,6 +15,7 @@ export declare class EntityManager<TEntity, TEntityId, TEntityCreateData, TEntit
15
15
  get get(): IEntityGetQuery<TEntity, TEntityId>;
16
16
  get search(): IEntitiesSearchQuery<TEntity, TEntitySearchParameters, TSorting, TCursor, TFacets>;
17
17
  get find(): IEntitiesFindQuery<TEntity, TEntitySearchParameters, TSorting, TCursor>;
18
+ get version(): IEntityVersionCommand<TEntity, TEntityId>;
18
19
  get create(): IEntityCreateCommand<TEntity, TEntityCreateData>;
19
20
  get update(): IEntityUpdateCommand<TEntity, TEntityId, TEntityUpdateData>;
20
21
  get upsert(): IEntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData>;
@@ -2,7 +2,7 @@ import { EntityManagerRegistry } from "../../../../../..";
2
2
  import { NestEntitySnapshotService } from "../../../../base/entitySnapshotService";
3
3
  import { FooEntity, FooEntityId } from "../../database/core/entities/foo.entity";
4
4
  import { FooRepository } from "../../database/core/repositories/foo.repository";
5
- export declare class FooEntitySnapshotService extends NestEntitySnapshotService<FooEntity, FooEntityId, FooRepository, any> {
5
+ export declare class FooEntitySnapshotService extends NestEntitySnapshotService<FooEntity, FooEntityId, FooRepository, FooEntity> {
6
6
  constructor(registry: EntityManagerRegistry);
7
- getSnapshot(id: FooEntityId): Promise<any>;
7
+ getSnapshot(id: FooEntityId): Promise<FooEntity>;
8
8
  }
@@ -6,3 +6,7 @@ export interface EmailProviderProps {
6
6
  providerId: string;
7
7
  }
8
8
  export declare const WpEmailProvider: (providerId: string) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
9
+ export interface EmailLoggerProps {
10
+ providerId: string;
11
+ }
12
+ export declare const WpEmailLogger: (providerId: string) => <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol | undefined, descriptor?: TypedPropertyDescriptor<Y> | undefined) => void;
@@ -4,7 +4,7 @@ export { WpEntityActions, EntityActionsProps } from "./actions";
4
4
  export { WpEntityAdapter, EntityAdapterProps } from "./adapter";
5
5
  export { WpEntityConnector, EntityConnectorProps } from "./connector";
6
6
  export { WpEntityConverter, EntityConverterProps } from "./converter";
7
- export { WpEmailTemplate, EmailTemplateProps } from "./email";
7
+ export { WpEmailTemplate, EmailTemplateProps, WpEmailLogger, EmailLoggerProps, WpEmailProvider, EmailProviderProps, } from "./email";
8
8
  export { WpEntity, EntityProps } from "./entity";
9
9
  export { WpFileProvider, FileProviderProps, WpFileReferenceRepository, FileReferenceRepositoryProps, } from "./files";
10
10
  export { WpAppInitializer } from "./initializer";
@@ -16,6 +16,7 @@ export declare const EntityManagerSymbols: {
16
16
  EntityVersioningProvider: symbol;
17
17
  EmailProvider: symbol;
18
18
  EmailTemplate: symbol;
19
+ EmailLogger: symbol;
19
20
  BucketProvider: symbol;
20
21
  FileProvider: symbol;
21
22
  FileReferenceRepository: symbol;
@@ -24,6 +24,7 @@ export declare class EntityManagerInitializer {
24
24
  private registerBucketProviders;
25
25
  private registerFilesReferenceRepositoryProviders;
26
26
  private registerEventTrackingProviders;
27
+ private registerEmailLogger;
27
28
  private registerVersioningProviders;
28
29
  private registerEmailProviders;
29
30
  private registerEmailTemplates;
@@ -43,6 +44,7 @@ export declare class EntityManagerInitializer {
43
44
  private discoverEmailTemplates;
44
45
  private discoverEmailProviders;
45
46
  private discoverEventTrackingProviders;
47
+ private discoverEmailLogger;
46
48
  private discoverBucketProviders;
47
49
  private discoverFileProviders;
48
50
  private discoverFilesReferenceRepositoryProviders;
@@ -8,4 +8,5 @@ export declare class EmailService {
8
8
  private getTemplate;
9
9
  private get templates();
10
10
  private get provider();
11
+ private get logger();
11
12
  }
@@ -1,8 +1,8 @@
1
- import { IAuthenticationContext, IAuthenticationContextProvider, IBucketProvider, IEmailProvider, IEmailTemplatesCollection, IEntityFacets, IEntitySerializer, IEntitySnapshotService, IEntityVersioningProvider, IEventLog, IEventsTracker, IFileProvider, IFilesReferenceRepository } from "../abstractions";
1
+ import { IAuthenticationContext, IAuthenticationContextProvider, IBucketProvider, IEmailLogger, IEmailProvider, IEmailTemplatesCollection, IEntityFacets, IEntitySerializer, IEntitySnapshotService, IEntityVersioningProvider, IEventLog, IEventsTracker, IFileProvider, IFilesReferenceRepository } from "../abstractions";
2
2
  import { IEntitiesCountAction, IEntitiesDeleteAction, IEntitiesExportAction, IEntitiesImportAction, IEntitiesSampleDownloadAction, IEntitiesSearchAction, IEntityActions, IEntityCreateAction, IEntityDeleteAction, IEntityExistsAction, IEntityGetAction, IEntityUpdateAction, IEntityUpsertAction, IEntityVersionsSearchAction } from "../abstractions/actions";
3
3
  import { IEntityAdapter } from "../abstractions/adapters";
4
4
  import { IEntityAuthorizationMiddleware } from "../abstractions/authorization";
5
- import { IEntitiesDeleteCommand, IEntitiesDeleteParameters, IEntitiesExportCommand, IEntitiesImportCommand, IEntitiesSampleDownloadCommand, IEntityCreateCommand, IEntityDeleteCommand, IEntityUpdateCommand, IEntityUpsertCommand } from "../abstractions/commands";
5
+ import { IEntitiesDeleteCommand, IEntitiesDeleteParameters, IEntitiesExportCommand, IEntitiesImportCommand, IEntitiesSampleDownloadCommand, IEntityCreateCommand, IEntityDeleteCommand, IEntityUpdateCommand, IEntityUpsertCommand, IEntityVersionCommand } from "../abstractions/commands";
6
6
  import { SortingType } from "../abstractions/common";
7
7
  import { IConnectorsConfiguration, IEntityConnectorDeleteManager, IEntityConnectorSyncManager } from "../abstractions/connectors";
8
8
  import { IEntityConverter } from "../abstractions/converters";
@@ -49,6 +49,7 @@ export declare class EntityServiceLocator<TEntity, TEntityId> {
49
49
  resolveUpsertCommand<TEntityUpdateData>(): IEntityUpsertCommand<TEntity, TEntityId, TEntityUpdateData>;
50
50
  resolveDeleteCommand<TEntityId>(): IEntityDeleteCommand<TEntity, TEntityId>;
51
51
  resolveDeleteItemsCommand<TEntitiesDeleteParameters extends IEntitiesDeleteParameters<TSorting>, TSorting>(): IEntitiesDeleteCommand<TEntity, TEntitiesDeleteParameters, TSorting>;
52
+ resolveVersionCommand(): IEntityVersionCommand<TEntity, TEntityId>;
52
53
  resolveSampleDownloadCommand(): IEntitiesSampleDownloadCommand<TEntity>;
53
54
  resolveImportCommand(): IEntitiesImportCommand<TEntity>;
54
55
  resolveExportCommand<TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor>(): IEntitiesExportCommand<TEntity, TEntitySearchParameters, TSorting, TCursor>;
@@ -92,6 +93,8 @@ export declare class EntitiesServiceLocator {
92
93
  registerEventsTracker<TEventsTracker extends IEventsTracker<TEventLog>, TEventLog extends IEventLog<unknown>>(instance: TEventsTracker): void;
93
94
  resolveEmailTemplatesCollection(): IEmailTemplatesCollection;
94
95
  registerEmailTemplatesCollection(instance: IEmailTemplatesCollection): void;
96
+ resolveEmailLogger(): IEmailLogger;
97
+ registerEmailLogger(instance: IEmailLogger): void;
95
98
  resolvePipelinesController(): IPipelinesController;
96
99
  registerPipelinesController(instance: IPipelinesController): void;
97
100
  resolveAuthenticationContextProvider<TAuthenticationContextProvider extends IAuthenticationContextProvider<TUserContext>, TUserContext>(): TAuthenticationContextProvider;
@@ -150,6 +153,8 @@ export declare class EntitiesServiceLocator {
150
153
  registerDeleteItemsCommand<TEntity, TEntitiesDeleteParameters extends IEntitiesDeleteParameters<TSorting>, TSorting>(entityName: string, instance: IEntitiesDeleteCommand<TEntity, TEntitiesDeleteParameters, TSorting>): void;
151
154
  resolveDeleteCommand<TEntity, TEntityId>(entityName: string): IEntityDeleteCommand<TEntity, TEntityId>;
152
155
  registerDeleteCommand<TEntity, TEntityId>(entityName: string, instance: IEntityDeleteCommand<TEntity, TEntityId>): void;
156
+ resolveVersionCommand<TEntity, TEntityId>(entityName: string): IEntityVersionCommand<TEntity, TEntityId>;
157
+ registerVersionCommand<TEntity, TEntityId>(entityName: string, instance: IEntityVersionCommand<TEntity, TEntityId>): void;
153
158
  resolveExportCommand<TEntity, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor>(entityName: string): IEntitiesExportCommand<TEntity, TEntitySearchParameters, TSorting, TCursor>;
154
159
  registerExportCommand<TEntity, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor>(entityName: string, instance: IEntitiesExportCommand<TEntity, TEntitySearchParameters, TSorting, TCursor>): void;
155
160
  resolveImportCommand<TEntity>(entityName: string): IEntitiesImportCommand<TEntity>;
@@ -24,6 +24,7 @@ export declare const EntityServices: {
24
24
  IEntityUpsertCommand: string;
25
25
  IEntityMergeCommand: string;
26
26
  IEntityDeleteCommand: string;
27
+ IEntityVersionCommand: string;
27
28
  IEntitiesDeleteCommand: string;
28
29
  IEntitiesExportCommand: string;
29
30
  IEntitiesImportCommand: string;
@@ -84,6 +85,7 @@ export declare const GlobalServices: {
84
85
  };
85
86
  Plugins: {
86
87
  IEmailProvider: string;
88
+ IEmailLogger: string;
87
89
  IEmailTemplatesCollection: string;
88
90
  IBucketProvider: string;
89
91
  IFileProvider: string;
package/dist/esm/index.js CHANGED
@@ -520,16 +520,10 @@ class EntityCreateCommand {
520
520
  if (!versioning) {
521
521
  return;
522
522
  }
523
- const contextService = this.services.resolveAuthenticationContextProvider();
524
- const context = await contextService?.getContext();
525
- const snapshotService = this.services.resolveSnapshotService();
526
- const snapshot = (await snapshotService?.getSnapshot(id)) ?? entity;
527
- await versioning.createVersion({
528
- operationType: EntityVersionOperation.Create,
529
- entityId: id,
530
- entityType: this.services.getEntityName(),
531
- data: snapshot,
532
- modifiedByUserId: context?.userId,
523
+ await this.services.resolveVersionCommand().execute({
524
+ id,
525
+ entity,
526
+ operation: EntityVersionOperation.Create,
533
527
  });
534
528
  }
535
529
  isVersioningEnabled() {
@@ -572,20 +566,9 @@ class EntityDeleteCommand {
572
566
  if (!this.isVersioningEnabled()) {
573
567
  return;
574
568
  }
575
- const versioning = this.services.resolveVersioningProvider();
576
- if (!versioning) {
577
- return;
578
- }
579
- const contextService = this.services.resolveAuthenticationContextProvider();
580
- const context = await contextService?.getContext();
581
- const snapshotService = this.services.resolveSnapshotService();
582
- const snapshot = await snapshotService?.getSnapshot(id);
583
- await versioning.createVersion({
584
- operationType: EntityVersionOperation.Delete,
585
- entityId: id,
586
- entityType: this.services.getEntityName(),
587
- data: snapshot,
588
- modifiedByUserId: context?.userId,
569
+ await this.services.resolveVersionCommand().execute({
570
+ id,
571
+ operation: EntityVersionOperation.Delete,
589
572
  });
590
573
  }
591
574
  isVersioningEnabled() {
@@ -818,20 +801,10 @@ class EntityUpdateCommand {
818
801
  if (!this.isVersioningEnabled()) {
819
802
  return;
820
803
  }
821
- const versioning = this.services.resolveVersioningProvider();
822
- if (!versioning) {
823
- return;
824
- }
825
- const contextService = this.services.resolveAuthenticationContextProvider();
826
- const context = await contextService?.getContext();
827
- const snapshotService = this.services.resolveSnapshotService();
828
- const snapshot = (await snapshotService?.getSnapshot(id)) ?? entity;
829
- await versioning.createVersion({
830
- operationType: EntityVersionOperation.Update,
831
- entityId: id,
832
- entityType: this.services.getEntityName(),
833
- data: snapshot,
834
- modifiedByUserId: context?.userId,
804
+ await this.services.resolveVersionCommand().execute({
805
+ id,
806
+ entity,
807
+ operation: EntityVersionOperation.Update,
835
808
  });
836
809
  }
837
810
  isVersioningEnabled() {
@@ -887,25 +860,38 @@ class EntityUpsertCommand {
887
860
  if (!this.isVersioningEnabled()) {
888
861
  return;
889
862
  }
890
- const versioning = this.services.resolveVersioningProvider();
891
- if (!versioning) {
892
- return;
863
+ await this.services.resolveVersionCommand().execute({
864
+ id,
865
+ entity,
866
+ operation: EntityVersionOperation.Upsert,
867
+ });
868
+ }
869
+ isVersioningEnabled() {
870
+ return (this.services.resolveEntityConfiguration().versioning?.enabled ?? false);
871
+ }
872
+ }
873
+
874
+ class EntityVersionCommand {
875
+ constructor(services) {
876
+ this.services = services;
877
+ }
878
+ async execute({ id, operation, entity, }) {
879
+ const versioningProvider = this.services.resolveVersioningProvider();
880
+ if (!versioningProvider) {
881
+ throw new Error("Versioning provider is not configured");
893
882
  }
894
883
  const contextService = this.services.resolveAuthenticationContextProvider();
895
884
  const context = await contextService?.getContext();
896
885
  const snapshotService = this.services.resolveSnapshotService();
897
886
  const snapshot = (await snapshotService?.getSnapshot(id)) ?? entity;
898
- await versioning.createVersion({
899
- operationType: EntityVersionOperation.Upsert,
887
+ await versioningProvider.createVersion({
888
+ operationType: operation,
900
889
  entityId: id,
901
890
  entityType: this.services.getEntityName(),
902
891
  data: snapshot,
903
892
  modifiedByUserId: context?.userId,
904
893
  });
905
894
  }
906
- isVersioningEnabled() {
907
- return (this.services.resolveEntityConfiguration().versioning?.enabled ?? false);
908
- }
909
895
  }
910
896
 
911
897
  class EntityManager {
@@ -930,6 +916,9 @@ class EntityManager {
930
916
  get find() {
931
917
  return this.services.resolveFindQuery();
932
918
  }
919
+ get version() {
920
+ return this.services.resolveVersionCommand();
921
+ }
933
922
  get create() {
934
923
  return this.services.resolveCreateCommand();
935
924
  }
@@ -1092,6 +1081,7 @@ const EntityServices = {
1092
1081
  IEntityUpsertCommand: "IEntityUpsertCommand",
1093
1082
  IEntityMergeCommand: "IEntityMergeCommand",
1094
1083
  IEntityDeleteCommand: "IEntityDeleteCommand",
1084
+ IEntityVersionCommand: "IEntityVersionCommand",
1095
1085
  IEntitiesDeleteCommand: "IEntitiesDeleteCommand",
1096
1086
  IEntitiesExportCommand: "IEntitiesExportCommand",
1097
1087
  IEntitiesImportCommand: "IEntitiesImportCommand",
@@ -1152,6 +1142,7 @@ const GlobalServices = {
1152
1142
  },
1153
1143
  Plugins: {
1154
1144
  IEmailProvider: "IEmailProvider",
1145
+ IEmailLogger: "IEmailLogger",
1155
1146
  IEmailTemplatesCollection: "IEmailTemplatesCollection",
1156
1147
  IBucketProvider: "IBucketProvider",
1157
1148
  IFileProvider: "IFileProvider",
@@ -1259,6 +1250,9 @@ class EntityServiceLocator {
1259
1250
  resolveDeleteItemsCommand() {
1260
1251
  return this.services.resolveDeleteItemsCommand(this.entityName);
1261
1252
  }
1253
+ resolveVersionCommand() {
1254
+ return this.services.resolveVersionCommand(this.entityName);
1255
+ }
1262
1256
  resolveSampleDownloadCommand() {
1263
1257
  return this.services.resolveSampleDownloadCommand(this.entityName);
1264
1258
  }
@@ -1388,6 +1382,12 @@ class EntitiesServiceLocator {
1388
1382
  registerEmailTemplatesCollection(instance) {
1389
1383
  this.provider.register(GlobalServices.Plugins.IEmailTemplatesCollection, instance);
1390
1384
  }
1385
+ resolveEmailLogger() {
1386
+ return this.provider.resolve(GlobalServices.Plugins.IEmailLogger);
1387
+ }
1388
+ registerEmailLogger(instance) {
1389
+ this.provider.register(GlobalServices.Plugins.IEmailLogger, instance);
1390
+ }
1391
1391
  resolvePipelinesController() {
1392
1392
  return this.provider.resolve(GlobalServices.Pipelines.IPipelineController);
1393
1393
  }
@@ -1572,6 +1572,12 @@ class EntitiesServiceLocator {
1572
1572
  registerDeleteCommand(entityName, instance) {
1573
1573
  this.provider.registerEntityService(EntityServices.Commands.IEntityDeleteCommand, entityName, instance);
1574
1574
  }
1575
+ resolveVersionCommand(entityName) {
1576
+ return this.provider.resolveEntityService(EntityServices.Commands.IEntityVersionCommand, entityName);
1577
+ }
1578
+ registerVersionCommand(entityName, instance) {
1579
+ this.provider.registerEntityService(EntityServices.Commands.IEntityVersionCommand, entityName, instance);
1580
+ }
1575
1581
  resolveExportCommand(entityName) {
1576
1582
  return this.provider.resolveEntityService(EntityServices.Commands.IEntitiesExportCommand, entityName);
1577
1583
  }
@@ -2198,6 +2204,7 @@ class EntityManagerServiceCollection {
2198
2204
  return this;
2199
2205
  }
2200
2206
  mapImportExport(settings) {
2207
+ this.locator.registerVersionCommand(this.entityName, new EntityVersionCommand(this.resolver));
2201
2208
  this.locator.registerExportCommand(this.entityName, new EntitiesExportCommand(this.resolver, settings));
2202
2209
  this.locator.registerExportAction(this.entityName, new EntitiesExportAction(this.resolver));
2203
2210
  this.locator.registerImportCommand(this.entityName, new EntitiesImportCommand(this.resolver, settings));
@@ -2339,6 +2346,7 @@ const EntityManagerSymbols = {
2339
2346
  EntityVersioningProvider: Symbol.for("WP:ENTITY_VERSIONING_PROVIDER"),
2340
2347
  EmailProvider: Symbol.for("WP:EMAIL_PROVIDER"),
2341
2348
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
2349
+ EmailLogger: Symbol.for("WP:EMAIL_LOGGER"),
2342
2350
  BucketProvider: Symbol.for("WP:BUCKET_PROVIDER"),
2343
2351
  FileProvider: Symbol.for("WP:FILE_PROVIDER"),
2344
2352
  FileReferenceRepository: Symbol.for("WP:FILE_REFERENCE_REPO"),
@@ -2380,6 +2388,9 @@ const WpEmailTemplate = (templateId) => applyDecorators(Injectable(), SetMetadat
2380
2388
  const WpEmailProvider = (providerId) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EmailProvider, {
2381
2389
  providerId,
2382
2390
  }));
2391
+ const WpEmailLogger = (providerId) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EmailLogger, {
2392
+ providerId,
2393
+ }));
2383
2394
 
2384
2395
  const WpEntity = (name, props = {}) => applyDecorators(SetMetadata(EntityManagerSymbols.Entity, {
2385
2396
  name,
@@ -20283,9 +20294,11 @@ let EmailService = class EmailService {
20283
20294
  async sendTemplatedEmail(input) {
20284
20295
  const template = this.getTemplate(input.templateId);
20285
20296
  await this.provider.sendTemplatedEmail(input, template);
20297
+ await this.logger.logTemplatedEmail(input);
20286
20298
  }
20287
20299
  async sendHtmlEmail(input) {
20288
20300
  await this.provider.sendHtmlEmail(input);
20301
+ await this.logger.logHtmlEmail(input);
20289
20302
  }
20290
20303
  getTemplate(templateId) {
20291
20304
  const template = this.templates.getTemplate(templateId);
@@ -20306,6 +20319,12 @@ let EmailService = class EmailService {
20306
20319
  .getEntitiesServicesLocator()
20307
20320
  .resolveEmailProvider();
20308
20321
  }
20322
+ get logger() {
20323
+ return this.registry
20324
+ .getContainer()
20325
+ .getEntitiesServicesLocator()
20326
+ .resolveEmailLogger();
20327
+ }
20309
20328
  };
20310
20329
  EmailService = __decorate([
20311
20330
  Injectable(),
@@ -21424,6 +21443,7 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
21424
21443
  await this.registerEmailProviders();
21425
21444
  await this.registerEventTrackingProviders();
21426
21445
  await this.registerVersioningProviders();
21446
+ await this.registerEmailLogger();
21427
21447
  await this.registerFilesReferenceRepositoryProviders();
21428
21448
  await this.registerFileProviders();
21429
21449
  await this.registerBucketProviders();
@@ -21569,6 +21589,18 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
21569
21589
  .registerEventsTracker(providers[0].discoveredClass.instance);
21570
21590
  this.logger.log(`Events tracker ${providers[0].discoveredClass.name} registered 🚜`);
21571
21591
  }
21592
+ async registerEmailLogger() {
21593
+ const loggers = await this.discoverEmailLogger();
21594
+ if (!loggers.length) {
21595
+ this.logger.warn("No email loggers ⚠️");
21596
+ return;
21597
+ }
21598
+ this.registry
21599
+ .getContainer()
21600
+ .getEntitiesServicesLocator()
21601
+ .registerEmailLogger(loggers[0].discoveredClass.instance);
21602
+ this.logger.log(`Email logger ${loggers[0].discoveredClass.name} registered 🚜`);
21603
+ }
21572
21604
  async registerVersioningProviders() {
21573
21605
  const providers = await this.discoverVersioningProviders();
21574
21606
  if (!providers.length) {
@@ -21660,6 +21692,9 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
21660
21692
  async discoverEventTrackingProviders() {
21661
21693
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EventsTracker);
21662
21694
  }
21695
+ async discoverEmailLogger() {
21696
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EmailLogger);
21697
+ }
21663
21698
  async discoverBucketProviders() {
21664
21699
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.BucketProvider);
21665
21700
  }
@@ -28160,5 +28195,5 @@ InMemoryEmailProvider = __decorate([
28160
28195
  WpEmailProvider("in-memory")
28161
28196
  ], InMemoryEmailProvider);
28162
28197
 
28163
- export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsBucketModule, AwsEmailModule, AwsS3BucketError as AwsS2BucketError, AwsS3BucketProvider, AwsSesEmailTemplate, BooleanFacet, BooleanFacetItem, BucketItemType, CurrentUser, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EntitySerializationFormat, EntitySerializer, EntitySnapshotService, EntityVersionOperation, EventsService, FilesService, IEntityVersionsCursor, InMemoryBucketProvider, InMemoryEmailProvider, InvalidCredentialsError, MemberOf, MissingEntityIdError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestEntitySerializer, NestEntitySnapshotService, NestPipelineTemplate, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, NumericFacet, NumericFacetItem, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PipelineController, PipelineErrorType, PipelineStatus, PipelineStepErrorType, PipelinesBuilder, PipelinesRunner, PlatformEvents, Public, QueryBuilderBase, QueryBuilderOperation, ReplicationMode, Roles, SendgridEmailModule, SendgridEmailTemplate, SortDirection, StringFacet, StringFacetItem, TrackingService, UserCreationError, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpBucketProvider, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEntitySerializer, WpEntitySnapshotService, WpEntityVersioningProvider, WpEventsTracker, WpFileProvider, WpFileReferenceRepository, WpPipeline, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, buildRolesGuard, createContainer, createExpressFileResponse, getLocalizedText, newUuid, renderHandlebarsTemplate, toEntitiesImportInput };
28198
+ export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsBucketModule, AwsEmailModule, AwsS3BucketError as AwsS2BucketError, AwsS3BucketProvider, AwsSesEmailTemplate, BooleanFacet, BooleanFacetItem, BucketItemType, CurrentUser, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EntitySerializationFormat, EntitySerializer, EntitySnapshotService, EntityVersionOperation, EventsService, FilesService, IEntityVersionsCursor, InMemoryBucketProvider, InMemoryEmailProvider, InvalidCredentialsError, MemberOf, MissingEntityIdError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestEntitySerializer, NestEntitySnapshotService, NestPipelineTemplate, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, NumericFacet, NumericFacetItem, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PipelineController, PipelineErrorType, PipelineStatus, PipelineStepErrorType, PipelinesBuilder, PipelinesRunner, PlatformEvents, Public, QueryBuilderBase, QueryBuilderOperation, ReplicationMode, Roles, SendgridEmailModule, SendgridEmailTemplate, SortDirection, StringFacet, StringFacetItem, TrackingService, UserCreationError, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpBucketProvider, WpEmailLogger, WpEmailProvider, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEntitySerializer, WpEntitySnapshotService, WpEntityVersioningProvider, WpEventsTracker, WpFileProvider, WpFileReferenceRepository, WpPipeline, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, buildRolesGuard, createContainer, createExpressFileResponse, getLocalizedText, newUuid, renderHandlebarsTemplate, toEntitiesImportInput };
28164
28199
  //# sourceMappingURL=index.js.map