-
Notifications
You must be signed in to change notification settings - Fork 528
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #6954 from ever-co/feat/add-language-migration
Feat/Add language migration
- Loading branch information
Showing
2 changed files
with
99 additions
and
0 deletions.
There are no files selected for viewing
24 changes: 24 additions & 0 deletions
24
packages/core/src/database/migrations/1696704276300-AddLanguage.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import { MigrationInterface, QueryRunner } from 'typeorm'; | ||
import { LanguageUtils } from '../../language/language-utils'; | ||
import * as chalk from "chalk"; | ||
|
||
export class AddLanguage1696704276300 implements MigrationInterface { | ||
name = 'AddLanguage1696704276300'; | ||
|
||
/** | ||
* Up Migration | ||
* | ||
* @param queryRunner | ||
*/ | ||
public async up(queryRunner: QueryRunner): Promise<any> { | ||
console.log(chalk.yellow(`AddLanguage1696704276300 start running!`)); | ||
await LanguageUtils.migrateLanguages(queryRunner); | ||
} | ||
|
||
/** | ||
* Down Migration | ||
* | ||
* @param queryRunner | ||
*/ | ||
public async down(queryRunner: QueryRunner): Promise<any> {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
import { QueryRunner } from 'typeorm'; | ||
import { ILanguage, LanguagesEnum } from '@gauzy/contracts'; | ||
import allLanguages from './all-languages'; | ||
import { Language } from './language.entity'; | ||
import { faker } from '@faker-js/faker'; | ||
import { v4 as uuidV4 } from 'uuid'; | ||
|
||
export class LanguageUtils { | ||
private static async addLanguages( | ||
queryRunner: QueryRunner, | ||
languages: ILanguage[] | ||
): Promise<void> { | ||
for await (const language of languages) { | ||
const { name, code, is_system, description, color } = language; | ||
const payload = [name, code, is_system, description, color]; | ||
let insertOrUpdateQuery = ''; | ||
if ( | ||
['sqlite', 'better-sqlite3'].includes( | ||
queryRunner.connection.options.type | ||
) | ||
) { | ||
payload.push(uuidV4()); | ||
insertOrUpdateQuery = ` | ||
INSERT INTO language (name, code, is_system, description, color, id) | ||
VALUES ($1, $2, $3, $4, $5, $6) | ||
ON CONFLICT (code) | ||
DO UPDATE SET | ||
name = EXCLUDED.name, | ||
is_system = EXCLUDED.is_system, | ||
description = EXCLUDED.description, | ||
color = EXCLUDED.color; | ||
`; | ||
} else { | ||
insertOrUpdateQuery = ` | ||
INSERT INTO language (name, code, is_system, description, color) | ||
VALUES ($1, $2, $3, $4, $5) | ||
ON CONFLICT (code) | ||
DO UPDATE SET | ||
name = EXCLUDED.name, | ||
is_system = EXCLUDED.is_system, | ||
description = EXCLUDED.description, | ||
color = EXCLUDED.color; | ||
`; | ||
} | ||
await queryRunner.connection.manager.query( | ||
insertOrUpdateQuery, | ||
payload | ||
); | ||
} | ||
} | ||
|
||
public static get registeredLanguages(): ILanguage[] { | ||
const systemLanguages: string[] = Object.values(LanguagesEnum); | ||
const languages: ILanguage[] = []; | ||
for (const key in allLanguages) { | ||
if (Object.prototype.hasOwnProperty.call(allLanguages, key)) { | ||
const { name, nativeName } = allLanguages[key]; | ||
const language = new Language(); | ||
language.name = name; | ||
language.code = key; | ||
language.is_system = systemLanguages.indexOf(key) >= 0; | ||
language.description = nativeName; | ||
language.color = faker.internet.color(); | ||
languages.push(language); | ||
} | ||
} | ||
return languages; | ||
} | ||
|
||
public static async migrateLanguages( | ||
queryRunner: QueryRunner | ||
): Promise<void> { | ||
await this.addLanguages(queryRunner, this.registeredLanguages); | ||
} | ||
} |