@punks/backend-entity-manager 0.0.91 → 0.0.93
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 +108 -13
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/__test__/entity/foo.d.ts +1 -1
- package/dist/cjs/types/__test__/providers/typeorm/entity/foo.d.ts +1 -1
- package/dist/cjs/types/abstractions/configuration.d.ts +1 -1
- package/dist/cjs/types/abstractions/import.d.ts +2 -0
- package/dist/cjs/types/abstractions/serializer.d.ts +7 -2
- package/dist/cjs/types/base/serializer.d.ts +7 -3
- package/dist/cjs/types/commands/import.d.ts +5 -0
- package/dist/cjs/types/platforms/nest/__test__/server/app/appCompanies/appCompany.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appDivisions/appDivision.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appOrganizations/appOrganization.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appRoles/appRole.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appTenants/appTenant.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appUserGroupMembers/appUserGroupMember.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appUserGroups/appUserGroup.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appUserProfiles/appUserProfile.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appUserRoles/appUserRole.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/app/appUsers/appUser.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/entities/foos/foo.serializer.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/base/entityActions.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/base/entityManager.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/base/entitySerializer.d.ts +1 -1
- package/dist/cjs/types/providers/services.d.ts +3 -3
- package/dist/esm/index.js +109 -14
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/__test__/entity/foo.d.ts +1 -1
- package/dist/esm/types/__test__/providers/typeorm/entity/foo.d.ts +1 -1
- package/dist/esm/types/abstractions/configuration.d.ts +1 -1
- package/dist/esm/types/abstractions/import.d.ts +2 -0
- package/dist/esm/types/abstractions/serializer.d.ts +7 -2
- package/dist/esm/types/base/serializer.d.ts +7 -3
- package/dist/esm/types/commands/import.d.ts +5 -0
- package/dist/esm/types/platforms/nest/__test__/server/app/appCompanies/appCompany.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appDivisions/appDivision.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appOrganizations/appOrganization.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appRoles/appRole.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appTenants/appTenant.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appUserGroupMembers/appUserGroupMember.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appUserGroups/appUserGroup.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appUserProfiles/appUserProfile.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appUserRoles/appUserRole.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/app/appUsers/appUser.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/entities/foos/foo.serializer.d.ts +1 -1
- package/dist/esm/types/platforms/nest/base/entityActions.d.ts +1 -1
- package/dist/esm/types/platforms/nest/base/entityManager.d.ts +1 -1
- package/dist/esm/types/platforms/nest/base/entitySerializer.d.ts +1 -1
- package/dist/esm/types/providers/services.d.ts +3 -3
- package/dist/index.d.ts +22 -11
- package/package.json +3 -3
|
@@ -67,7 +67,7 @@ export interface FooUpdateDto {
|
|
|
67
67
|
age: number;
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
-
export declare class FooSerializer extends EntitySerializer<FooEntity> {
|
|
70
|
+
export declare class FooSerializer extends EntitySerializer<FooEntity, string> {
|
|
71
71
|
constructor(entityName: string);
|
|
72
72
|
protected getDefinition(): EntitySerializerSheetDefinition<FooEntity>;
|
|
73
73
|
}
|
|
@@ -81,7 +81,7 @@ export declare class FooConverter implements IEntityConverter<FooEntity, FooDto,
|
|
|
81
81
|
createDtoToEntity(input: FooCreateInput): Partial<FooEntity>;
|
|
82
82
|
updateDtoToEntity(input: FooUpdateInput): Partial<FooEntity>;
|
|
83
83
|
}
|
|
84
|
-
export declare class FooSerializer extends EntitySerializer<FooEntity> {
|
|
84
|
+
export declare class FooSerializer extends EntitySerializer<FooEntity, string> {
|
|
85
85
|
protected getDefinition(): EntitySerializerSheetDefinition<FooEntity>;
|
|
86
86
|
}
|
|
87
87
|
export declare const registerFooTypeOrmEntity: (container: IEntityManagerServiceRoot, dataSource: DataSource, options?: {
|
|
@@ -30,7 +30,7 @@ export interface IEntityManagerServiceRoot {
|
|
|
30
30
|
export interface IEntityManagerServiceCollection<TEntity, TEntityId> {
|
|
31
31
|
getServiceLocator(): EntityServiceLocator<TEntity, TEntityId>;
|
|
32
32
|
mapCrudOperations<TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor, TFacets extends IEntityFacets, TEntitiesQueryBuilder extends IEntitiesQueryBuilder<TEntity, TEntitySearchParameters, TSorting, TCursor, TFacets, unknown>>(input: EntitiesMapOperationsInput<TEntitiesQueryBuilder>): IEntityManagerServiceCollection<TEntity, TEntityId>;
|
|
33
|
-
addSerializer<TEntitySerializer extends IEntitySerializer<TEntity>>(serializer: TEntitySerializer): IEntityManagerServiceCollection<TEntity, TEntityId>;
|
|
33
|
+
addSerializer<TEntitySerializer extends IEntitySerializer<TEntity, TEntityId>>(serializer: TEntitySerializer): IEntityManagerServiceCollection<TEntity, TEntityId>;
|
|
34
34
|
addConverter<TEntityDto, TListItemDto, TEntityCreateInput, TEntityUpdateInput, TEntityConverter extends IEntityConverter<TEntity, TEntityDto, TListItemDto, TEntityCreateInput, TEntityUpdateInput>>(converter: TEntityConverter): IEntityManagerServiceCollection<TEntity, TEntityId>;
|
|
35
35
|
addAdapter<TEntityCreateData, TEntityUpdateData, TEntityAdapter extends IEntityAdapter<TEntity, TEntityCreateData, TEntityUpdateData>>(adapter: TEntityAdapter): IEntityManagerServiceCollection<TEntity, TEntityId>;
|
|
36
36
|
addAuthorization<TEntityAuthorizationMiddleware extends IEntityAuthorizationMiddleware<TEntity, TAuthenticationContext, TUserContext>, TAuthenticationContext extends IAuthenticationContext<TUserContext>, TUserContext>({ middleware, }: {
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
import { EntitySerializationFormat } from "./serializer";
|
|
3
3
|
export type EntitiesImportInput = {
|
|
4
4
|
format: EntitySerializationFormat;
|
|
5
|
+
fileName: string;
|
|
5
6
|
content: Buffer;
|
|
7
|
+
contentType: string;
|
|
6
8
|
};
|
|
7
9
|
export type EntitiesImportStatistics = {
|
|
8
10
|
importedCount: number;
|
|
@@ -6,6 +6,7 @@ export type EntitySerializerColumnDefinition<TEntity> = {
|
|
|
6
6
|
sampleValue?: any;
|
|
7
7
|
parser?: (value: any) => any;
|
|
8
8
|
converter?: (value: any, item: TEntity) => any;
|
|
9
|
+
idColumn?: boolean;
|
|
9
10
|
};
|
|
10
11
|
export type EntitySerializerSheetDefinition<TEntity> = {
|
|
11
12
|
columns: EntitySerializerColumnDefinition<TEntity>[];
|
|
@@ -20,8 +21,12 @@ export declare enum EntitySerializationFormat {
|
|
|
20
21
|
Json = "json",
|
|
21
22
|
Xlsx = "xlsx"
|
|
22
23
|
}
|
|
23
|
-
export
|
|
24
|
+
export type ImportEntry<TEntity, TEntityId> = {
|
|
25
|
+
id?: TEntityId;
|
|
26
|
+
item: TEntity;
|
|
27
|
+
};
|
|
28
|
+
export interface IEntitySerializer<TEntity, TEntityId> {
|
|
24
29
|
serialize(data: TEntity[], format: EntitySerializationFormat): Promise<EntityExportFile>;
|
|
25
|
-
parse(data: Buffer, format: EntitySerializationFormat): Promise<TEntity[]>;
|
|
30
|
+
parse(data: Buffer, format: EntitySerializationFormat): Promise<ImportEntry<TEntity, TEntityId>[]>;
|
|
26
31
|
createSample(format: EntitySerializationFormat): Promise<EntityExportFile>;
|
|
27
32
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EntitySerializationFormat, IEntitySerializer } from "../abstractions";
|
|
3
|
-
import { EntityExportFile, EntitySerializerSheetDefinition } from "../abstractions/serializer";
|
|
4
|
-
export declare abstract class EntitySerializer<TEntity> implements IEntitySerializer<TEntity> {
|
|
3
|
+
import { EntityExportFile, EntitySerializerSheetDefinition, ImportEntry } from "../abstractions/serializer";
|
|
4
|
+
export declare abstract class EntitySerializer<TEntity, TEntityId> implements IEntitySerializer<TEntity, TEntityId> {
|
|
5
5
|
protected readonly entityName: string;
|
|
6
6
|
constructor(entityName: string);
|
|
7
|
-
parse(data: Buffer, format: EntitySerializationFormat): Promise<TEntity[]>;
|
|
7
|
+
parse(data: Buffer, format: EntitySerializationFormat): Promise<ImportEntry<TEntity, TEntityId>[]>;
|
|
8
|
+
private parseCsv;
|
|
9
|
+
private parseXlsx;
|
|
10
|
+
private convertSheetRecord;
|
|
11
|
+
private parseColumnValue;
|
|
8
12
|
createSample(format: EntitySerializationFormat): Promise<EntityExportFile>;
|
|
9
13
|
private buildSampleFile;
|
|
10
14
|
serialize(data: TEntity[], format: EntitySerializationFormat): Promise<EntityExportFile>;
|
|
@@ -7,4 +7,9 @@ export declare class EntitiesImportCommand<TEntity> implements IEntitiesImportCo
|
|
|
7
7
|
private readonly settings;
|
|
8
8
|
constructor(services: EntityServiceLocator<TEntity, unknown>, settings: EntitiesImportExportSettings);
|
|
9
9
|
execute(input: EntitiesImportInput): Promise<EntitiesImportResult>;
|
|
10
|
+
private importEntity;
|
|
11
|
+
private parseImportFile;
|
|
12
|
+
private uploadImportFile;
|
|
13
|
+
private buildAbsoluteBucketPath;
|
|
14
|
+
private get bucket();
|
|
10
15
|
}
|
package/dist/cjs/types/platforms/nest/__test__/server/app/appCompanies/appCompany.serializer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppCompanyEntity } from "../../database/core/entities/appCompany.entity";
|
|
4
|
-
export declare class AppCompanySerializer extends NestEntitySerializer<AppCompanyEntity> {
|
|
4
|
+
export declare class AppCompanySerializer extends NestEntitySerializer<AppCompanyEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppCompanyEntity>;
|
|
6
6
|
}
|
package/dist/cjs/types/platforms/nest/__test__/server/app/appDivisions/appDivision.serializer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppDivisionEntity } from "../../database/core/entities/appDivision.entity";
|
|
4
|
-
export declare class AppDivisionSerializer extends NestEntitySerializer<AppDivisionEntity> {
|
|
4
|
+
export declare class AppDivisionSerializer extends NestEntitySerializer<AppDivisionEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppDivisionEntity>;
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppOrganizationEntity } from "../../database/core/entities/appOrganization.entity";
|
|
4
|
-
export declare class AppOrganizationSerializer extends NestEntitySerializer<AppOrganizationEntity> {
|
|
4
|
+
export declare class AppOrganizationSerializer extends NestEntitySerializer<AppOrganizationEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppOrganizationEntity>;
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppRoleEntity } from "../../database/core/entities/appRole.entity";
|
|
4
|
-
export declare class AppRoleSerializer extends NestEntitySerializer<AppRoleEntity> {
|
|
4
|
+
export declare class AppRoleSerializer extends NestEntitySerializer<AppRoleEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppRoleEntity>;
|
|
6
6
|
}
|
package/dist/cjs/types/platforms/nest/__test__/server/app/appTenants/appTenant.serializer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppTenantEntity } from "../../database/core/entities/appTenant.entity";
|
|
4
|
-
export declare class AppTenantSerializer extends NestEntitySerializer<AppTenantEntity> {
|
|
4
|
+
export declare class AppTenantSerializer extends NestEntitySerializer<AppTenantEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppTenantEntity>;
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppUserGroupMemberEntity } from "../../database/core/entities/appUserGroupMember.entity";
|
|
4
|
-
export declare class AppUserGroupMemberSerializer extends NestEntitySerializer<AppUserGroupMemberEntity> {
|
|
4
|
+
export declare class AppUserGroupMemberSerializer extends NestEntitySerializer<AppUserGroupMemberEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppUserGroupMemberEntity>;
|
|
6
6
|
}
|
package/dist/cjs/types/platforms/nest/__test__/server/app/appUserGroups/appUserGroup.serializer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppUserGroupEntity } from "../../database/core/entities/appUserGroup.entity";
|
|
4
|
-
export declare class AppUserGroupSerializer extends NestEntitySerializer<AppUserGroupEntity> {
|
|
4
|
+
export declare class AppUserGroupSerializer extends NestEntitySerializer<AppUserGroupEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppUserGroupEntity>;
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppUserProfileEntity } from "../../database/core/entities/appUserProfile.entity";
|
|
4
|
-
export declare class AppUserProfileSerializer extends NestEntitySerializer<AppUserProfileEntity> {
|
|
4
|
+
export declare class AppUserProfileSerializer extends NestEntitySerializer<AppUserProfileEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppUserProfileEntity>;
|
|
6
6
|
}
|
package/dist/cjs/types/platforms/nest/__test__/server/app/appUserRoles/appUserRole.serializer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppUserRoleEntity } from "../../database/core/entities/appUserRole.entity";
|
|
4
|
-
export declare class AppUserRoleSerializer extends NestEntitySerializer<AppUserRoleEntity> {
|
|
4
|
+
export declare class AppUserRoleSerializer extends NestEntitySerializer<AppUserRoleEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppUserRoleEntity>;
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NestEntitySerializer } from "../../../../base";
|
|
2
2
|
import { EntitySerializerSheetDefinition } from "../../../../../../abstractions";
|
|
3
3
|
import { AppUserEntity } from "../../database/core/entities/appUser.entity";
|
|
4
|
-
export declare class AppUserSerializer extends NestEntitySerializer<AppUserEntity> {
|
|
4
|
+
export declare class AppUserSerializer extends NestEntitySerializer<AppUserEntity, string> {
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<AppUserEntity>;
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManagerRegistry, EntitySerializerSheetDefinition, NestEntitySerializer } from "../../../../../..";
|
|
2
2
|
import { FooEntity } from "../../database/core/entities/foo.entity";
|
|
3
|
-
export declare class FooSerializer extends NestEntitySerializer<FooEntity> {
|
|
3
|
+
export declare class FooSerializer extends NestEntitySerializer<FooEntity, string> {
|
|
4
4
|
constructor(registry: EntityManagerRegistry);
|
|
5
5
|
protected getDefinition(): EntitySerializerSheetDefinition<FooEntity>;
|
|
6
6
|
}
|
|
@@ -3,7 +3,7 @@ import { IEntitiesDeleteParameters } from "../../../abstractions/commands";
|
|
|
3
3
|
import { EntityServiceLocator } from "../../../providers/services";
|
|
4
4
|
import { EntityManagerRegistry } from "../ioc";
|
|
5
5
|
export declare abstract class NestEntityActions<TEntity, TEntityId, TEntityCreateDto, TEntityUpdateDto, TEntityDto, TEntityListItemDto, TEntitiesDeleteParameters extends IEntitiesDeleteParameters<TSorting>, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor, TFacets extends IEntityFacets> {
|
|
6
|
-
protected readonly services: EntityServiceLocator<TEntity,
|
|
6
|
+
protected readonly services: EntityServiceLocator<TEntity, unknown>;
|
|
7
7
|
private actionsInstance;
|
|
8
8
|
constructor(entityName: string, registry: EntityManagerRegistry);
|
|
9
9
|
get manager(): IEntityActions<TEntity, TEntityId, TEntityCreateDto, TEntityUpdateDto, TEntityDto, TEntityListItemDto, TEntitiesDeleteParameters, TEntitySearchParameters, TSorting, TCursor, TFacets>;
|
|
@@ -3,7 +3,7 @@ import { IEntitiesDeleteParameters } from "../../../abstractions/commands";
|
|
|
3
3
|
import { EntityServiceLocator } from "../../../providers/services";
|
|
4
4
|
import { EntityManagerRegistry } from "../ioc/registry";
|
|
5
5
|
export declare abstract class NestEntityManager<TEntity, TEntityId, TEntityCreateData, TEntityUpdateData, TEntitiesDeleteParameters extends IEntitiesDeleteParameters<TSorting>, TEntitySearchParameters extends IEntitySearchParameters<TSorting, TCursor>, TSorting extends SortingType, TCursor, TFacets extends IEntityFacets> {
|
|
6
|
-
protected readonly services: EntityServiceLocator<TEntity,
|
|
6
|
+
protected readonly services: EntityServiceLocator<TEntity, unknown>;
|
|
7
7
|
private managerInstance;
|
|
8
8
|
constructor(entityName: string, registry: EntityManagerRegistry);
|
|
9
9
|
get manager(): IEntityManager<TEntity, TEntityId, TEntityCreateData, TEntityUpdateData, TEntitiesDeleteParameters, TEntitySearchParameters, TSorting, TCursor, TFacets>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EntitySerializer } from "../../../base/serializer";
|
|
2
2
|
import { EntityServiceLocator } from "../../../providers/services";
|
|
3
3
|
import { EntityManagerRegistry } from "../ioc";
|
|
4
|
-
export declare abstract class NestEntitySerializer<TEntity> extends EntitySerializer<TEntity> {
|
|
4
|
+
export declare abstract class NestEntitySerializer<TEntity, TEntityId> extends EntitySerializer<TEntity, TEntityId> {
|
|
5
5
|
protected readonly services: EntityServiceLocator<TEntity, unknown>;
|
|
6
6
|
constructor(entityName: string, registry: EntityManagerRegistry);
|
|
7
7
|
}
|
|
@@ -31,7 +31,7 @@ export declare class EntityServiceLocator<TEntity, TEntityId> {
|
|
|
31
31
|
resolveConnectorDeleteManager<TEntityId>(): IEntityConnectorDeleteManager<TEntity, TEntityId>;
|
|
32
32
|
resolveConnectorsConfiguration(): IConnectorsConfiguration<TEntity>;
|
|
33
33
|
resolveConverter<TEntityDto, TListItemDto, TEntityCreateDto, TEntityUpdateDto>(): IEntityConverter<TEntity, TEntityDto, TListItemDto, TEntityCreateDto, TEntityUpdateDto> | undefined;
|
|
34
|
-
resolveSerializer(): IEntitySerializer<TEntity>;
|
|
34
|
+
resolveSerializer(): IEntitySerializer<TEntity, TEntityId>;
|
|
35
35
|
resolveAdapter<TEntityCreateData, TEntityUpdateData>(): IEntityAdapter<TEntity, TEntityCreateData, TEntityUpdateData> | undefined;
|
|
36
36
|
resolveAuthorizationMiddleware<TAuthenticationContext extends IAuthenticationContext<TUserContext>, TUserContext>(): IEntityAuthorizationMiddleware<TEntity, TAuthenticationContext, TUserContext> | undefined;
|
|
37
37
|
resolveGetQuery<TEntityId>(): IEntityGetQuery<TEntity, TEntityId>;
|
|
@@ -103,8 +103,8 @@ export declare class EntitiesServiceLocator {
|
|
|
103
103
|
resolveAdapter<TEntity, TEntityCreateData, TEntityUpdateData>(entityName: string): IEntityAdapter<TEntity, TEntityCreateData, TEntityUpdateData> | undefined;
|
|
104
104
|
registerConverter<TEntity, TEntityDto, TListItemDto, TEntityCreateDto, TEntityUpdateDto>(entityName: string, instance: IEntityConverter<TEntity, TEntityDto, TListItemDto, TEntityCreateDto, TEntityUpdateDto>): void;
|
|
105
105
|
resolveConverter<TEntity, TEntityDto, TListItemDto, TEntityCreateDto, TEntityUpdateDto>(entityName: string): IEntityConverter<TEntity, TEntityDto, TListItemDto, TEntityCreateDto, TEntityUpdateDto> | undefined;
|
|
106
|
-
registerSerializer<TEntity>(entityName: string, instance: IEntitySerializer<TEntity>): void;
|
|
107
|
-
resolveSerializer<TEntity>(entityName: string): IEntitySerializer<TEntity>;
|
|
106
|
+
registerSerializer<TEntity, TEntityId>(entityName: string, instance: IEntitySerializer<TEntity, TEntityId>): void;
|
|
107
|
+
resolveSerializer<TEntity, TEntityId>(entityName: string): IEntitySerializer<TEntity, TEntityId>;
|
|
108
108
|
resolveAuthorizationMiddleware<TEntity, TAuthenticationContext extends IAuthenticationContext<TUserContext>, TUserContext>(entityName: string): IEntityAuthorizationMiddleware<TEntity, TAuthenticationContext, TUserContext> | undefined;
|
|
109
109
|
registerAuthorizationMiddleware<TEntity, TAuthenticationContext extends IAuthenticationContext<TUserContext>, TUserContext>(entityName: string, instance: IEntityAuthorizationMiddleware<TEntity, TAuthenticationContext, TUserContext>): void;
|
|
110
110
|
resolveGetQuery<TEntity, TEntityId>(entityName: string): IEntityGetQuery<TEntity, TEntityId>;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Log, excelBuild, csvBuild, isNullOrUndefined, sort, byField, toDict, newUuid as newUuid$1, ensureTailingSlash, removeUndefinedProps } from '@punks/backend-core';
|
|
1
|
+
import { Log, csvParse, excelParse, excelBuild, csvBuild, isNullOrUndefined, sort, byField, toDict, newUuid as newUuid$1, ensureTailingSlash, removeUndefinedProps } from '@punks/backend-core';
|
|
2
2
|
import { applyDecorators, Injectable, SetMetadata, Global, Module, Scope, Logger, StreamableFile, HttpException, HttpStatus } from '@nestjs/common';
|
|
3
3
|
import { ApiProperty } from '@nestjs/swagger';
|
|
4
4
|
import { Reflector } from '@nestjs/core';
|
|
@@ -120,12 +120,47 @@ class EntitySeeder {
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
const DEFAULT_DELIMITER = ";";
|
|
123
124
|
class EntitySerializer {
|
|
124
125
|
constructor(entityName) {
|
|
125
126
|
this.entityName = entityName;
|
|
126
127
|
}
|
|
127
128
|
async parse(data, format) {
|
|
128
|
-
|
|
129
|
+
switch (format) {
|
|
130
|
+
case EntitySerializationFormat.Csv:
|
|
131
|
+
return this.parseCsv(data);
|
|
132
|
+
case EntitySerializationFormat.Xlsx:
|
|
133
|
+
return this.parseXlsx(data);
|
|
134
|
+
default:
|
|
135
|
+
throw new Error(`Format ${format} not supported`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
parseCsv(data) {
|
|
139
|
+
const records = csvParse(data, DEFAULT_DELIMITER);
|
|
140
|
+
return records.map((x) => this.convertSheetRecord(x));
|
|
141
|
+
}
|
|
142
|
+
parseXlsx(data) {
|
|
143
|
+
const records = excelParse(data);
|
|
144
|
+
return records.map((x) => this.convertSheetRecord(x));
|
|
145
|
+
}
|
|
146
|
+
convertSheetRecord(record) {
|
|
147
|
+
if (!record._type || record._type !== this.entityName) {
|
|
148
|
+
throw new Error(`Invalid record type ${record._type}`);
|
|
149
|
+
}
|
|
150
|
+
const definition = this.getDefinition();
|
|
151
|
+
const entity = {};
|
|
152
|
+
for (const column of definition.columns) {
|
|
153
|
+
entity[column.selector] = this.parseColumnValue(record, column);
|
|
154
|
+
}
|
|
155
|
+
const idField = definition.columns.find((x) => x.idColumn || x.selector === "id");
|
|
156
|
+
return {
|
|
157
|
+
id: idField ? entity[idField.selector] : undefined,
|
|
158
|
+
item: entity,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
parseColumnValue(row, definition) {
|
|
162
|
+
const rawValue = row[definition.name];
|
|
163
|
+
return definition.parser ? definition.parser(rawValue) : rawValue;
|
|
129
164
|
}
|
|
130
165
|
async createSample(format) {
|
|
131
166
|
return await this.buildSampleFile(format);
|
|
@@ -149,7 +184,9 @@ class EntitySerializer {
|
|
|
149
184
|
name: c.name,
|
|
150
185
|
value: () => c.sampleValue ?? "",
|
|
151
186
|
})),
|
|
152
|
-
]
|
|
187
|
+
], {
|
|
188
|
+
delimiter: DEFAULT_DELIMITER,
|
|
189
|
+
}), "utf-8"),
|
|
153
190
|
};
|
|
154
191
|
case EntitySerializationFormat.Xlsx:
|
|
155
192
|
return {
|
|
@@ -188,10 +225,18 @@ class EntitySerializer {
|
|
|
188
225
|
return {
|
|
189
226
|
fileName,
|
|
190
227
|
contentType: "text/csv",
|
|
191
|
-
content: Buffer.from(csvBuild(data,
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
228
|
+
content: Buffer.from(csvBuild(data, [
|
|
229
|
+
{
|
|
230
|
+
name: "_type",
|
|
231
|
+
value: () => this.entityName,
|
|
232
|
+
},
|
|
233
|
+
...this.getDefinition().columns.map((c) => ({
|
|
234
|
+
name: c.name,
|
|
235
|
+
value: (item) => this.getColumnValue(item, c),
|
|
236
|
+
})),
|
|
237
|
+
], {
|
|
238
|
+
delimiter: DEFAULT_DELIMITER,
|
|
239
|
+
}), "utf-8"),
|
|
195
240
|
};
|
|
196
241
|
case EntitySerializationFormat.Xlsx:
|
|
197
242
|
return {
|
|
@@ -200,11 +245,17 @@ class EntitySerializer {
|
|
|
200
245
|
content: Buffer.from(excelBuild({
|
|
201
246
|
data,
|
|
202
247
|
sheetName: this.entityName,
|
|
203
|
-
columns:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
248
|
+
columns: [
|
|
249
|
+
{
|
|
250
|
+
header: "_type",
|
|
251
|
+
value: () => this.entityName,
|
|
252
|
+
},
|
|
253
|
+
...this.getDefinition().columns.map((c) => ({
|
|
254
|
+
header: c.name,
|
|
255
|
+
value: (item) => this.getColumnValue(item, c),
|
|
256
|
+
headerSize: c.colSpan,
|
|
257
|
+
})),
|
|
258
|
+
],
|
|
208
259
|
})),
|
|
209
260
|
};
|
|
210
261
|
case EntitySerializationFormat.Json:
|
|
@@ -943,8 +994,52 @@ class EntitiesImportCommand {
|
|
|
943
994
|
this.services = services;
|
|
944
995
|
this.settings = settings;
|
|
945
996
|
}
|
|
946
|
-
execute(input) {
|
|
947
|
-
|
|
997
|
+
async execute(input) {
|
|
998
|
+
await this.uploadImportFile({
|
|
999
|
+
content: input.content,
|
|
1000
|
+
contentType: input.contentType,
|
|
1001
|
+
fileName: input.fileName,
|
|
1002
|
+
});
|
|
1003
|
+
const importEntities = await this.parseImportFile(input.content, input.format);
|
|
1004
|
+
for (const entry of importEntities) {
|
|
1005
|
+
await this.importEntity(entry);
|
|
1006
|
+
}
|
|
1007
|
+
return {
|
|
1008
|
+
statistics: {
|
|
1009
|
+
importedCount: importEntities.length,
|
|
1010
|
+
createdCount: 0,
|
|
1011
|
+
unchangedCount: 0,
|
|
1012
|
+
updatedCount: 0,
|
|
1013
|
+
},
|
|
1014
|
+
};
|
|
1015
|
+
}
|
|
1016
|
+
async importEntity(entry) {
|
|
1017
|
+
try {
|
|
1018
|
+
if (!entry.id) {
|
|
1019
|
+
return this.services.resolveCreateCommand().execute(entry.item);
|
|
1020
|
+
}
|
|
1021
|
+
return this.services.resolveUpsertCommand().execute(entry.id, entry.item);
|
|
1022
|
+
}
|
|
1023
|
+
catch (error) {
|
|
1024
|
+
throw new Error(`Error importing entry with id ${entry.id}`);
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
async parseImportFile(content, format) {
|
|
1028
|
+
return await this.services.resolveSerializer().parse(content, format);
|
|
1029
|
+
}
|
|
1030
|
+
async uploadImportFile(file) {
|
|
1031
|
+
await this.bucket.fileUpload({
|
|
1032
|
+
bucket: this.settings.exportBucket.bucket,
|
|
1033
|
+
filePath: this.buildAbsoluteBucketPath(file.fileName),
|
|
1034
|
+
content: file.content,
|
|
1035
|
+
contentType: file.contentType,
|
|
1036
|
+
});
|
|
1037
|
+
}
|
|
1038
|
+
buildAbsoluteBucketPath(relativePath) {
|
|
1039
|
+
return `${this.settings.exportBucket.rootFolderPath ?? ""}/imports/${createDayPath(new Date())}/${relativePath}`;
|
|
1040
|
+
}
|
|
1041
|
+
get bucket() {
|
|
1042
|
+
return this.services.getRootServices().resolveBucketProvider();
|
|
948
1043
|
}
|
|
949
1044
|
}
|
|
950
1045
|
|