Skip to content

Commit

Permalink
Merge pull request #6954 from ever-co/feat/add-language-migration
Browse files Browse the repository at this point in the history
Feat/Add language migration
  • Loading branch information
evereq authored Oct 8, 2023
2 parents f95f240 + eee09f1 commit 7523ffa
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 0 deletions.
24 changes: 24 additions & 0 deletions packages/core/src/database/migrations/1696704276300-AddLanguage.ts
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> {}
}
75 changes: 75 additions & 0 deletions packages/core/src/language/language-utils.ts
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);
}
}

0 comments on commit 7523ffa

Please sign in to comment.