Skip to content

Commit 1a82a41

Browse files
authored
refactor(backend): get column names from metadata (#13943)
* ci: enable * chore: stop when generated column found * chore: get column names from metadata * ci: disable
1 parent 9bddb81 commit 1a82a41

File tree

1 file changed

+5
-25
lines changed
  • packages/backend/src/models

1 file changed

+5
-25
lines changed

packages/backend/src/models/_.ts

+5-25
Original file line numberDiff line numberDiff line change
@@ -82,42 +82,22 @@ import { MiReversiGame } from '@/models/ReversiGame.js';
8282
import type { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity.js';
8383

8484
export interface MiRepository<T extends ObjectLiteral> {
85-
createTableColumnNames(this: Repository<T> & MiRepository<T>, queryBuilder: InsertQueryBuilder<T>): string[];
86-
createTableColumnNamesWithPrimaryKey(this: Repository<T> & MiRepository<T>, queryBuilder: InsertQueryBuilder<T>): string[];
85+
createTableColumnNames(this: Repository<T> & MiRepository<T>): string[];
8786
insertOne(this: Repository<T> & MiRepository<T>, entity: QueryDeepPartialEntity<T>, findOptions?: Pick<FindOneOptions<T>, 'relations'>): Promise<T>;
8887
selectAliasColumnNames(this: Repository<T> & MiRepository<T>, queryBuilder: InsertQueryBuilder<T>, builder: SelectQueryBuilder<T>): void;
8988
}
9089

9190
export const miRepository = {
92-
createTableColumnNames(queryBuilder) {
93-
// @ts-expect-error -- protected
94-
const insertedColumns = queryBuilder.getInsertedColumns();
95-
if (insertedColumns.length) {
96-
return insertedColumns.map(column => column.databaseName);
97-
}
98-
if (!queryBuilder.expressionMap.mainAlias?.hasMetadata && !queryBuilder.expressionMap.insertColumns.length) {
99-
// @ts-expect-error -- protected
100-
const valueSets = queryBuilder.getValueSets();
101-
if (valueSets.length === 1) {
102-
return Object.keys(valueSets[0]);
103-
}
104-
}
105-
return queryBuilder.expressionMap.insertColumns;
106-
},
107-
createTableColumnNamesWithPrimaryKey(queryBuilder) {
108-
const columnNames = this.createTableColumnNames(queryBuilder);
109-
if (!columnNames.includes('id')) {
110-
columnNames.unshift('id');
111-
}
112-
return columnNames;
91+
createTableColumnNames() {
92+
return this.metadata.columns.filter(column => column.isSelect && !column.isVirtual).map(column => column.databaseName);
11393
},
11494
async insertOne(entity, findOptions?) {
11595
const queryBuilder = this.createQueryBuilder().insert().values(entity);
11696
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
11797
const mainAlias = queryBuilder.expressionMap.mainAlias!;
11898
const name = mainAlias.name;
11999
mainAlias.name = 't';
120-
const columnNames = this.createTableColumnNamesWithPrimaryKey(queryBuilder);
100+
const columnNames = this.createTableColumnNames();
121101
queryBuilder.returning(columnNames.reduce((a, c) => `${a}, ${queryBuilder.escape(c)}`, '').slice(2));
122102
const builder = this.createQueryBuilder().addCommonTableExpression(queryBuilder, 'cte', { columnNames });
123103
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -138,7 +118,7 @@ export const miRepository = {
138118
selectOrAddSelect = (selection, selectionAliasName) => builder.addSelect(selection, selectionAliasName);
139119
return builder.select(selection, selectionAliasName);
140120
};
141-
for (const columnName of this.createTableColumnNamesWithPrimaryKey(queryBuilder)) {
121+
for (const columnName of this.createTableColumnNames()) {
142122
selectOrAddSelect(`${builder.alias}.${columnName}`, `${builder.alias}_${columnName}`);
143123
}
144124
},

0 commit comments

Comments
 (0)