* Add metadata migration setup * add migration generator * fix missing 'mocks' --------- Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
|
|
import { EntitySchema } from 'typeorm';
|
|
|
|
import { ObjectMetadataService } from 'src/tenant/metadata/object-metadata/object-metadata.service';
|
|
|
|
import { baseColumns } from './base.entity';
|
|
import {
|
|
convertFieldTypeToPostgresType,
|
|
sanitizeColumnName,
|
|
} from './entity-schema-generator.util';
|
|
|
|
@Injectable()
|
|
export class EntitySchemaGeneratorService {
|
|
constructor(private readonly objectMetadataService: ObjectMetadataService) {}
|
|
|
|
async getTypeORMEntitiesByDataSourceId(dataSourceId: string) {
|
|
const objectMetadata =
|
|
await this.objectMetadataService.getObjectMetadataFromDataSourceId(
|
|
dataSourceId,
|
|
);
|
|
|
|
const entities = objectMetadata.map((object) => {
|
|
return new EntitySchema({
|
|
name: object.targetTableName,
|
|
columns: {
|
|
...baseColumns,
|
|
...object.fields.reduce((columns, field) => {
|
|
return {
|
|
...columns,
|
|
[sanitizeColumnName(field.targetColumnName)]: {
|
|
type: convertFieldTypeToPostgresType(field.type),
|
|
nullable: true,
|
|
},
|
|
};
|
|
}, {}),
|
|
},
|
|
});
|
|
});
|
|
|
|
return entities;
|
|
}
|
|
}
|