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});
|
||||
`;
|
||||
|
||||
const res = await this.cachedRaw(query)
|
||||
.cache(MINUTE)
|
||||
.then((data) => data.rows);
|
||||
const res = await this.knex.raw(query).then((data) => data.rows);
|
||||
|
||||
if (!res.length) {
|
||||
throw new UserInputError('No articles found');
|
||||
|
||||
@@ -14,9 +14,13 @@ export class TextsAPI extends SQLDataSource {
|
||||
this.marketLocaleApi = marketLocaleApi;
|
||||
}
|
||||
|
||||
async translateProductName(name: string, oldPath, newPath): Promise<void> {
|
||||
// Check if we have an entry already
|
||||
const textKey = await this.upsertTextId(newPath, oldPath);
|
||||
async translateProductName(
|
||||
name: string,
|
||||
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();
|
||||
for (let i = 0; i < locales.length; i++) {
|
||||
@@ -31,7 +35,7 @@ export class TextsAPI extends SQLDataSource {
|
||||
};
|
||||
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 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
|
||||
.select('*')
|
||||
.from('i18n-texts')
|
||||
.where({ name: oldKey })
|
||||
.where({ name: oldKey, category: 'productTitles' })
|
||||
.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;
|
||||
// No entry, create one
|
||||
if (!textId) {
|
||||
@@ -99,8 +114,8 @@ export class TextsAPI extends SQLDataSource {
|
||||
await this.knex
|
||||
.table('i18n-texts')
|
||||
.update({ name: newKey })
|
||||
.where({ name: oldKey });
|
||||
.where({ name: oldKey, category: 'productTitles' });
|
||||
}
|
||||
return textEntry;
|
||||
return textEntry.textid;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user