@things-factory/i18n-base 7.0.1-alpha.47 → 7.0.1-alpha.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,29 @@
1
+ module.exports = {
2
+ i18n: {
3
+ languages: [
4
+ {
5
+ code: 'en-US',
6
+ display: 'English'
7
+ },
8
+ {
9
+ code: 'ko-KR',
10
+ display: '한국어'
11
+ },
12
+ {
13
+ code: 'zh-CN',
14
+ display: '中文'
15
+ },
16
+ {
17
+ code: 'ja-JP',
18
+ display: 'にほんご'
19
+ },
20
+ {
21
+ code: 'ms-MY',
22
+ display: 'Bahasa Malaysia'
23
+ }
24
+ ],
25
+ defaultLanguage: 'en-US',
26
+ disableUserFavoredLanguage: false,
27
+ disableCustomTerminologyFeature: false
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ module.exports = {
2
+ i18n: {
3
+ languages: [
4
+ {
5
+ code: 'en-US',
6
+ display: 'English'
7
+ },
8
+ {
9
+ code: 'ko-KR',
10
+ display: '한국어'
11
+ },
12
+ {
13
+ code: 'zh-CN',
14
+ display: '中文'
15
+ },
16
+ {
17
+ code: 'ja-JP',
18
+ display: 'にほんご'
19
+ },
20
+ {
21
+ code: 'ms-MY',
22
+ display: 'Bahasa Malaysia'
23
+ }
24
+ ],
25
+ defaultLanguage: 'en-US',
26
+ disableUserFavoredLanguage: false,
27
+ disableCustomTerminologyFeature: false
28
+ }
29
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearTranslationCacheForCertainDomain = void 0;
4
+ const env_1 = require("@things-factory/env");
5
+ const disableCustomTerminologyFeature = env_1.config.get('i18n/disableCustomTerminologyFeature');
6
+ const path = require('path');
7
+ var fs = require('fs');
8
+ function clearTranslationCacheForCertainDomain(subdomain) {
9
+ if (disableCustomTerminologyFeature) {
10
+ return;
11
+ }
12
+ const cacheFileFolder = path.join('cache', 'translations', subdomain);
13
+ if (fs.existsSync(cacheFileFolder)) {
14
+ fs.rmdirSync(cacheFileFolder, { recursive: true });
15
+ }
16
+ }
17
+ exports.clearTranslationCacheForCertainDomain = clearTranslationCacheForCertainDomain;
18
+ //# sourceMappingURL=clear-cache-for-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-cache-for-translation.js","sourceRoot":"","sources":["../../server/controllers/clear-cache-for-translation.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,MAAM,+BAA+B,GAAG,YAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;AAE1F,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEtB,SAAgB,qCAAqC,CAAC,SAAiB;IACrE,IAAI,+BAA+B,EAAE;QACnC,OAAM;KACP;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,CAAA;IAErE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;QAClC,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;KACnD;AACH,CAAC;AAVD,sFAUC","sourcesContent":["import { config } from '@things-factory/env'\n\nconst disableCustomTerminologyFeature = config.get('i18n/disableCustomTerminologyFeature')\n\nconst path = require('path')\nvar fs = require('fs')\n\nexport function clearTranslationCacheForCertainDomain(subdomain: string) {\n if (disableCustomTerminologyFeature) {\n return\n }\n\n const cacheFileFolder = path.join('cache', 'translations', subdomain)\n\n if (fs.existsSync(cacheFileFolder)) {\n fs.rmdirSync(cacheFileFolder, { recursive: true })\n }\n}\n"]}
@@ -4,8 +4,11 @@ const tslib_1 = require("tslib");
4
4
  const i18next_1 = tslib_1.__importDefault(require("i18next"));
5
5
  const typeorm_1 = require("typeorm");
6
6
  const shell_1 = require("@things-factory/shell");
7
+ const env_1 = require("@things-factory/env");
8
+ const disableCustomTerminologyFeature = env_1.config.get('i18n/disableCustomTerminologyFeature');
7
9
  const terminology_1 = require("./service/terminology/terminology");
8
10
  const path = require('path');
11
+ const cacheFS = require('fs');
9
12
  var fs = require('fs');
10
13
  process.on('client-rebuilt', (app, compilerFileSystem) => {
11
14
  /* change filesystem whenever webpacking assets done. only for development mode. */
@@ -24,28 +27,50 @@ process.on('bootstrap-module-global-public-route', (app, globalPublicRouter) =>
24
27
  });
25
28
  });
26
29
  process.on('bootstrap-module-domain-public-route', (app, domainPublicRouter) => {
27
- domainPublicRouter.get('/domain/:domain/translations/:filename', async (context, next) => {
28
- const { filename } = context.params;
30
+ domainPublicRouter.get('/domain/:subdomain/translations/:filename', async (context, next) => {
31
+ const { subdomain, filename } = context.params;
29
32
  const { domain } = context.state;
33
+ const locale = (filename || 'en.json').split('.')[0];
30
34
  // context.set('Cache-Control', 'public, max-age=31536000') // 캐시 기간 설정 : 1년
31
35
  // context.set('Expires', new Date(Date.now() + 31536000000).toUTCString()) // 캐시 만료일 설정
32
- const locale = (filename || 'en.json').split('.')[0];
33
- const file = fs.readFileSync(path.resolve(path.join('dist-app', 'translations', filename)));
34
- const terminologies = await (0, shell_1.getRepository)(terminology_1.Terminology).find({
35
- where: { domain: { id: domain.id }, locale: (0, typeorm_1.ILike)(locale + '%') }
36
- });
37
- try {
38
- const json = JSON.parse(file);
39
- terminologies.forEach(term => {
40
- const { name, category, display } = term;
41
- json[`${category}.${name}`] = display;
42
- });
36
+ if (disableCustomTerminologyFeature) {
37
+ var file = fs.readFileSync(path.resolve(path.join('dist-app', 'translations', filename)));
43
38
  context.type = 'application/json';
44
- context.body = json;
39
+ context.body = file;
45
40
  return;
46
41
  }
47
- catch (err) {
48
- console.error(err);
42
+ const cacheFileFolder = path.join('cache', 'translations', subdomain);
43
+ const cacheFilePath = path.join(cacheFileFolder, filename);
44
+ if (cacheFS.existsSync(cacheFilePath)) {
45
+ var file = cacheFS.readFileSync(cacheFilePath);
46
+ }
47
+ else {
48
+ var file = fs.readFileSync(path.resolve(path.join('dist-app', 'translations', filename)));
49
+ try {
50
+ const terminologies = await (0, shell_1.getRepository)(terminology_1.Terminology).find({
51
+ where: { domain: { id: domain.id }, locale: (0, typeorm_1.ILike)(locale + '%') }
52
+ });
53
+ const json = JSON.parse(file);
54
+ terminologies.forEach(term => {
55
+ const { name, category, display } = term;
56
+ json[`${category}.${name}`] = display;
57
+ });
58
+ try {
59
+ if (!cacheFS.existsSync(cacheFileFolder)) {
60
+ cacheFS.mkdirSync(cacheFileFolder, { recursive: true });
61
+ }
62
+ cacheFS.writeFileSync(cacheFilePath, JSON.stringify(json));
63
+ }
64
+ catch (err) {
65
+ console.error(err);
66
+ }
67
+ context.type = 'application/json';
68
+ context.body = json;
69
+ return;
70
+ }
71
+ catch (err) {
72
+ console.error(err);
73
+ }
49
74
  }
50
75
  context.type = 'application/json';
51
76
  context.body = file;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import i18next from 'i18next'\nimport { ILike } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { Terminology } from './service/terminology/terminology'\n\nconst path = require('path')\nvar fs = require('fs')\n\nprocess.on('client-rebuilt' as any, (app, compilerFileSystem) => {\n /* change filesystem whenever webpacking assets done. only for development mode. */\n fs = compilerFileSystem\n})\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n globalPublicRouter.get('/translations/translate/:lng/:key', async (context, next) => {\n const { lng, key } = context.params\n const translated = i18next.getFixedT(lng, 'translations' /* ns */)(key)\n\n context.body = translated\n })\n\n globalPublicRouter.get('/translations/translate/:key', async (context, next) => {\n const { key } = context.params\n const translated = context.t(key)\n\n context.body = translated\n })\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n domainPublicRouter.get('/domain/:domain/translations/:filename', async (context, next) => {\n const { filename } = context.params\n const { domain } = context.state\n\n // context.set('Cache-Control', 'public, max-age=31536000') // 캐시 기간 설정 : 1년\n // context.set('Expires', new Date(Date.now() + 31536000000).toUTCString()) // 캐시 만료일 설정\n\n const locale = (filename || 'en.json').split('.')[0]\n const file = fs.readFileSync(path.resolve(path.join('dist-app', 'translations', filename)))\n\n const terminologies = await getRepository(Terminology).find({\n where: { domain: { id: domain.id }, locale: ILike(locale + '%') }\n })\n\n try {\n const json = JSON.parse(file)\n\n terminologies.forEach(term => {\n const { name, category, display } = term\n json[`${category}.${name}`] = display\n })\n\n context.type = 'application/json'\n context.body = json\n\n return\n } catch (err) {\n console.error(err)\n }\n\n context.type = 'application/json'\n context.body = file\n })\n})\n"]}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import i18next from 'i18next'\nimport { ILike } from 'typeorm'\n\nimport { getRepository } from '@things-factory/shell'\nimport { config } from '@things-factory/env'\n\nconst disableCustomTerminologyFeature = config.get('i18n/disableCustomTerminologyFeature')\n\nimport { Terminology } from './service/terminology/terminology'\n\nconst path = require('path')\nconst cacheFS = require('fs')\nvar fs = require('fs')\n\nprocess.on('client-rebuilt' as any, (app, compilerFileSystem) => {\n /* change filesystem whenever webpacking assets done. only for development mode. */\n fs = compilerFileSystem\n})\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n globalPublicRouter.get('/translations/translate/:lng/:key', async (context, next) => {\n const { lng, key } = context.params\n const translated = i18next.getFixedT(lng, 'translations' /* ns */)(key)\n\n context.body = translated\n })\n\n globalPublicRouter.get('/translations/translate/:key', async (context, next) => {\n const { key } = context.params\n const translated = context.t(key)\n\n context.body = translated\n })\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n domainPublicRouter.get('/domain/:subdomain/translations/:filename', async (context, next) => {\n const { subdomain, filename } = context.params\n const { domain } = context.state\n\n const locale = (filename || 'en.json').split('.')[0]\n\n // context.set('Cache-Control', 'public, max-age=31536000') // 캐시 기간 설정 : 1년\n // context.set('Expires', new Date(Date.now() + 31536000000).toUTCString()) // 캐시 만료일 설정\n\n if (disableCustomTerminologyFeature) {\n var file = fs.readFileSync(path.resolve(path.join('dist-app', 'translations', filename)))\n\n context.type = 'application/json'\n context.body = file\n return\n }\n\n const cacheFileFolder = path.join('cache', 'translations', subdomain)\n const cacheFilePath = path.join(cacheFileFolder, filename)\n\n if (cacheFS.existsSync(cacheFilePath)) {\n var file = cacheFS.readFileSync(cacheFilePath)\n } else {\n var file = fs.readFileSync(path.resolve(path.join('dist-app', 'translations', filename)))\n\n try {\n const terminologies = await getRepository(Terminology).find({\n where: { domain: { id: domain.id }, locale: ILike(locale + '%') }\n })\n\n const json = JSON.parse(file)\n\n terminologies.forEach(term => {\n const { name, category, display } = term\n json[`${category}.${name}`] = display\n })\n\n try {\n if (!cacheFS.existsSync(cacheFileFolder)) {\n cacheFS.mkdirSync(cacheFileFolder, { recursive: true })\n }\n\n cacheFS.writeFileSync(cacheFilePath, JSON.stringify(json))\n } catch (err) {\n console.error(err)\n }\n\n context.type = 'application/json'\n context.body = json\n\n return\n } catch (err) {\n console.error(err)\n }\n }\n\n context.type = 'application/json'\n context.body = file\n })\n})\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TerminologySubscriber = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const terminology_1 = require("./terminology");
7
+ const clear_cache_for_translation_1 = require("../../controllers/clear-cache-for-translation");
8
+ function clearCache(subdomain) {
9
+ try {
10
+ (0, clear_cache_for_translation_1.clearTranslationCacheForCertainDomain)(subdomain);
11
+ }
12
+ catch (err) {
13
+ console.error('Failed to delete the translations cache directory:', err);
14
+ }
15
+ }
16
+ let TerminologySubscriber = class TerminologySubscriber {
17
+ listenTo() {
18
+ return terminology_1.Terminology;
19
+ }
20
+ async afterInsert(event) {
21
+ const { entity: terminology, manager: tx } = event;
22
+ clearCache(terminology.domain.subdomain);
23
+ }
24
+ async afterUpdate(event) {
25
+ const { entity: terminology, manager: tx } = event;
26
+ clearCache(terminology.domain.subdomain);
27
+ }
28
+ };
29
+ TerminologySubscriber = tslib_1.__decorate([
30
+ (0, typeorm_1.EventSubscriber)()
31
+ ], TerminologySubscriber);
32
+ exports.TerminologySubscriber = TerminologySubscriber;
33
+ //# sourceMappingURL=event-subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-subscriber.js","sourceRoot":"","sources":["../../../server/service/terminology/event-subscriber.ts"],"names":[],"mappings":";;;;AAAA,qCAA8F;AAE9F,+CAA2C;AAE3C,+FAAqG;AAErG,SAAS,UAAU,CAAC,SAAiB;IACnC,IAAI;QACF,IAAA,mEAAqC,EAAC,SAAS,CAAC,CAAA;KACjD;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,GAAG,CAAC,CAAA;KACzE;AACH,CAAC;AAGM,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,QAAQ;QACN,OAAO,yBAAW,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAA+B;QAC/C,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,KAAK,CAAA;QAElD,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAA+B;QAC/C,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,KAAK,CAAA;QAElD,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC1C,CAAC;CACF,CAAA;AAhBY,qBAAqB;IADjC,IAAA,yBAAe,GAAE;GACL,qBAAqB,CAgBjC;AAhBY,sDAAqB","sourcesContent":["import { EventSubscriber, EntitySubscriberInterface, InsertEvent, UpdateEvent } from 'typeorm'\n\nimport { Terminology } from './terminology'\n\nimport { clearTranslationCacheForCertainDomain } from '../../controllers/clear-cache-for-translation'\n\nfunction clearCache(subdomain: string) {\n try {\n clearTranslationCacheForCertainDomain(subdomain)\n } catch (err) {\n console.error('Failed to delete the translations cache directory:', err)\n }\n}\n\n@EventSubscriber()\nexport class TerminologySubscriber implements EntitySubscriberInterface<Terminology> {\n listenTo() {\n return Terminology\n }\n\n async afterInsert(event: InsertEvent<Terminology>): Promise<any | void> {\n const { entity: terminology, manager: tx } = event\n\n clearCache(terminology.domain.subdomain)\n }\n\n async afterUpdate(event: UpdateEvent<Terminology>): Promise<any | void> {\n const { entity: terminology, manager: tx } = event\n\n clearCache(terminology.domain.subdomain)\n }\n}\n"]}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = exports.entities = void 0;
3
+ exports.subscribers = exports.resolvers = exports.entities = void 0;
4
4
  const terminology_1 = require("./terminology");
5
5
  const terminology_query_1 = require("./terminology-query");
6
6
  const terminology_mutation_1 = require("./terminology-mutation");
7
+ const event_subscriber_1 = require("./event-subscriber");
7
8
  exports.entities = [terminology_1.Terminology];
8
9
  exports.resolvers = [terminology_query_1.TerminologyQuery, terminology_mutation_1.TerminologyMutation];
10
+ exports.subscribers = [event_subscriber_1.TerminologySubscriber];
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/terminology/index.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAC3C,2DAAsD;AACtD,iEAA4D;AAE/C,QAAA,QAAQ,GAAG,CAAC,yBAAW,CAAC,CAAA;AACxB,QAAA,SAAS,GAAG,CAAC,oCAAgB,EAAE,0CAAmB,CAAC,CAAA","sourcesContent":["import { Terminology } from './terminology'\nimport { TerminologyQuery } from './terminology-query'\nimport { TerminologyMutation } from './terminology-mutation'\n\nexport const entities = [Terminology]\nexport const resolvers = [TerminologyQuery, TerminologyMutation]\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/terminology/index.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAC3C,2DAAsD;AACtD,iEAA4D;AAC5D,yDAA0D;AAE7C,QAAA,QAAQ,GAAG,CAAC,yBAAW,CAAC,CAAA;AACxB,QAAA,SAAS,GAAG,CAAC,oCAAgB,EAAE,0CAAmB,CAAC,CAAA;AACnD,QAAA,WAAW,GAAG,CAAC,wCAAqB,CAAC,CAAA","sourcesContent":["import { Terminology } from './terminology'\nimport { TerminologyQuery } from './terminology-query'\nimport { TerminologyMutation } from './terminology-mutation'\nimport { TerminologySubscriber } from './event-subscriber'\n\nexport const entities = [Terminology]\nexport const resolvers = [TerminologyQuery, TerminologyMutation]\nexport const subscribers = [TerminologySubscriber]\n"]}
@@ -6,6 +6,7 @@ const type_graphql_1 = require("type-graphql");
6
6
  const typeorm_1 = require("typeorm");
7
7
  const terminology_1 = require("./terminology");
8
8
  const terminology_type_1 = require("./terminology-type");
9
+ const clear_cache_for_translation_1 = require("../../controllers/clear-cache-for-translation");
9
10
  let TerminologyMutation = class TerminologyMutation {
10
11
  async createTerminology(terminology, context) {
11
12
  const { domain, user, tx } = context.state;
@@ -42,6 +43,11 @@ let TerminologyMutation = class TerminologyMutation {
42
43
  }
43
44
  return results;
44
45
  }
46
+ async clearTranslationsCache(context) {
47
+ const { domain, tx } = context.state;
48
+ (0, clear_cache_for_translation_1.clearTranslationCacheForCertainDomain)(domain.subdomain);
49
+ return true;
50
+ }
45
51
  async deleteTerminology(id, context) {
46
52
  const { domain, tx } = context.state;
47
53
  await tx.getRepository(terminology_1.Terminology).delete({ domain: { id: domain.id }, id });
@@ -91,6 +97,14 @@ tslib_1.__decorate([
91
97
  tslib_1.__metadata("design:paramtypes", [Array, Object]),
92
98
  tslib_1.__metadata("design:returntype", Promise)
93
99
  ], TerminologyMutation.prototype, "updateMultipleTerminologies", null);
100
+ tslib_1.__decorate([
101
+ (0, type_graphql_1.Directive)('@transaction'),
102
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To clear translations cache' }),
103
+ tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
104
+ tslib_1.__metadata("design:type", Function),
105
+ tslib_1.__metadata("design:paramtypes", [Object]),
106
+ tslib_1.__metadata("design:returntype", Promise)
107
+ ], TerminologyMutation.prototype, "clearTranslationsCache", null);
94
108
  tslib_1.__decorate([
95
109
  (0, type_graphql_1.Directive)('@transaction'),
96
110
  (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete Terminology' }),
@@ -1 +1 @@
1
- {"version":3,"file":"terminology-mutation.js","sourceRoot":"","sources":["../../../server/service/terminology/terminology-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { Terminology } from './terminology'\nimport { NewTerminology, TerminologyPatch } from './terminology-type'\n\n@Resolver(Terminology)\nexport class TerminologyMutation {\n @Directive('@transaction')\n @Mutation(returns => Terminology, { description: 'To create new Terminology' })\n async createTerminology(@Arg('terminology') terminology: NewTerminology, @Ctx() context: any): Promise<Terminology> {\n const { domain, user, tx } = context.state\n\n return await tx.getRepository(Terminology).save({\n ...terminology,\n domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Terminology, { description: 'To modify Terminology information' })\n async updateTerminology(\n @Arg('id') id: string,\n @Arg('patch') patch: TerminologyPatch,\n @Ctx() context: any\n ): Promise<Terminology> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(Terminology)\n const terminology = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n return await repository.save({\n ...terminology,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Terminology], { description: \"To modify multiple Terminologies' information\" })\n async updateMultipleTerminologies(\n @Arg('patches', type => [TerminologyPatch]) patches: TerminologyPatch[],\n @Ctx() context: any\n ): Promise<Terminology[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const terminologyRepo = tx.getRepository(Terminology)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await terminologyRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const terminology = await terminologyRepo.findOneBy({ id: newRecord.id })\n\n const result = await terminologyRepo.save({\n ...terminology,\n ...newRecord,\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete Terminology' })\n async deleteTerminology(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Terminology).delete({ domain: { id: domain.id }, id })\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple Terminologies' })\n async deleteTerminologies(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Terminology).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To import multiple Terminologies' })\n async importTerminologies(\n @Arg('terminologies', type => [TerminologyPatch]) terminologies: TerminologyPatch[],\n @Ctx() context: any\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n terminologies.map(async (terminology: TerminologyPatch) => {\n const createdTerminology: Terminology = await tx.getRepository(Terminology).save({ domain, ...terminology })\n })\n )\n\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"terminology-mutation.js","sourceRoot":"","sources":["../../../server/service/terminology/terminology-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { Terminology } from './terminology'\nimport { NewTerminology, TerminologyPatch } from './terminology-type'\n\nimport { clearTranslationCacheForCertainDomain } from '../../controllers/clear-cache-for-translation'\n\n@Resolver(Terminology)\nexport class TerminologyMutation {\n @Directive('@transaction')\n @Mutation(returns => Terminology, { description: 'To create new Terminology' })\n async createTerminology(@Arg('terminology') terminology: NewTerminology, @Ctx() context: any): Promise<Terminology> {\n const { domain, user, tx } = context.state\n\n return await tx.getRepository(Terminology).save({\n ...terminology,\n domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Terminology, { description: 'To modify Terminology information' })\n async updateTerminology(@Arg('id') id: string, @Arg('patch') patch: TerminologyPatch, @Ctx() context: any): Promise<Terminology> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(Terminology)\n const terminology = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n return await repository.save({\n ...terminology,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => [Terminology], { description: \"To modify multiple Terminologies' information\" })\n async updateMultipleTerminologies(@Arg('patches', type => [TerminologyPatch]) patches: TerminologyPatch[], @Ctx() context: any): Promise<Terminology[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const terminologyRepo = tx.getRepository(Terminology)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await terminologyRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const terminology = await terminologyRepo.findOneBy({ id: newRecord.id })\n\n const result = await terminologyRepo.save({\n ...terminology,\n ...newRecord,\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To clear translations cache' })\n async clearTranslationsCache(@Ctx() context: any): Promise<boolean> {\n const { domain, tx } = context.state\n\n clearTranslationCacheForCertainDomain(domain.subdomain)\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete Terminology' })\n async deleteTerminology(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Terminology).delete({ domain: { id: domain.id }, id })\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple Terminologies' })\n async deleteTerminologies(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Terminology).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To import multiple Terminologies' })\n async importTerminologies(@Arg('terminologies', type => [TerminologyPatch]) terminologies: TerminologyPatch[], @Ctx() context: any): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n terminologies.map(async (terminology: TerminologyPatch) => {\n const createdTerminology: Terminology = await tx.getRepository(Terminology).save({ domain, ...terminology })\n })\n )\n\n return true\n }\n}\n"]}