From 3bb8b6fc69846da11015d9f25118e358ea8780e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Wed, 29 May 2024 16:51:33 +0900 Subject: [PATCH] fix(backend): position --- packages/backend/src/models/_.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/backend/src/models/_.ts b/packages/backend/src/models/_.ts index cdeb957caa..825ce790f0 100644 --- a/packages/backend/src/models/_.ts +++ b/packages/backend/src/models/_.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -import { FindOneOptions, InsertQueryBuilder, ObjectLiteral, Repository } from 'typeorm'; +import { FindOneOptions, InsertQueryBuilder, ObjectLiteral, Repository, SelectQueryBuilder } from 'typeorm'; import { MiAbuseUserReport } from '@/models/AbuseUserReport.js'; import { MiAccessToken } from '@/models/AccessToken.js'; import { MiAd } from '@/models/Ad.js'; @@ -74,16 +74,12 @@ import { MiReversiGame } from '@/models/ReversiGame.js'; import type { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity.js'; export interface MiRepository { - createAliasColumnNames(this: Repository & MiRepository, queryBuilder: InsertQueryBuilder): string[]; createTableColumnNames(this: Repository & MiRepository, queryBuilder: InsertQueryBuilder): string[]; insertOne(this: Repository & MiRepository, entity: QueryDeepPartialEntity, findOptions?: Pick, 'relations'>): Promise; + selectAliasColumnNames(this: Repository & MiRepository, queryBuilder: InsertQueryBuilder, builder: SelectQueryBuilder): void; } export const miRepository = { - createAliasColumnNames(queryBuilder) { - const tableColumnNames = this.createTableColumnNames(queryBuilder); - return tableColumnNames.map(columnName => `${queryBuilder.alias}_${columnName}`); - }, createTableColumnNames(queryBuilder) { // @ts-expect-error -- protected const insertedColumns = queryBuilder.getInsertedColumns(); @@ -101,18 +97,28 @@ export const miRepository = { }, async insertOne(entity, findOptions?) { const queryBuilder = this.createQueryBuilder().insert().values(entity).returning('*'); - const columnNames = this.createAliasColumnNames(queryBuilder); + const columnNames = this.createTableColumnNames(queryBuilder); const builder = this.createQueryBuilder() .addCommonTableExpression(queryBuilder, this.metadata.tableName, { columnNames }) .select('*') .from(this.metadata.tableName, this.metadata.tableName); builder.expressionMap.aliases.splice(1, 1); + this.selectAliasColumnNames(queryBuilder, builder); console.log(builder.getQueryAndParameters()); if (findOptions) { return await builder.setFindOptions(findOptions).getOneOrFail(); } return await builder.getOneOrFail(); }, + selectAliasColumnNames(queryBuilder, builder) { + let selectOrAddSelect = (selection: string, selectionAliasName?: string) => { + selectOrAddSelect = (selection, selectionAliasName) => builder.addSelect(selection, selectionAliasName); + return builder.select(selection, selectionAliasName); + }; + for (const columnName of this.createTableColumnNames(queryBuilder)) { + selectOrAddSelect(columnName, `${queryBuilder.alias}_${columnName}`); + } + }, } satisfies MiRepository; export {