-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathDatabaseNamingStrategy.ts
39 lines (31 loc) · 1.62 KB
/
DatabaseNamingStrategy.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { DefaultNamingStrategy, NamingStrategyInterface, Table } from 'typeorm';
export default class DatabaseNamingStrategy extends DefaultNamingStrategy implements NamingStrategyInterface {
private getTableName(tableOrName: Table | string): string {
return tableOrName instanceof Table ? tableOrName.name : tableOrName;
}
private joinColumns(columnNames: string[]): string {
return columnNames.join('_');
}
primaryKeyName(tableOrName: Table | string, columnNames: string[]): string {
return `PK_${this.getTableName(tableOrName)}_${this.joinColumns(columnNames)}`;
}
foreignKeyName(
referencingTableOrName: Table | string,
referencingColumnNames: string[],
referencedTablePath?: string,
referencedColumnNames?: string[],
): string {
const referencingTableName = this.getTableName(referencingTableOrName);
const referencingReferencedGroup = referencingColumnNames.map((referencingColumn, index) => {
return `${referencingTableName}_${referencingColumn}_${referencedTablePath}_${referencedColumnNames[index]}`;
});
return `FK_${referencingReferencedGroup.join('_')}`;
}
indexName(tableOrName: Table | string, columnNames: string[] /* , where?: string */): string {
// TODO think about the naming strategy with the WHERE clause
return `IDX_${this.getTableName(tableOrName)}_${this.joinColumns(columnNames)}`;
}
uniqueConstraintName(tableOrName: Table | string, columnNames: string[]): string {
return `UQ_${this.getTableName(tableOrName)}_${this.joinColumns(columnNames)}`;
}
}