Fix the dup key issue on i18n name (#85)
This commit is contained in:
@@ -828,9 +828,7 @@ export class ProductAPI extends BaseSQLDataSource {
|
|||||||
WHERE ppf.value IN (${whereClause});
|
WHERE ppf.value IN (${whereClause});
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const res = await this.cachedRaw(query)
|
const res = await this.knex.raw(query).then((data) => data.rows);
|
||||||
.cache(MINUTE)
|
|
||||||
.then((data) => data.rows);
|
|
||||||
|
|
||||||
if (!res.length) {
|
if (!res.length) {
|
||||||
throw new UserInputError('No articles found');
|
throw new UserInputError('No articles found');
|
||||||
|
|||||||
@@ -14,9 +14,13 @@ export class TextsAPI extends SQLDataSource {
|
|||||||
this.marketLocaleApi = marketLocaleApi;
|
this.marketLocaleApi = marketLocaleApi;
|
||||||
}
|
}
|
||||||
|
|
||||||
async translateProductName(name: string, oldPath, newPath): Promise<void> {
|
async translateProductName(
|
||||||
// Check if we have an entry already
|
name: string,
|
||||||
const textKey = await this.upsertTextId(newPath, oldPath);
|
oldPath: string,
|
||||||
|
newPath: string,
|
||||||
|
): Promise<void> {
|
||||||
|
// Check if we have an entry already, if so update it
|
||||||
|
const textId = await this.upsertTextId(newPath, oldPath);
|
||||||
|
|
||||||
const locales = await this.marketLocaleApi.getLocales();
|
const locales = await this.marketLocaleApi.getLocales();
|
||||||
for (let i = 0; i < locales.length; i++) {
|
for (let i = 0; i < locales.length; i++) {
|
||||||
@@ -31,7 +35,7 @@ export class TextsAPI extends SQLDataSource {
|
|||||||
};
|
};
|
||||||
const translated = await translateText(input);
|
const translated = await translateText(input);
|
||||||
|
|
||||||
await this.upsertTextDataEntry(textKey.textid, translated, locales[i].id);
|
await this.upsertTextDataEntry(textId, translated, locales[i].id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,17 +77,28 @@ export class TextsAPI extends SQLDataSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upsert translated entry to the i18n-texts table
|
* Upsert translated entry to the i18n-texts table returning the entry (textId)
|
||||||
* @param newKey the new name of the text key
|
* @param newKey the new name of the text key
|
||||||
* @param localeId the old name of the text key
|
* @param localeId the old name of the text key
|
||||||
*/
|
*/
|
||||||
private async upsertTextId(newKey: string, oldKey: string) {
|
private async upsertTextId(newKey: string, oldKey: string): Promise<number> {
|
||||||
let textEntry = await this.knex
|
let textEntry = await this.knex
|
||||||
.select('*')
|
.select('*')
|
||||||
.from('i18n-texts')
|
.from('i18n-texts')
|
||||||
.where({ name: oldKey })
|
.where({ name: oldKey, category: 'productTitles' })
|
||||||
.first();
|
.first();
|
||||||
|
|
||||||
|
const textNewEntry = await this.knex
|
||||||
|
.select('*')
|
||||||
|
.from('i18n-texts')
|
||||||
|
.where({ name: newKey, category: 'productTitles' })
|
||||||
|
.first();
|
||||||
|
|
||||||
|
// New key did exist, which is kind of wrong but return it for updating the name
|
||||||
|
if (textNewEntry?.textid) {
|
||||||
|
return textNewEntry.textid;
|
||||||
|
}
|
||||||
|
|
||||||
let textId = textEntry?.textid;
|
let textId = textEntry?.textid;
|
||||||
// No entry, create one
|
// No entry, create one
|
||||||
if (!textId) {
|
if (!textId) {
|
||||||
@@ -99,8 +114,8 @@ export class TextsAPI extends SQLDataSource {
|
|||||||
await this.knex
|
await this.knex
|
||||||
.table('i18n-texts')
|
.table('i18n-texts')
|
||||||
.update({ name: newKey })
|
.update({ name: newKey })
|
||||||
.where({ name: oldKey });
|
.where({ name: oldKey, category: 'productTitles' });
|
||||||
}
|
}
|
||||||
return textEntry;
|
return textEntry.textid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -15,7 +15,7 @@ import { MarketLocaleAPI } from './datasources/market-locale-api';
|
|||||||
import { ImageServerApi } from './datasources/imageserver-api';
|
import { ImageServerApi } from './datasources/imageserver-api';
|
||||||
import { InteriorAPI } from './datasources/interior-api';
|
import { InteriorAPI } from './datasources/interior-api';
|
||||||
|
|
||||||
import { ClaimVerifyResult, verifyToken } from './cognito/cognito-client';
|
import { verifyToken } from './cognito/cognito-client';
|
||||||
import { readFileSync } from 'fs';
|
import { readFileSync } from 'fs';
|
||||||
import { InteriorsLambdaAPI } from './datasources/interiors-lambda-api';
|
import { InteriorsLambdaAPI } from './datasources/interiors-lambda-api';
|
||||||
import { TextsAPI } from './datasources/texts-api';
|
import { TextsAPI } from './datasources/texts-api';
|
||||||
@@ -24,7 +24,7 @@ const typeDefs = readFileSync(
|
|||||||
path.join(__dirname, './schema.graphql'),
|
path.join(__dirname, './schema.graphql'),
|
||||||
).toString('utf-8');
|
).toString('utf-8');
|
||||||
|
|
||||||
// Should we convert columns?
|
// Converts column names to CamelCase
|
||||||
const knexConfig = knexStringcase(dbConfig);
|
const knexConfig = knexStringcase(dbConfig);
|
||||||
|
|
||||||
// set up any dataSources our resolvers need
|
// set up any dataSources our resolvers need
|
||||||
|
|||||||
Reference in New Issue
Block a user