@things-factory/operato-tools 7.0.1-beta.9 → 7.0.1-rc.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -76,18 +76,19 @@ class MetaGeneratorPage extends MenuConfigTabMixin(
76
76
  display: flex;
77
77
  }
78
78
  .tab {
79
- background-color: var(--secondary-background-color);
79
+ background-color: var(--md-sys-color-secondary-container);
80
+ color: var(--md-sys-color-on-secondary-container);
80
81
  margin-top: var(--margin-default);
81
82
  padding: var(--padding-narrow) var(--padding-wide) 0 var(--padding-wide);
82
83
  border-radius: 9px 9px 0 0;
83
84
  border-right: 1px solid rgba(0, 0, 0, 0.4);
84
85
  text-transform: capitalize;
85
- color: var(--md-sys-color-on-primary);
86
86
  opacity: 0.7;
87
87
  cursor: pointer;
88
88
  }
89
89
  .tab[activate] {
90
90
  background-color: var(--md-sys-color-primary);
91
+ color: var(--md-sys-color-on-primary);
91
92
  box-shadow: 2px -2px 2px 0px rgba(0, 0, 0, 0.15);
92
93
  opacity: 1;
93
94
  font-weight: bold;
@@ -7,7 +7,6 @@ body {
7
7
  --focus-color: var(--md-sys-color-on-primary);
8
8
  --primary-background-color: var(--md-sys-color-secondary);
9
9
  --secondary-background-color: #283644;
10
- :#f4f7fb;
11
10
  --md-sys-color-on-primary: #fff;
12
11
  --theme-black-color: rgba(0, 0, 0, 0.9);
13
12
 
@@ -15,9 +14,6 @@ body {
15
14
  --primary-text-color: #111;
16
15
  --secondary-text-color: #017e7f;
17
16
 
18
- --opacity-dark-color: rgba(0, 0, 0, 0.4);
19
- --opacity-light-color: rgba(255, 255, 255, 0.8);
20
-
21
17
  /* status color */
22
18
  --status-success-color: #35a24a;
23
19
  --status-warning-color: #ee8d03;
@@ -85,16 +81,6 @@ body {
85
81
  --md-fab-container-color: var(--md-sys-color-primary);
86
82
  --md-fab-icon-color: var(--focus-color);
87
83
 
88
- --md-theme-on-primary: var(--md-sys-color-on-primary);
89
- --md-theme-primary: var(--secondary-text-color);
90
- --md-theme-on-secondary: var(--md-sys-color-on-primary);
91
- --md-theme-secondary: var(--md-sys-color-primary);
92
- --md-button-outline-color: var(--md-sys-color-primary);
93
- --md-danger-button-primary-color: var(--status-danger-color);
94
- --md-danger-button-outline-color: var(--status-danger-color);
95
- --md-button-outline-width: 1px;
96
- --md-button-horizontal-padding: 16px;
97
-
98
84
  /* button style */
99
85
  --button-background-color: #fafbfc;
100
86
  --button-background-focus-color: var(--md-sys-color-primary);
@@ -0,0 +1 @@
1
+ export * from './service';
@@ -0,0 +1,4 @@
1
+ export declare const entities: any[];
2
+ export declare const schema: {
3
+ resolverClasses: (typeof import("./tool-entity/create-menu").OperatoToolCreateMenu | typeof import("./tool-entity/create-service").OperatoToolCreateService)[];
4
+ };
@@ -0,0 +1,36 @@
1
+ import { EntityColumn } from '@things-factory/resource-base';
2
+ export declare class OperatoToolCreateMenu {
3
+ toolCreateMenu(id: string, parent_menu_id: string, context: any): Promise<Boolean>;
4
+ /**
5
+ * 그리드 컬럼
6
+ * @param entityColumns
7
+ */
8
+ createGridColumns(entityColumns: EntityColumn[]): string[];
9
+ /**
10
+ * 검색 컬럼
11
+ * @param entityColumns
12
+ */
13
+ createSearchCols(entityColumns: EntityColumn[]): string[];
14
+ /**
15
+ * 그리드 정렬
16
+ * @param entityColumns
17
+ * @returns
18
+ */
19
+ createSortCols(entityColumns: EntityColumn[]): string[];
20
+ /**
21
+ * 메뉴 데이터 생성
22
+ * @param tx
23
+ * @param domain
24
+ * @param user
25
+ * @param parent_menu_id
26
+ * @param name
27
+ * @param pageTemplate
28
+ */
29
+ createMenuData(tx: any, domain: any, user: any, parent_menu_id: string, name: string, pageTemplate: string): Promise<void>;
30
+ /**
31
+ * json 모델 암호화
32
+ * @param template
33
+ * @returns
34
+ */
35
+ enc(template: string): string;
36
+ }
@@ -220,6 +220,7 @@ let OperatoToolCreateMenu = class OperatoToolCreateMenu {
220
220
  return encResults.join('h1z0q9i9x7q6');
221
221
  }
222
222
  };
223
+ exports.OperatoToolCreateMenu = OperatoToolCreateMenu;
223
224
  tslib_1.__decorate([
224
225
  (0, type_graphql_1.Directive)('@transaction'),
225
226
  (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'Operato Tool Create Menu' }),
@@ -230,10 +231,9 @@ tslib_1.__decorate([
230
231
  tslib_1.__metadata("design:paramtypes", [String, String, Object]),
231
232
  tslib_1.__metadata("design:returntype", Promise)
232
233
  ], OperatoToolCreateMenu.prototype, "toolCreateMenu", null);
233
- OperatoToolCreateMenu = tslib_1.__decorate([
234
+ exports.OperatoToolCreateMenu = OperatoToolCreateMenu = tslib_1.__decorate([
234
235
  (0, type_graphql_1.Resolver)()
235
236
  ], OperatoToolCreateMenu);
236
- exports.OperatoToolCreateMenu = OperatoToolCreateMenu;
237
237
  const modelTemplate = `
238
238
  {
239
239
  "menu": {
@@ -1 +1 @@
1
- {"version":3,"file":"create-menu.js","sourceRoot":"","sources":["../../../server/service/tool-entity/create-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Directive, Resolver } from 'type-graphql'\nimport { Entity, EntityColumn } from '@things-factory/resource-base'\nimport { Menu } from '@things-factory/menu-base'\nconst { camelCase, startCase, snakeCase, kebabCase } = require('lodash')\nconst { plural } = require('pluralize')\nimport crypto from 'crypto'\n\n@Resolver()\nexport class OperatoToolCreateMenu {\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'Operato Tool Create Menu' })\n async toolCreateMenu(@Arg('id') id: string, @Arg('parent_menu_id') parent_menu_id: string, @Ctx() context: any): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n // Entity 조회\n const entity: Entity = await tx.getRepository(Entity).findOne({\n where: {\n domain: { id: domain.id },\n id\n }\n })\n\n // Entity 컬럼 조회\n const entityColumns: EntityColumn[] = await tx.getRepository(EntityColumn).find({\n where: {\n domain: { id: domain.id },\n entity: { id: entity.id }\n }\n })\n\n let { name = '' } = entity || {}\n let serviceName: string = kebabCase(name)\n\n // 이름 치환 (타이틀 , grapql 관련 서비스 )\n let pageTemplate = modelTemplate\n .replace(/{{pascalCase name}}/g, startCase(camelCase(name)).replace(/ /g, ''))\n .replace(/{{camelCase name}}/g, camelCase(name))\n .replace(/{{snakeCase name}}/g, snakeCase(name))\n .replace(/{{pluralPascalCase name}}/g, startCase(camelCase(plural(name))).replace(/ /g, ''))\n .replace(/{{pluralCamelCase name}}/g, camelCase(plural(name)))\n .replace(/{{name}}/g, name)\n\n // 이력조회 버튼 추가\n let historyButton = ''\n if (entity.dataProp == 'JSON') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_json\"\n }\n `\n } else if (entity.dataProp == 'COPY') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_copy\"\n }\n `\n }\n pageTemplate = pageTemplate.replace(/{{HistoryButton}}/g, historyButton)\n\n // 그리드 정렬\n let sortColumns = this.createSortCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SortColumns}}/g, sortColumns.join(','))\n\n // 검색 필드\n let searchColumns = this.createSearchCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SearchColumns}}/g, searchColumns.join(','))\n\n // 그리드 컬럼\n let gridColumns = this.createGridColumns(entityColumns)\n pageTemplate = pageTemplate.replace(/{{GridColumns}}/g, gridColumns.join(','))\n\n // 암호화\n pageTemplate = this.enc(pageTemplate)\n\n // 메뉴 생성\n await this.createMenuData(tx, domain, user, parent_menu_id, serviceName, pageTemplate)\n return true\n }\n\n /**\n * 그리드 컬럼\n * @param entityColumns\n */\n createGridColumns(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.name != 'id' && x.gridRank > 0)\n .sort(function (a, b) {\n return a.gridRank - b.gridRank\n })\n .map(x => {\n let { gridEditor = 'string', name, term, gridWidth = 0, gridAlign = 'left', nullable = false } = x\n if (gridEditor == null) gridEditor = 'string'\n if (gridAlign == null) gridAlign = 'left'\n\n // 생성 자 수정 자 기본 값\n if (name == 'updater_id' || name == 'creator_id') {\n name = name == 'updater_id' ? 'updater' : 'creator'\n return `{\"type\": \"object\",\"name\": \"${name}\",\"header\": \"${name}\",\"width\": 100,\"editable\":false, \"align\": \"center\",\"object_opt\":{\"queryName\":\"users\"}}`\n }\n // 생성 시간 수정 시간 기본 값\n if (name == 'updated_at' || name == 'created_at') {\n return `{\"type\": \"datetime\",\"name\": \"${name == 'updated_at' ? 'updatedAt' : 'createdAt'}\",\"header\": \"${name}\",\"width\": 160,\"editable\":false, \"align\": \"center\"}`\n }\n\n // 읽기 / 숨김 필드는 수정 불가\n let editable = gridEditor == 'readonly' || gridEditor == 'hidden' ? false : true\n // 히든 필드\n let hidden = gridEditor == 'hidden' ? true : false\n if (hidden == true || editable == false) {\n // 히든 필드는 문자열로 변환 숨김\n gridEditor = 'string'\n }\n\n let colTxt = `{\"type\": \"${gridEditor}\",\"name\": \"${camelCase(\n name\n )}\",\"header\": \"${term}\",\"hidden\":${hidden} ,\"editable\": ${editable},\"mandatory\": ${!nullable},\"sortable\":true ,\"align\": \"${gridAlign}\",\"width\":${gridWidth} ,\"exportable\": true`\n\n // 참조 타입이 공통 코드\n if (x.refType == 'code') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"code\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 시나리오\n if (x.refType == 'scenario') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"scenario\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 엔티티\n if (x.refType == 'entity') {\n colTxt = colTxt + `,\"select_opt\":{\"type\": \"entity\",\"args\": {\"queryName\": \"${camelCase(plural(x.refName))}\",\"codeField\": \"id\",\"dispField\": \"name\"}}`\n }\n colTxt = colTxt + '}'\n return colTxt\n })\n }\n\n /**\n * 검색 컬럼\n * @param entityColumns\n */\n createSearchCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.searchRank > 0)\n .sort(function (a, b) {\n return a.searchRank - b.searchRank\n })\n .map(x => {\n let operator = x.searchOper\n\n if (operator == 'filter') {\n return `\"${camelCase(x.name)}\"`\n }\n\n if (!operator) operator = 'eq'\n return `{\"name\": \"${camelCase(x.name)}\",\"operator\": \"${operator}\"}`\n })\n }\n\n /**\n * 그리드 정렬\n * @param entityColumns\n * @returns\n */\n createSortCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.sortRank > 0)\n .sort(function (a, b) {\n return a.sortRank - b.sortRank\n })\n .map(x => {\n return `{\"name\":\"${camelCase(x.name)}\",\"desc\":${x.reverseSort}}`\n })\n }\n\n /**\n * 메뉴 데이터 생성\n * @param tx\n * @param domain\n * @param user\n * @param parent_menu_id\n * @param name\n * @param pageTemplate\n */\n async createMenuData(tx: any, domain: any, user: any, parent_menu_id: string, name: string, pageTemplate: string) {\n // 상위 메뉴\n let parentMenu = await tx.getRepository(Menu).findOne({\n where: {\n domain: { id: domain.id },\n id: parent_menu_id\n }\n })\n\n // 메뉴 랭크\n let menuRank = await tx.getRepository(Menu).query(`select coalesce(max(rank),0) as rank from menus where parent_id = '${parent_menu_id}' or id = '${parent_menu_id}'`)\n let rank = menuRank[0].rank + 10\n\n // 메뉴 저장\n let menu: Menu = new Menu()\n menu.name = name\n menu.menuType = 'SCREEN'\n menu.category = 'meta-grist-page'\n menu.rank = rank\n menu.hiddenFlag = false\n menu.routing = name\n menu.template = pageTemplate\n menu.resourceUrl = '@things-factory/meta-ui/client/pages/meta-grist-page'\n menu.parent = parentMenu\n\n await tx.getRepository(Menu).save({\n ...menu,\n domain,\n creator: user,\n updater: user\n })\n }\n\n /**\n * json 모델 암호화\n * @param template\n * @returns\n */\n enc(template: string) {\n let jsonStr = JSON.stringify(template)\n let templates = jsonStr.split(/(.{100})/).filter(O => O)\n let filters = ['aes-256-ecb', 'aes-256-cbc', 'aes-256-cfb', 'aes-256-cfb8', 'aes-256-cfb1', 'aes-256-ofb', 'aes-256-ctr', 'aes256']\n let salt = crypto.randomBytes(32).toString('hex')\n let hexKey = Buffer.from(salt, 'hex')\n let ivBase = salt.substring(0, 16)\n let iv = ['', ivBase, ivBase, ivBase, ivBase, ivBase, ivBase, ivBase]\n let filterIdx = 0\n let encResults = []\n encResults.push(salt)\n\n for (var i = 0; i < templates.length; i++, filterIdx++) {\n if (filterIdx == filters.length) filterIdx = 0\n\n let cipher = crypto.createCipheriv(filters[filterIdx], hexKey, iv[filterIdx])\n let encrypted = cipher.update(templates[i], 'utf8', 'hex')\n encrypted += cipher.final('hex')\n encResults.push(encrypted)\n }\n\n return encResults.join('h1z0q9i9x7q6')\n }\n}\n\nconst modelTemplate = `\n{\n \"menu\": {\n \"title\": \"{{name}}\",\n \"name\": \"\",\n \"desc\": \"\"\n },\n \"gql\": {\n \"query\": {\n \"list_func\": \"{{pluralCamelCase name}}\",\n \"find_one_func\":\"{{camelCase name}}\"\n },\n \"mutation\":{\n \"multiple\":{\n \"func\":\"updateMultiple{{pascalCase name}}\",\n \"type\": \"{{pascalCase name}}Patch\"\n },\n \"delete\":{\n \"func\":\"delete{{pluralPascalCase name}}\"\n }\n }\n },\n \"button\": [\n {\n \"name\":\"export\"\n },\n {\n \"name\":\"add\"\n },\n {\n \"name\":\"delete\"\n },\n {\n \"name\":\"save\"\n }\n ],\n \"grid_column\": [\n {\n \"type\": \"string\",\n \"name\": \"id\",\n \"header\": \"id\",\n \"hidden\": true,\n \"editable\": false,\n \"mandatory\": false,\n \"sortable\": false,\n \"align\": \"left\",\n \"width\": 0,\n \"exportable\": false\n },\n{{GridColumns}}\n ],\n \"grid\": {\n \"button\":[\n {{HistoryButton}}\n ],\n \"option\": {\n \"mobile_mode\": \"LIST\",\n \"desk_mode\": \"GRID\",\n \"use_row_checker\": true,\n \"pages\": [\n 20,\n 50,\n 100,\n 300\n ],\n \"view_mode\": [\n \"GRID\",\n \"LIST\",\n \"CARD\"\n ],\n \"sorters\": [\n{{SortColumns}}\n ]\n },\n \"row\": {\n \"multiple_select\": true,\n \"click\": \"select-row-toggle\"\n }\n },\n \"search\": [\n{{SearchColumns}}\n ]\n}\n`\n"]}
1
+ {"version":3,"file":"create-menu.js","sourceRoot":"","sources":["../../../server/service/tool-entity/create-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Directive, Resolver } from 'type-graphql'\nimport { Entity, EntityColumn } from '@things-factory/resource-base'\nimport { Menu } from '@things-factory/menu-base'\nconst { camelCase, startCase, snakeCase, kebabCase } = require('lodash')\nconst { plural } = require('pluralize')\nimport crypto from 'crypto'\n\n@Resolver()\nexport class OperatoToolCreateMenu {\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'Operato Tool Create Menu' })\n async toolCreateMenu(@Arg('id') id: string, @Arg('parent_menu_id') parent_menu_id: string, @Ctx() context: any): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n // Entity 조회\n const entity: Entity = await tx.getRepository(Entity).findOne({\n where: {\n domain: { id: domain.id },\n id\n }\n })\n\n // Entity 컬럼 조회\n const entityColumns: EntityColumn[] = await tx.getRepository(EntityColumn).find({\n where: {\n domain: { id: domain.id },\n entity: { id: entity.id }\n }\n })\n\n let { name = '' } = entity || {}\n let serviceName: string = kebabCase(name)\n\n // 이름 치환 (타이틀 , grapql 관련 서비스 )\n let pageTemplate = modelTemplate\n .replace(/{{pascalCase name}}/g, startCase(camelCase(name)).replace(/ /g, ''))\n .replace(/{{camelCase name}}/g, camelCase(name))\n .replace(/{{snakeCase name}}/g, snakeCase(name))\n .replace(/{{pluralPascalCase name}}/g, startCase(camelCase(plural(name))).replace(/ /g, ''))\n .replace(/{{pluralCamelCase name}}/g, camelCase(plural(name)))\n .replace(/{{name}}/g, name)\n\n // 이력조회 버튼 추가\n let historyButton = ''\n if (entity.dataProp == 'JSON') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_json\"\n }\n `\n } else if (entity.dataProp == 'COPY') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_copy\"\n }\n `\n }\n pageTemplate = pageTemplate.replace(/{{HistoryButton}}/g, historyButton)\n\n // 그리드 정렬\n let sortColumns = this.createSortCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SortColumns}}/g, sortColumns.join(','))\n\n // 검색 필드\n let searchColumns = this.createSearchCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SearchColumns}}/g, searchColumns.join(','))\n\n // 그리드 컬럼\n let gridColumns = this.createGridColumns(entityColumns)\n pageTemplate = pageTemplate.replace(/{{GridColumns}}/g, gridColumns.join(','))\n\n // 암호화\n pageTemplate = this.enc(pageTemplate)\n\n // 메뉴 생성\n await this.createMenuData(tx, domain, user, parent_menu_id, serviceName, pageTemplate)\n return true\n }\n\n /**\n * 그리드 컬럼\n * @param entityColumns\n */\n createGridColumns(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.name != 'id' && x.gridRank > 0)\n .sort(function (a, b) {\n return a.gridRank - b.gridRank\n })\n .map(x => {\n let { gridEditor = 'string', name, term, gridWidth = 0, gridAlign = 'left', nullable = false } = x\n if (gridEditor == null) gridEditor = 'string'\n if (gridAlign == null) gridAlign = 'left'\n\n // 생성 자 수정 자 기본 값\n if (name == 'updater_id' || name == 'creator_id') {\n name = name == 'updater_id' ? 'updater' : 'creator'\n return `{\"type\": \"object\",\"name\": \"${name}\",\"header\": \"${name}\",\"width\": 100,\"editable\":false, \"align\": \"center\",\"object_opt\":{\"queryName\":\"users\"}}`\n }\n // 생성 시간 수정 시간 기본 값\n if (name == 'updated_at' || name == 'created_at') {\n return `{\"type\": \"datetime\",\"name\": \"${name == 'updated_at' ? 'updatedAt' : 'createdAt'}\",\"header\": \"${name}\",\"width\": 160,\"editable\":false, \"align\": \"center\"}`\n }\n\n // 읽기 / 숨김 필드는 수정 불가\n let editable = gridEditor == 'readonly' || gridEditor == 'hidden' ? false : true\n // 히든 필드\n let hidden = gridEditor == 'hidden' ? true : false\n if (hidden == true || editable == false) {\n // 히든 필드는 문자열로 변환 숨김\n gridEditor = 'string'\n }\n\n let colTxt = `{\"type\": \"${gridEditor}\",\"name\": \"${camelCase(\n name\n )}\",\"header\": \"${term}\",\"hidden\":${hidden} ,\"editable\": ${editable},\"mandatory\": ${!nullable},\"sortable\":true ,\"align\": \"${gridAlign}\",\"width\":${gridWidth} ,\"exportable\": true`\n\n // 참조 타입이 공통 코드\n if (x.refType == 'code') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"code\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 시나리오\n if (x.refType == 'scenario') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"scenario\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 엔티티\n if (x.refType == 'entity') {\n colTxt = colTxt + `,\"select_opt\":{\"type\": \"entity\",\"args\": {\"queryName\": \"${camelCase(plural(x.refName))}\",\"codeField\": \"id\",\"dispField\": \"name\"}}`\n }\n colTxt = colTxt + '}'\n return colTxt\n })\n }\n\n /**\n * 검색 컬럼\n * @param entityColumns\n */\n createSearchCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.searchRank > 0)\n .sort(function (a, b) {\n return a.searchRank - b.searchRank\n })\n .map(x => {\n let operator = x.searchOper\n\n if (operator == 'filter') {\n return `\"${camelCase(x.name)}\"`\n }\n\n if (!operator) operator = 'eq'\n return `{\"name\": \"${camelCase(x.name)}\",\"operator\": \"${operator}\"}`\n })\n }\n\n /**\n * 그리드 정렬\n * @param entityColumns\n * @returns\n */\n createSortCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.sortRank > 0)\n .sort(function (a, b) {\n return a.sortRank - b.sortRank\n })\n .map(x => {\n return `{\"name\":\"${camelCase(x.name)}\",\"desc\":${x.reverseSort}}`\n })\n }\n\n /**\n * 메뉴 데이터 생성\n * @param tx\n * @param domain\n * @param user\n * @param parent_menu_id\n * @param name\n * @param pageTemplate\n */\n async createMenuData(tx: any, domain: any, user: any, parent_menu_id: string, name: string, pageTemplate: string) {\n // 상위 메뉴\n let parentMenu = await tx.getRepository(Menu).findOne({\n where: {\n domain: { id: domain.id },\n id: parent_menu_id\n }\n })\n\n // 메뉴 랭크\n let menuRank = await tx.getRepository(Menu).query(`select coalesce(max(rank),0) as rank from menus where parent_id = '${parent_menu_id}' or id = '${parent_menu_id}'`)\n let rank = menuRank[0].rank + 10\n\n // 메뉴 저장\n let menu: Menu = new Menu()\n menu.name = name\n menu.menuType = 'SCREEN'\n menu.category = 'meta-grist-page'\n menu.rank = rank\n menu.hiddenFlag = false\n menu.routing = name\n menu.template = pageTemplate\n menu.resourceUrl = '@things-factory/meta-ui/client/pages/meta-grist-page'\n menu.parent = parentMenu\n\n await tx.getRepository(Menu).save({\n ...menu,\n domain,\n creator: user,\n updater: user\n })\n }\n\n /**\n * json 모델 암호화\n * @param template\n * @returns\n */\n enc(template: string) {\n let jsonStr = JSON.stringify(template)\n let templates = jsonStr.split(/(.{100})/).filter(O => O)\n let filters = ['aes-256-ecb', 'aes-256-cbc', 'aes-256-cfb', 'aes-256-cfb8', 'aes-256-cfb1', 'aes-256-ofb', 'aes-256-ctr', 'aes256']\n let salt = crypto.randomBytes(32).toString('hex')\n let hexKey = Buffer.from(salt, 'hex')\n let ivBase = salt.substring(0, 16)\n let iv = ['', ivBase, ivBase, ivBase, ivBase, ivBase, ivBase, ivBase]\n let filterIdx = 0\n let encResults = []\n encResults.push(salt)\n\n for (var i = 0; i < templates.length; i++, filterIdx++) {\n if (filterIdx == filters.length) filterIdx = 0\n\n let cipher = crypto.createCipheriv(filters[filterIdx], hexKey, iv[filterIdx])\n let encrypted = cipher.update(templates[i], 'utf8', 'hex')\n encrypted += cipher.final('hex')\n encResults.push(encrypted)\n }\n\n return encResults.join('h1z0q9i9x7q6')\n }\n}\n\nconst modelTemplate = `\n{\n \"menu\": {\n \"title\": \"{{name}}\",\n \"name\": \"\",\n \"desc\": \"\"\n },\n \"gql\": {\n \"query\": {\n \"list_func\": \"{{pluralCamelCase name}}\",\n \"find_one_func\":\"{{camelCase name}}\"\n },\n \"mutation\":{\n \"multiple\":{\n \"func\":\"updateMultiple{{pascalCase name}}\",\n \"type\": \"{{pascalCase name}}Patch\"\n },\n \"delete\":{\n \"func\":\"delete{{pluralPascalCase name}}\"\n }\n }\n },\n \"button\": [\n {\n \"name\":\"export\"\n },\n {\n \"name\":\"add\"\n },\n {\n \"name\":\"delete\"\n },\n {\n \"name\":\"save\"\n }\n ],\n \"grid_column\": [\n {\n \"type\": \"string\",\n \"name\": \"id\",\n \"header\": \"id\",\n \"hidden\": true,\n \"editable\": false,\n \"mandatory\": false,\n \"sortable\": false,\n \"align\": \"left\",\n \"width\": 0,\n \"exportable\": false\n },\n{{GridColumns}}\n ],\n \"grid\": {\n \"button\":[\n {{HistoryButton}}\n ],\n \"option\": {\n \"mobile_mode\": \"LIST\",\n \"desk_mode\": \"GRID\",\n \"use_row_checker\": true,\n \"pages\": [\n 20,\n 50,\n 100,\n 300\n ],\n \"view_mode\": [\n \"GRID\",\n \"LIST\",\n \"CARD\"\n ],\n \"sorters\": [\n{{SortColumns}}\n ]\n },\n \"row\": {\n \"multiple_select\": true,\n \"click\": \"select-row-toggle\"\n }\n },\n \"search\": [\n{{SearchColumns}}\n ]\n}\n`\n"]}
@@ -0,0 +1,81 @@
1
+ import { Entity, EntityColumn } from '@things-factory/resource-base';
2
+ export declare class OperatoToolCreateService {
3
+ toolCreateService(id: string, context: any): Promise<Boolean>;
4
+ /**
5
+ * 서비스 연관 파일 생성
6
+ * @param appRootPath
7
+ * @param moduleName
8
+ * @param name
9
+ * @param serviceName
10
+ * @param entity
11
+ * @param entityColumns
12
+ */
13
+ createServiceFiles(appRootPath: string, moduleName: string, name: string, serviceName: string, entity: Entity, entityColumns: EntityColumn[]): Promise<void>;
14
+ createHistoryServiceFiles(servicePath: string, serviceName: string, entity: Entity, entityColumns: EntityColumn[], nameMap: any): Promise<void>;
15
+ createNoHistoryServiceFiels(servicePath: string, serviceName: string, entity: Entity, entityColumns: EntityColumn[], nameMap: any): Promise<void>;
16
+ /**
17
+ * 엔티티 타입 텍스트
18
+ * @param entityColumns
19
+ * @returns
20
+ */
21
+ createTypeText(entityColumns: EntityColumn[]): string;
22
+ /**
23
+ * 엔티티 생성 텍스트
24
+ * @param entity
25
+ * @param entityColumns
26
+ * @returns
27
+ */
28
+ createEntityText(entity: Entity, entityColumns: EntityColumn[]): string;
29
+ /**
30
+ * 이력관리 엔티티 생성 텍스트
31
+ * @param entity
32
+ * @param entityColumns
33
+ * @returns
34
+ */
35
+ createHistoryEntityText(entity: Entity, entityColumns: EntityColumn[]): string;
36
+ /**
37
+ * EntityColumn to entity column Text
38
+ * @param column
39
+ * @returns
40
+ */
41
+ columnToEntityColumn(column: EntityColumn): string;
42
+ getFieldType(column: EntityColumn): string;
43
+ getColTxtType(column: EntityColumn): string;
44
+ /**
45
+ * 파일 생성
46
+ * @param filePath
47
+ * @param fileText
48
+ * @param nameMap
49
+ */
50
+ writeFile(filePath: string, fileText: string, nameMap: any): Promise<void>;
51
+ /**
52
+ * 문자열 치환
53
+ * @param text
54
+ * @param nameMap
55
+ * @returns
56
+ */
57
+ replaceNamesMap(text: string, nameMap: any): string;
58
+ /**
59
+ * 서비스 경로 만들기
60
+ * @param appRootPath
61
+ * @param moduleName
62
+ * @param serviceName
63
+ */
64
+ createServicePath(appRootPath: string, moduleName: string, serviceName: string): Promise<void>;
65
+ /**
66
+ * 프로젝트 Root Path 구하기
67
+ * @returns String
68
+ */
69
+ getProjectRootPath(): string;
70
+ /**
71
+ * 디렉토리 생성
72
+ * @param path
73
+ */
74
+ createDir(path: string): Promise<void>;
75
+ /**
76
+ * Path 존재 여부
77
+ * @param path
78
+ * @returns
79
+ */
80
+ existsPath(path: string): Promise<any>;
81
+ }
@@ -11,13 +11,13 @@ const fs = require('fs');
11
11
  let OperatoToolCreateService = class OperatoToolCreateService {
12
12
  async toolCreateService(id, context) {
13
13
  const { domain } = context.state;
14
- // Entity 조회
14
+ // Entity 조회
15
15
  const entity = await (0, shell_1.getRepository)(resource_base_1.Entity).findOne({
16
16
  where: {
17
17
  id
18
18
  }
19
19
  });
20
- // Entity 컬럼 조회
20
+ // Entity 컬럼 조회
21
21
  const entityColumns = await (0, shell_1.getRepository)(resource_base_1.EntityColumn).find({
22
22
  where: {
23
23
  domain: { id: domain.id },
@@ -25,12 +25,12 @@ let OperatoToolCreateService = class OperatoToolCreateService {
25
25
  }
26
26
  });
27
27
  let { name = '', bundle = '' } = entity || {};
28
- // 프로젝트 Root Path 구하기
28
+ // 프로젝트 Root Path 구하기
29
29
  let appRootPath = this.getProjectRootPath();
30
30
  let serviceName = kebabCase(name);
31
- // 서비스 경로 생성
31
+ // 서비스 경로 생성
32
32
  await this.createServicePath(appRootPath, bundle, serviceName);
33
- // 서비스 파일 생성
33
+ // 서비스 파일 생성
34
34
  await this.createServiceFiles(appRootPath, bundle, name, serviceName, entity, entityColumns);
35
35
  return true;
36
36
  }
@@ -44,7 +44,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
44
44
  * @param entityColumns
45
45
  */
46
46
  async createServiceFiles(appRootPath, moduleName, name, serviceName, entity, entityColumns) {
47
- // 이름 케이스 워드 만들기
47
+ // 이름 케이스 워드 만들기
48
48
  let nameMap = {
49
49
  name: serviceName,
50
50
  tableName: entity.tableName,
@@ -63,7 +63,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
63
63
  }
64
64
  }
65
65
  async createHistoryServiceFiles(servicePath, serviceName, entity, entityColumns, nameMap) {
66
- // 서비스 연관 파일 생성
66
+ // 서비스 연관 파일 생성
67
67
  await this.writeFile(servicePath + `${serviceName}/index.ts`, serviceHistoryIndex, nameMap);
68
68
  // Entity
69
69
  let entityText = this.createEntityText(entity, entityColumns);
@@ -73,13 +73,12 @@ let OperatoToolCreateService = class OperatoToolCreateService {
73
73
  // TYPE
74
74
  let typeText = this.createTypeText(entityColumns);
75
75
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-type.ts`, typeText, nameMap);
76
- // 이력관리 entity 생성
76
+ // 이력관리 entity 생성
77
77
  let historyText = this.createHistoryEntityText(entity, entityColumns);
78
78
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-history.ts`, historyText, nameMap);
79
79
  let entitySubscriberEntityToJson = '';
80
80
  if (entity.dataProp == 'JSON') {
81
- entitySubscriberEntityToJson =
82
- `
81
+ entitySubscriberEntityToJson = `
83
82
  public createHistoryEntity(manager, entity) {
84
83
  let history = manager.create(this.historyEntity, entity);
85
84
  history.historyJson = JSON.stringify(entity);
@@ -98,7 +97,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
98
97
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-history-type.ts`, sereviceHistoryType, nameMap);
99
98
  // 전체 서비스 index.ts 파일
100
99
  let allServiceIdxPath = servicePath + 'index.ts';
101
- if (await this.existsPath(allServiceIdxPath) == false) {
100
+ if ((await this.existsPath(allServiceIdxPath)) == false) {
102
101
  await this.writeFile(allServiceIdxPath, allIndex, nameMap);
103
102
  }
104
103
  let allIdxFileTxt = await fs.readFileSync(allServiceIdxPath, 'utf8');
@@ -123,7 +122,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
123
122
  await this.writeFile(allServiceIdxPath, allIdxFileTxt, nameMap);
124
123
  }
125
124
  async createNoHistoryServiceFiels(servicePath, serviceName, entity, entityColumns, nameMap) {
126
- // 서비스 연관 파일 생성
125
+ // 서비스 연관 파일 생성
127
126
  await this.writeFile(servicePath + `${serviceName}/index.ts`, serviceIndex, nameMap);
128
127
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-query.ts`, serviceQuery, nameMap);
129
128
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-mutation.ts`, serviceMutation, nameMap);
@@ -135,7 +134,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
135
134
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-type.ts`, typeText, nameMap);
136
135
  // 전체 서비스 index.ts 파일
137
136
  let allServiceIdxPath = servicePath + 'index.ts';
138
- if (await this.existsPath(allServiceIdxPath) == false) {
137
+ if ((await this.existsPath(allServiceIdxPath)) == false) {
139
138
  await this.writeFile(allServiceIdxPath, allIndex, nameMap);
140
139
  }
141
140
  let allIdxFileTxt = await fs.readFileSync(allServiceIdxPath, 'utf8');
@@ -178,9 +177,9 @@ let OperatoToolCreateService = class OperatoToolCreateService {
178
177
  let colName = camelCase(column.name);
179
178
  let fieldAnn = `@Field(${fieldType.length == 0 ? '' : 'type =>' + fieldType + ','} { nullable: ${column.nullable} })`;
180
179
  let columnTxt = `${colName}${column.nullable ? '?' : ''}: ${colTxtType}`;
181
- return " " + fieldAnn + "\n " + columnTxt + "\n";
180
+ return ' ' + fieldAnn + '\n ' + columnTxt + '\n';
182
181
  });
183
- typeText = typeText.replace(/{{newTypeColumns}}/g, newTypeColumns.join("\n"));
182
+ typeText = typeText.replace(/{{newTypeColumns}}/g, newTypeColumns.join('\n'));
184
183
  let patchTypeColumns = entityColumns.map(column => {
185
184
  if (column.name == 'id')
186
185
  return '';
@@ -201,9 +200,9 @@ let OperatoToolCreateService = class OperatoToolCreateService {
201
200
  let colName = camelCase(column.name);
202
201
  let fieldAnn = `@Field(${fieldType.length == 0 ? '' : 'type =>' + fieldType + ','} { nullable: ${column.nullable} })`;
203
202
  let columnTxt = `${colName}${column.nullable ? '?' : ''}: ${colTxtType}`;
204
- return " " + fieldAnn + "\n " + columnTxt + "\n";
203
+ return ' ' + fieldAnn + '\n ' + columnTxt + '\n';
205
204
  });
206
- typeText = typeText.replace(/{{patchTypeColumns}}/g, patchTypeColumns.join("\n"));
205
+ typeText = typeText.replace(/{{patchTypeColumns}}/g, patchTypeColumns.join('\n'));
207
206
  return typeText;
208
207
  }
209
208
  /**
@@ -218,7 +217,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
218
217
  let sortedCols = entityColumns.sort(function (a, b) {
219
218
  return a.rank - b.rank;
220
219
  });
221
- // 컬럼 정보 txt 변환
220
+ // 컬럼 정보 txt 변환
222
221
  let entityColsText = sortedCols.map(x => {
223
222
  return this.columnToEntityColumn(x);
224
223
  });
@@ -228,10 +227,12 @@ let OperatoToolCreateService = class OperatoToolCreateService {
228
227
  @Field({ nullable: true })
229
228
  dataRevisionNo?: number = 1`);
230
229
  }
231
- entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join("\n"));
230
+ entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join('\n'));
232
231
  // index 정보
233
232
  let indexAnn = ``;
234
- let sortedIdxCols = entityColumns.filter(x => x.uniqRank && x.uniqRank > 0).sort(function (a, b) {
233
+ let sortedIdxCols = entityColumns
234
+ .filter(x => x.uniqRank && x.uniqRank > 0)
235
+ .sort(function (a, b) {
235
236
  return a.uniqRank - b.uniqRank;
236
237
  });
237
238
  if (sortedIdxCols.length > 0) {
@@ -246,7 +247,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
246
247
  colName = 'updater';
247
248
  return '{{camelCase name}}.' + camelCase(colName);
248
249
  });
249
- indexAnn = indexAnn.replace(/{{indexColumns}}/g, idxColumns.join(","));
250
+ indexAnn = indexAnn.replace(/{{indexColumns}}/g, idxColumns.join(','));
250
251
  }
251
252
  entityText = entityText.replace(/{{indexAnn}}/g, indexAnn);
252
253
  return entityText;
@@ -263,11 +264,11 @@ let OperatoToolCreateService = class OperatoToolCreateService {
263
264
  let sortedCols = entityColumns.sort(function (a, b) {
264
265
  return a.rank - b.rank;
265
266
  });
266
- // 컬럼 정보 txt 변환
267
+ // 컬럼 정보 txt 변환
267
268
  let entityColsText = sortedCols.map(x => {
268
269
  return this.columnToEntityColumn(x);
269
270
  });
270
- entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join("\n"));
271
+ entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join('\n'));
271
272
  return entityText;
272
273
  }
273
274
  /**
@@ -298,15 +299,17 @@ let OperatoToolCreateService = class OperatoToolCreateService {
298
299
  if (column.colType == 'datetime')
299
300
  colType = 'timestamp without time zone';
300
301
  let colSize = '';
301
- if (column.colType == 'string')
302
+ if (column.colType == 'string') {
303
+ //@ts-ignore
302
304
  colSize = column.colSize;
305
+ }
303
306
  let fieldType = this.getFieldType(column);
304
307
  let colTxtType = this.getColTxtType(column);
305
308
  let colName = camelCase(column.name);
306
309
  let columnAnn = `@Column({name:'${column.name}', type: '${colType}', nullable: ${column.nullable} ${colSize.length == 0 ? '' : ',length:' + colSize} })`;
307
310
  let fieldAnn = `@Field(${fieldType.length == 0 ? '' : 'type =>' + fieldType + ','} { nullable: ${column.nullable} })`;
308
311
  let columnTxt = `${colName}${column.nullable ? '?' : ''}: ${colTxtType}`;
309
- return " " + columnAnn + "\n " + fieldAnn + "\n " + columnTxt + "\n";
312
+ return ' ' + columnAnn + '\n ' + fieldAnn + '\n ' + columnTxt + '\n';
310
313
  }
311
314
  getFieldType(column) {
312
315
  let fieldType = '';
@@ -356,7 +359,8 @@ let OperatoToolCreateService = class OperatoToolCreateService {
356
359
  * @returns
357
360
  */
358
361
  replaceNamesMap(text, nameMap) {
359
- return text.replace(/{{pascalCase name}}/g, nameMap.pascalCaseName)
362
+ return text
363
+ .replace(/{{pascalCase name}}/g, nameMap.pascalCaseName)
360
364
  .replace(/{{camelCase name}}/g, nameMap.camelCaseName)
361
365
  .replace(/{{snakeCase name}}/g, nameMap.snakeCaseName)
362
366
  .replace(/{{pluralPascalCase name}}/g, nameMap.pluralPascalCaseName)
@@ -403,7 +407,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
403
407
  * @param path
404
408
  */
405
409
  async createDir(path) {
406
- if (await this.existsPath(path) == false)
410
+ if ((await this.existsPath(path)) == false)
407
411
  fs.mkdirSync(path);
408
412
  }
409
413
  /**
@@ -415,6 +419,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
415
419
  return await fs.existsSync(path);
416
420
  }
417
421
  };
422
+ exports.OperatoToolCreateService = OperatoToolCreateService;
418
423
  tslib_1.__decorate([
419
424
  (0, type_graphql_1.Query)(returns => Boolean, { description: 'Operato Tool Create Service' }),
420
425
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
@@ -423,10 +428,9 @@ tslib_1.__decorate([
423
428
  tslib_1.__metadata("design:paramtypes", [String, Object]),
424
429
  tslib_1.__metadata("design:returntype", Promise)
425
430
  ], OperatoToolCreateService.prototype, "toolCreateService", null);
426
- OperatoToolCreateService = tslib_1.__decorate([
431
+ exports.OperatoToolCreateService = OperatoToolCreateService = tslib_1.__decorate([
427
432
  (0, type_graphql_1.Resolver)()
428
433
  ], OperatoToolCreateService);
429
- exports.OperatoToolCreateService = OperatoToolCreateService;
430
434
  /* all service index text index.ts */
431
435
  const allIndex = `
432
436
  /* EXPORT ENTITY TYPES */
@@ -490,7 +494,7 @@ export class {{pascalCase name}}Query {
490
494
  }
491
495
 
492
496
  @Query(returns => {{pascalCase name}}List, { description: 'To fetch multiple {{pluralPascalCase name}}' })
493
- async {{pluralCamelCase name}}(@Args() params: ListParam, @Ctx() context: any): Promise<{{pascalCase name}}List> {
497
+ async {{pluralCamelCase name}}(@Args(type => ListParam) params: ListParam, @Ctx() context: any): Promise<{{pascalCase name}}List> {
494
498
  const { domain } = context.state
495
499
 
496
500
  const queryBuilder = getQueryBuilderFromListParams({
@@ -540,7 +544,7 @@ export class {{pascalCase name}}HistoryQuery {
540
544
  }
541
545
 
542
546
  @Query(returns => {{pascalCase name}}HistoryList, { description: 'To fetch multiple {{pluralPascalCase name}}History' })
543
- async {{camelCase name}}Histories(@Args() params: ListParam, @Ctx() context: any): Promise<{{pascalCase name}}HistoryList> {
547
+ async {{camelCase name}}Histories(@Args(type => ListParam) params: ListParam, @Ctx() context: any): Promise<{{pascalCase name}}HistoryList> {
544
548
  const { domain } = context.state
545
549
 
546
550
  const queryBuilder = getQueryBuilderFromListParams({
@@ -787,7 +791,7 @@ export class {{pascalCase name}} {
787
791
  createForeignKeyConstraints: false,
788
792
  nullable: true
789
793
  })
790
- @Field({ nullable: true })
794
+ @Field(type => User, { nullable: true })
791
795
  creator?: User
792
796
 
793
797
  @RelationId(({{camelCase name}}: {{pascalCase name}}) => {{camelCase name}}.creator)
@@ -797,7 +801,7 @@ export class {{pascalCase name}} {
797
801
  createForeignKeyConstraints: false,
798
802
  nullable: true
799
803
  })
800
- @Field({ nullable: true })
804
+ @Field(type => User, { nullable: true })
801
805
  updater?: User
802
806
 
803
807
  @RelationId(({{camelCase name}}: {{pascalCase name}}) => {{camelCase name}}.updater)
@@ -892,7 +896,7 @@ export class {{pascalCase name}}History implements HistoryEntityInterface<{{pas
892
896
  createForeignKeyConstraints: false,
893
897
  nullable: true
894
898
  })
895
- @Field({ nullable: true })
899
+ @Field(type => User, { nullable: true })
896
900
  creator?: User
897
901
 
898
902
  @RelationId(({{camelCase name}}History: {{pascalCase name}}History) => {{camelCase name}}History.creator)
@@ -902,7 +906,7 @@ export class {{pascalCase name}}History implements HistoryEntityInterface<{{pas
902
906
  createForeignKeyConstraints: false,
903
907
  nullable: true
904
908
  })
905
- @Field({ nullable: true })
909
+ @Field(type => User, { nullable: true })
906
910
  updater?: User
907
911
 
908
912
  @RelationId(({{camelCase name}}History: {{pascalCase name}}History) => {{camelCase name}}History.updater)
@@ -999,7 +1003,7 @@ export class {{pascalCase name}}History implements HistoryEntityInterface<{{pas
999
1003
  createForeignKeyConstraints: false,
1000
1004
  nullable: true
1001
1005
  })
1002
- @Field({ nullable: true })
1006
+ @Field(type => User, { nullable: true })
1003
1007
  creator?: User
1004
1008
 
1005
1009
  @RelationId(({{camelCase name}}History: {{pascalCase name}}History) => {{camelCase name}}History.creator)
@@ -1009,7 +1013,7 @@ export class {{pascalCase name}}History implements HistoryEntityInterface<{{pas
1009
1013
  createForeignKeyConstraints: false,
1010
1014
  nullable: true
1011
1015
  })
1012
- @Field({ nullable: true })
1016
+ @Field(type => User, { nullable: true })
1013
1017
  updater?: User
1014
1018
 
1015
1019
  @RelationId(({{camelCase name}}History: {{pascalCase name}}History) => {{camelCase name}}History.updater)