@punks/backend-entity-manager 0.0.92 → 0.0.94
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 +88 -5
- 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 +6 -1
- 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 +89 -6
- 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 +6 -1
- 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 +26 -12
- package/package.json +3 -3
package/dist/cjs/index.js
CHANGED
|
@@ -128,12 +128,47 @@ class EntitySeeder {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
const DEFAULT_DELIMITER = ";";
|
|
131
132
|
class EntitySerializer {
|
|
132
133
|
constructor(entityName) {
|
|
133
134
|
this.entityName = entityName;
|
|
134
135
|
}
|
|
135
136
|
async parse(data, format) {
|
|
136
|
-
|
|
137
|
+
switch (format) {
|
|
138
|
+
case exports.EntitySerializationFormat.Csv:
|
|
139
|
+
return this.parseCsv(data);
|
|
140
|
+
case exports.EntitySerializationFormat.Xlsx:
|
|
141
|
+
return this.parseXlsx(data);
|
|
142
|
+
default:
|
|
143
|
+
throw new Error(`Format ${format} not supported`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
parseCsv(data) {
|
|
147
|
+
const records = backendCore.csvParse(data, DEFAULT_DELIMITER);
|
|
148
|
+
return records.map((x) => this.convertSheetRecord(x));
|
|
149
|
+
}
|
|
150
|
+
parseXlsx(data) {
|
|
151
|
+
const records = backendCore.excelParse(data);
|
|
152
|
+
return records.map((x) => this.convertSheetRecord(x));
|
|
153
|
+
}
|
|
154
|
+
convertSheetRecord(record) {
|
|
155
|
+
if (!record._type || record._type !== this.entityName) {
|
|
156
|
+
throw new Error(`Invalid record type ${record._type}`);
|
|
157
|
+
}
|
|
158
|
+
const definition = this.getDefinition();
|
|
159
|
+
const entity = {};
|
|
160
|
+
for (const column of definition.columns) {
|
|
161
|
+
entity[column.selector] = this.parseColumnValue(record, column);
|
|
162
|
+
}
|
|
163
|
+
const idField = definition.columns.find((x) => x.idColumn || x.selector === "id");
|
|
164
|
+
return {
|
|
165
|
+
id: idField ? entity[idField.selector] : undefined,
|
|
166
|
+
item: entity,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
parseColumnValue(row, definition) {
|
|
170
|
+
const rawValue = row[definition.name];
|
|
171
|
+
return definition.parser ? definition.parser(rawValue) : rawValue;
|
|
137
172
|
}
|
|
138
173
|
async createSample(format) {
|
|
139
174
|
return await this.buildSampleFile(format);
|
|
@@ -157,7 +192,9 @@ class EntitySerializer {
|
|
|
157
192
|
name: c.name,
|
|
158
193
|
value: () => c.sampleValue ?? "",
|
|
159
194
|
})),
|
|
160
|
-
]
|
|
195
|
+
], {
|
|
196
|
+
delimiter: DEFAULT_DELIMITER,
|
|
197
|
+
}), "utf-8"),
|
|
161
198
|
};
|
|
162
199
|
case exports.EntitySerializationFormat.Xlsx:
|
|
163
200
|
return {
|
|
@@ -205,7 +242,9 @@ class EntitySerializer {
|
|
|
205
242
|
name: c.name,
|
|
206
243
|
value: (item) => this.getColumnValue(item, c),
|
|
207
244
|
})),
|
|
208
|
-
]
|
|
245
|
+
], {
|
|
246
|
+
delimiter: DEFAULT_DELIMITER,
|
|
247
|
+
}), "utf-8"),
|
|
209
248
|
};
|
|
210
249
|
case exports.EntitySerializationFormat.Xlsx:
|
|
211
250
|
return {
|
|
@@ -963,8 +1002,52 @@ class EntitiesImportCommand {
|
|
|
963
1002
|
this.services = services;
|
|
964
1003
|
this.settings = settings;
|
|
965
1004
|
}
|
|
966
|
-
execute(input) {
|
|
967
|
-
|
|
1005
|
+
async execute(input) {
|
|
1006
|
+
await this.uploadImportFile({
|
|
1007
|
+
content: input.file.content,
|
|
1008
|
+
contentType: input.file.contentType,
|
|
1009
|
+
fileName: input.file.fileName,
|
|
1010
|
+
});
|
|
1011
|
+
const importEntities = await this.parseImportFile(input.file.content, input.format);
|
|
1012
|
+
for (const entry of importEntities) {
|
|
1013
|
+
await this.importEntity(entry);
|
|
1014
|
+
}
|
|
1015
|
+
return {
|
|
1016
|
+
statistics: {
|
|
1017
|
+
importedCount: importEntities.length,
|
|
1018
|
+
createdCount: 0,
|
|
1019
|
+
unchangedCount: 0,
|
|
1020
|
+
updatedCount: 0,
|
|
1021
|
+
},
|
|
1022
|
+
};
|
|
1023
|
+
}
|
|
1024
|
+
async importEntity(entry) {
|
|
1025
|
+
try {
|
|
1026
|
+
if (!entry.id) {
|
|
1027
|
+
return this.services.resolveCreateCommand().execute(entry.item);
|
|
1028
|
+
}
|
|
1029
|
+
return this.services.resolveUpsertCommand().execute(entry.id, entry.item);
|
|
1030
|
+
}
|
|
1031
|
+
catch (error) {
|
|
1032
|
+
throw new Error(`Error importing entry with id ${entry.id}`);
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
async parseImportFile(content, format) {
|
|
1036
|
+
return await this.services.resolveSerializer().parse(content, format);
|
|
1037
|
+
}
|
|
1038
|
+
async uploadImportFile(file) {
|
|
1039
|
+
await this.bucket.fileUpload({
|
|
1040
|
+
bucket: this.settings.exportBucket.bucket,
|
|
1041
|
+
filePath: this.buildAbsoluteBucketPath(file.fileName),
|
|
1042
|
+
content: file.content,
|
|
1043
|
+
contentType: file.contentType,
|
|
1044
|
+
});
|
|
1045
|
+
}
|
|
1046
|
+
buildAbsoluteBucketPath(relativePath) {
|
|
1047
|
+
return `${this.settings.exportBucket.rootFolderPath ?? ""}/imports/${createDayPath(new Date())}/${relativePath}`;
|
|
1048
|
+
}
|
|
1049
|
+
get bucket() {
|
|
1050
|
+
return this.services.getRootServices().resolveBucketProvider();
|
|
968
1051
|
}
|
|
969
1052
|
}
|
|
970
1053
|
|