import { IKeyGenParams } from '@antjs/ant-js/src/model/IKeyGenParams'; import * as crypto from 'crypto'; import { AntSqlModel } from '../../model/AntSqlModel'; import { AutoGeneratedStrategyMode } from '../../model/AutoGenerationStrategyMode'; import { IAntSQLColumn } from '../../model/IAntSQLColumn'; import { IAntSqlModel } from '../../model/IAntSqlModel'; const tableNameGenerator = (baseAlias: string) => 't_' + crypto .createHash('md5') .update(baseAlias) .digest('hex'); export const modelGenerator = ( keyGen: IKeyGenParams, additionalColumns?: string[], autoGeneratedColumn?: string, ): IAntSqlModel => { const idColumn: IAntSQLColumn = { entityAlias: 'id', sqlName: 'id' }; if (idColumn.entityAlias === autoGeneratedColumn) { idColumn.autoGenerationStrategy = AutoGeneratedStrategyMode.AutoIncrement; } const columnsArgs: IAntSQLColumn[] = [idColumn]; if (additionalColumns) { for (const column of additionalColumns) { if (column === autoGeneratedColumn) { columnsArgs.push({ autoGenerationStrategy: AutoGeneratedStrategyMode.AutoIncrement, entityAlias: column, sqlName: column, }); } else { columnsArgs.push({ entityAlias: column, sqlName: column }); } } } return new AntSqlModel( 'id', keyGen, columnsArgs, (keyGen.prefix ? tableNameGenerator(keyGen.prefix) : '') + (keyGen.prefix && keyGen.suffix ? '_' : '') + (keyGen.suffix ? tableNameGenerator(keyGen.suffix) : ''), ); };