From 102ff614f69ecd1e9075353f7c9a497d0563000d Mon Sep 17 00:00:00 2001 From: Kononnable Date: Tue, 8 Oct 2019 20:35:07 +0200 Subject: [PATCH] one more test --- src/Engine.ts | 4 +-- src/NamingStrategy.ts | 26 ++++------------- src/Utils.ts | 11 +++++-- src/entity.mst | 2 +- .../github-issues/58/entity/feedextrainfo.ts | 29 ++++++++++--------- .../github-issues/58/entity/quests.ts | 4 +-- .../github-issues/58/entity/users.ts | 6 ++-- 7 files changed, 38 insertions(+), 44 deletions(-) diff --git a/src/Engine.ts b/src/Engine.ts index 6bcc3fa..98f25be 100644 --- a/src/Engine.ts +++ b/src/Engine.ts @@ -516,8 +516,8 @@ function applyNamingStrategy( oldName ); entity.indices.forEach(index => { - index.columns.map(column2 => - column2 === column.tscName ? newName : column2 + index.columns = index.columns.map(column2 => + column2 === oldName ? newName : column2 ); }); diff --git a/src/NamingStrategy.ts b/src/NamingStrategy.ts index ae089cb..13678ec 100644 --- a/src/NamingStrategy.ts +++ b/src/NamingStrategy.ts @@ -1,6 +1,7 @@ import AbstractNamingStrategy from "./AbstractNamingStrategy"; import { Relation } from "./models/Relation"; import { Entity } from "./models/Entity"; +import { findNameForNewField } from "./Utils"; import changeCase = require("change-case"); @@ -8,10 +9,13 @@ import changeCase = require("change-case"); export default class NamingStrategy extends AbstractNamingStrategy { public relationName(relation: Relation, owner: Entity): string { const columnOldName = relation.fieldName; + const isRelationToMany = relation.relationType === "OneToMany" || relation.relationType === "ManyToMany"; - let columnName = changeCase.camelCase(columnOldName); + let columnName = changeCase.camelCase( + columnOldName.replace(/[0-9]$/, "") + ); if ( columnName.toLowerCase().endsWith("id") && @@ -34,25 +38,7 @@ export default class NamingStrategy extends AbstractNamingStrategy { relation.relationType !== "ManyToMany" && columnOldName !== columnName ) { - if (owner.columns.some(v => v.tscName === columnName)) { - columnName += "_"; - for (let i = 2; i <= owner.columns.length; i++) { - columnName = - columnName.substring( - 0, - columnName.length - i.toString().length - ) + i.toString(); - if ( - owner.columns.every( - v => - v.tscName !== columnName || - columnName === columnOldName - ) - ) { - break; - } - } - } + columnName = findNameForNewField(columnName, owner, columnOldName); } return columnName; diff --git a/src/Utils.ts b/src/Utils.ts index 525f287..eae30f5 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -32,9 +32,14 @@ export function findNameForNewField( ) { let fieldName = _fieldName; const validNameCondition = () => - (entity.columns.every(v => v.tscName !== fieldName) && - entity.relations.every(v => v.fieldName !== fieldName)) || - (columnOldName && columnOldName === fieldName); + (entity.columns.every( + v => v.tscName.toLowerCase() !== fieldName.toLowerCase() + ) && + entity.relations.every( + v => v.fieldName.toLowerCase() !== fieldName.toLowerCase() + )) || + (columnOldName && + columnOldName.toLowerCase() === fieldName.toLowerCase()); if (!validNameCondition()) { fieldName += "_"; for ( diff --git a/src/entity.mst b/src/entity.mst index b196fea..8114e10 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -1,5 +1,5 @@ {{#*inline "Index"}} -@Index("{{name}}",[{{#columns}}"{{.}}",{{/columns~}}],{ {{json options}} }) +@Index("{{name}}",[{{#columns}}"{{toPropertyName .}}",{{/columns~}}],{ {{json options}} }) {{/inline}} {{#*inline "Import"}} import { {{toEntityName .}} } from './{{toFileName .}}' diff --git a/test/integration/github-issues/58/entity/feedextrainfo.ts b/test/integration/github-issues/58/entity/feedextrainfo.ts index 02f141c..2f822dd 100644 --- a/test/integration/github-issues/58/entity/feedextrainfo.ts +++ b/test/integration/github-issues/58/entity/feedextrainfo.ts @@ -18,26 +18,29 @@ import { quests } from "./quests"; @Index("feedExtraInfo_ReaderId_idx", ["readerId"], { unique: true }) @Index("feedExtraInfo_QuestId_idx", ["questId"], { unique: true }) export class feedextrainfo { - @OneToOne(type => users, FeedOwnerId => FeedOwnerId.feedextrainfo, { - primary: true - }) + @PrimaryColumn({ name: "FeedOwnerId" }) + feedOwnerId: number; + + @PrimaryColumn({ name: "QuestId" }) + questId: number; + + @PrimaryColumn({ name: "ReaderId" }) + readerId: number; + + @OneToOne(type => users, FeedOwnerId => FeedOwnerId.feedextrainfo) @JoinColumn({ name: "FeedOwnerId" }) - feedOwnerId: users; + feedOwner: users; - @OneToOne(type => quests, QuestId => QuestId.feedextrainfo, { - primary: true - }) + @OneToOne(type => quests, QuestId => QuestId.feedextrainfo) @JoinColumn({ name: "QuestId" }) - questId: quests; + quest: quests; - @OneToOne(type => users, ReaderId => ReaderId.feedextrainfo2, { - primary: true - }) + @OneToOne(type => users, ReaderId => ReaderId.feedextrainfo2) @JoinColumn({ name: "ReaderId" }) - readerId: users; + reader: users; @Column("int", { name: "MostUpdatedFeedEntryIdUserRead" }) - MostUpdatedFeedEntryIdUserRead: number; + mostUpdatedFeedEntryIdUserRead: number; } diff --git a/test/integration/github-issues/58/entity/quests.ts b/test/integration/github-issues/58/entity/quests.ts index 6c8e0bc..681c603 100644 --- a/test/integration/github-issues/58/entity/quests.ts +++ b/test/integration/github-issues/58/entity/quests.ts @@ -18,8 +18,8 @@ export class quests { primary: true, name: "QuestId" }) - QuestId: number; + questId: number; - @OneToOne(type => feedextrainfo, feedextrainfo => feedextrainfo.questId) + @OneToOne(type => feedextrainfo, feedextrainfo => feedextrainfo.quest) feedextrainfo: feedextrainfo; } diff --git a/test/integration/github-issues/58/entity/users.ts b/test/integration/github-issues/58/entity/users.ts index fe57631..6ae9e82 100644 --- a/test/integration/github-issues/58/entity/users.ts +++ b/test/integration/github-issues/58/entity/users.ts @@ -18,11 +18,11 @@ export class users { primary: true, name: "UserId" }) - UserId: number; + userId: number; - @OneToOne(type => feedextrainfo, feedextrainfo => feedextrainfo.feedOwnerId) + @OneToOne(type => feedextrainfo, feedextrainfo => feedextrainfo.feedOwner) feedextrainfo: feedextrainfo; - @OneToOne(type => feedextrainfo, feedextrainfo2 => feedextrainfo2.readerId) + @OneToOne(type => feedextrainfo, feedextrainfo2 => feedextrainfo2.reader) feedextrainfo2: feedextrainfo; }