@things-factory/board-service 6.2.81 → 6.2.84

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.
@@ -4,7 +4,8 @@ exports.headlessModel = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
5
  const shell_1 = require("@things-factory/shell");
6
6
  const board_1 = require("../service/board/board");
7
- const headlessModel = async (target) => {
7
+ const board_history_1 = require("../service/board/board-history");
8
+ const headlessModel = async (target, devmode = false) => {
8
9
  var { domain, id, model, name } = target || {};
9
10
  if (model) {
10
11
  if (typeof model == 'string') {
@@ -14,20 +15,34 @@ const headlessModel = async (target) => {
14
15
  throw 'model should be a string or object';
15
16
  }
16
17
  }
17
- else if (id) {
18
- var board = await (0, shell_1.getRepository)(board_1.Board).findOne({
19
- where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, id }
20
- });
21
- model = JSON.parse(board.model);
22
- }
23
- else if (name) {
24
- var board = await (0, shell_1.getRepository)(board_1.Board).findOne({
25
- where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, name }
26
- });
27
- model = JSON.parse(board.model);
28
- }
29
18
  else {
30
- throw 'parameter model or id mandatory';
19
+ if (id) {
20
+ var board = await (0, shell_1.getRepository)(board_1.Board).findOne({
21
+ where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, id }
22
+ });
23
+ }
24
+ else if (name) {
25
+ var board = await (0, shell_1.getRepository)(board_1.Board).findOne({
26
+ where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, name }
27
+ });
28
+ }
29
+ else {
30
+ throw 'parameter model or id mandatory';
31
+ }
32
+ if (!devmode && board) {
33
+ const latestReleased = board.state == 'released'
34
+ ? board
35
+ : await (0, shell_1.getRepository)(board_history_1.BoardHistory)
36
+ .createQueryBuilder('history')
37
+ .where('history.originalId = :originalId', { originalId: board.id })
38
+ .orderBy('history.version', 'DESC')
39
+ .limit(1)
40
+ .getOne();
41
+ if (latestReleased) {
42
+ model = latestReleased.model;
43
+ }
44
+ }
45
+ model = JSON.parse(board.model);
31
46
  }
32
47
  return {
33
48
  base: (0, shell_1.getContextPath)(domain === null || domain === void 0 ? void 0 : domain.subdomain) + (domain ? '/' : ''),
@@ -1 +1 @@
1
- {"version":3,"file":"headless-model.js","sourceRoot":"","sources":["../../server/controllers/headless-model.ts"],"names":[],"mappings":";;;AAAA,qCAA4B;AAC5B,iDAAqE;AAErE,kDAA8C;AAEvC,MAAM,aAAa,GAAG,KAAK,EAAC,MAAM,EAAC,EAAE;IAC1C,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAE9C,IAAI,KAAK,EAAE;QACT,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YAC5B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;SAC1B;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,MAAM,oCAAoC,CAAA;SAC3C;KACF;SAAM,IAAI,EAAE,EAAE;QACb,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,aAAK,CAAC,CAAC,OAAO,CAAC;YAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;SAChF,CAAC,CAAA;QACF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;KAChC;SAAM,IAAI,IAAI,EAAE;QACf,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,aAAK,CAAC,CAAC,OAAO,CAAC;YAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE;SAClF,CAAC,CAAA;QACF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;KAChC;SAAM;QACL,MAAM,iCAAiC,CAAA;KACxC;IAED,OAAO;QACL,IAAI,EAAE,IAAA,sBAAc,EAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC,CAAA;AA5BY,QAAA,aAAa,iBA4BzB","sourcesContent":["import { In } from 'typeorm'\nimport { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { Board } from '../service/board/board'\n\nexport const headlessModel = async target => {\n var { domain, id, model, name } = target || {}\n\n if (model) {\n if (typeof model == 'string') {\n model = JSON.parse(model)\n } else if (typeof model !== 'object') {\n throw 'model should be a string or object'\n }\n } else if (id) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }\n })\n model = JSON.parse(board.model)\n } else if (name) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name }\n })\n model = JSON.parse(board.model)\n } else {\n throw 'parameter model or id mandatory'\n }\n\n return {\n base: getContextPath(domain?.subdomain) + (domain ? '/' : ''),\n model,\n board\n }\n}\n"]}
1
+ {"version":3,"file":"headless-model.js","sourceRoot":"","sources":["../../server/controllers/headless-model.ts"],"names":[],"mappings":";;;AAAA,qCAA4B;AAC5B,iDAAqE;AAErE,kDAA8C;AAC9C,kEAA6D;AAEtD,MAAM,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,UAAmB,KAAK,EAAE,EAAE;IACtE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAE9C,IAAI,KAAK,EAAE;QACT,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YAC5B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;SAC1B;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,MAAM,oCAAoC,CAAA;SAC3C;KACF;SAAM;QACL,IAAI,EAAE,EAAE;YACN,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,aAAK,CAAC,CAAC,OAAO,CAAC;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;aAChF,CAAC,CAAA;SACH;aAAM,IAAI,IAAI,EAAE;YACf,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,aAAK,CAAC,CAAC,OAAO,CAAC;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE;aAClF,CAAC,CAAA;SACH;aAAM;YACL,MAAM,iCAAiC,CAAA;SACxC;QAED,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE;YACrB,MAAM,cAAc,GAClB,KAAK,CAAC,KAAK,IAAI,UAAU;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,MAAM,IAAA,qBAAa,EAAC,4BAAY,CAAC;qBAC9B,kBAAkB,CAAC,SAAS,CAAC;qBAC7B,KAAK,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;qBACnE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC;qBAClC,KAAK,CAAC,CAAC,CAAC;qBACR,MAAM,EAAE,CAAA;YAEjB,IAAI,cAAc,EAAE;gBAClB,KAAK,GAAG,cAAc,CAAC,KAAK,CAAA;aAC7B;SACF;QAED,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;KAChC;IAED,OAAO;QACL,IAAI,EAAE,IAAA,sBAAc,EAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC,CAAA;AA9CY,QAAA,aAAa,iBA8CzB","sourcesContent":["import { In } from 'typeorm'\nimport { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { Board } from '../service/board/board'\nimport { BoardHistory } from '../service/board/board-history'\n\nexport const headlessModel = async (target, devmode: boolean = false) => {\n var { domain, id, model, name } = target || {}\n\n if (model) {\n if (typeof model == 'string') {\n model = JSON.parse(model)\n } else if (typeof model !== 'object') {\n throw 'model should be a string or object'\n }\n } else {\n if (id) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }\n })\n } else if (name) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name }\n })\n } else {\n throw 'parameter model or id mandatory'\n }\n\n if (!devmode && board) {\n const latestReleased =\n board.state == 'released'\n ? board\n : await getRepository(BoardHistory)\n .createQueryBuilder('history')\n .where('history.originalId = :originalId', { originalId: board.id })\n .orderBy('history.version', 'DESC')\n .limit(1)\n .getOne()\n\n if (latestReleased) {\n model = latestReleased.model\n }\n }\n\n model = JSON.parse(board.model)\n }\n\n return {\n base: getContextPath(domain?.subdomain) + (domain ? '/' : ''),\n model,\n board\n }\n}\n"]}
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.headlessPlaylist = void 0;
4
4
  const shell_1 = require("@things-factory/shell");
5
5
  const play_group_1 = require("../service/play-group/play-group");
6
- const headlessPlaylist = async (target) => {
6
+ const board_history_1 = require("../service/board/board-history");
7
+ const headlessPlaylist = async (target, devmode = false) => {
7
8
  var { domain, id, name } = target || {};
8
9
  if (id || name) {
9
10
  const repository = (0, shell_1.getRepository)(play_group_1.PlayGroup);
@@ -19,6 +20,22 @@ const headlessPlaylist = async (target) => {
19
20
  relations: ['boards']
20
21
  });
21
22
  }
23
+ if (!devmode && playGroup) {
24
+ const { boards } = playGroup;
25
+ for (let board of boards) {
26
+ const latestReleased = board.state == 'released'
27
+ ? board
28
+ : await (0, shell_1.getRepository)(board_history_1.BoardHistory)
29
+ .createQueryBuilder('history')
30
+ .where('history.originalId = :originalId', { originalId: board.id })
31
+ .orderBy('history.version', 'DESC')
32
+ .limit(1)
33
+ .getOne();
34
+ if (latestReleased) {
35
+ board.model = latestReleased.model;
36
+ }
37
+ }
38
+ }
22
39
  playGroup.boards = playGroup.boards.sort((a, b) => {
23
40
  // 배열 A에 포함된 아이디의 순서를 가져옵니다.
24
41
  const indexOfOrder = (playGroup.order || []).indexOf(a.id);
@@ -1 +1 @@
1
- {"version":3,"file":"headless-playlist.js","sourceRoot":"","sources":["../../server/controllers/headless-playlist.ts"],"names":[],"mappings":";;;AAAA,iDAAqE;AAErE,iEAA4D;AAErD,MAAM,gBAAgB,GAAG,KAAK,EAAC,MAAM,EAAC,EAAE;IAC7C,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvC,IAAI,EAAE,IAAI,IAAI,EAAE;QACd,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,sBAAS,CAAC,CAAA;QAE3C,IAAI,EAAE,EAAE;YACN,IAAI,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;gBACvC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;gBACxC,SAAS,EAAE,CAAC,QAAQ,CAAC;aACtB,CAAC,CAAA;SACH;aAAM,IAAI,IAAI,EAAE;YACf,IAAI,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;gBACvC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;gBAC1C,SAAS,EAAE,CAAC,QAAQ,CAAC;aACtB,CAAC,CAAA;SACH;QAED,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChD,4BAA4B;YAC5B,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC1D,MAAM,aAAa,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAE3D,yBAAyB;YACzB,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;gBAC/C,mCAAmC;gBACnC,OAAO,CAAC,CAAA;aACT;iBAAM,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;gBAC9B,uCAAuC;gBACvC,OAAO,CAAC,CAAA;aACT;iBAAM,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;gBAC/B,uCAAuC;gBACvC,OAAO,CAAC,CAAC,CAAA;aACV;iBAAM;gBACL,8CAA8C;gBAC9C,OAAO,YAAY,GAAG,aAAa,CAAA;aACpC;QACH,CAAC,CAAC,CAAA;KACH;SAAM;QACL,MAAM,gCAAgC,CAAA;KACvC;IAED,OAAO;QACL,IAAI,EAAE,IAAA,sBAAc,EAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,SAAS;KACV,CAAA;AACH,CAAC,CAAA;AA9CY,QAAA,gBAAgB,oBA8C5B","sourcesContent":["import { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { PlayGroup } from '../service/play-group/play-group'\n\nexport const headlessPlaylist = async target => {\n var { domain, id, name } = target || {}\n\n if (id || name) {\n const repository = getRepository(PlayGroup)\n\n if (id) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['boards']\n })\n } else if (name) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['boards']\n })\n }\n\n playGroup.boards = playGroup.boards.sort((a, b) => {\n // 배열 A에 포함된 아이디의 순서를 가져옵니다.\n const indexOfOrder = (playGroup.order || []).indexOf(a.id)\n const indexOfBoards = (playGroup.order || []).indexOf(b.id)\n\n // 두 아이디의 순서를 비교하여 정렬합니다.\n if (indexOfOrder === -1 && indexOfBoards === -1) {\n // 두 아이디 모두 배열 A에 없는 경우, 그대로 유지합니다.\n return 0\n } else if (indexOfOrder === -1) {\n // 아이디 A만 배열 A에 없는 경우, 아이디 B를 먼저 정렬합니다.\n return 1\n } else if (indexOfBoards === -1) {\n // 아이디 B만 배열 A에 없는 경우, 아이디 A를 먼저 정렬합니다.\n return -1\n } else {\n // 두 아이디 모두 배열 A에 있는 경우, 배열 A의 아이디 순서대로 정렬합니다.\n return indexOfOrder - indexOfBoards\n }\n })\n } else {\n throw 'parameter id or name mandatory'\n }\n\n return {\n base: getContextPath(domain?.subdomain) + (domain ? '/' : ''),\n playGroup\n }\n}\n"]}
1
+ {"version":3,"file":"headless-playlist.js","sourceRoot":"","sources":["../../server/controllers/headless-playlist.ts"],"names":[],"mappings":"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","sourcesContent":["import { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { PlayGroup } from '../service/play-group/play-group'\nimport { BoardHistory } from '../service/board/board-history'\n\nexport const headlessPlaylist = async (target, devmode: boolean = false) => {\n var { domain, id, name } = target || {}\n\n if (id || name) {\n const repository = getRepository(PlayGroup)\n\n if (id) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['boards']\n })\n } else if (name) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['boards']\n })\n }\n\n if (!devmode && playGroup) {\n const { boards } = playGroup\n for (let board of boards) {\n const latestReleased =\n board.state == 'released'\n ? board\n : await getRepository(BoardHistory)\n .createQueryBuilder('history')\n .where('history.originalId = :originalId', { originalId: board.id })\n .orderBy('history.version', 'DESC')\n .limit(1)\n .getOne()\n\n if (latestReleased) {\n board.model = latestReleased.model\n }\n }\n }\n\n playGroup.boards = playGroup.boards.sort((a, b) => {\n // 배열 A에 포함된 아이디의 순서를 가져옵니다.\n const indexOfOrder = (playGroup.order || []).indexOf(a.id)\n const indexOfBoards = (playGroup.order || []).indexOf(b.id)\n\n // 두 아이디의 순서를 비교하여 정렬합니다.\n if (indexOfOrder === -1 && indexOfBoards === -1) {\n // 두 아이디 모두 배열 A에 없는 경우, 그대로 유지합니다.\n return 0\n } else if (indexOfOrder === -1) {\n // 아이디 A만 배열 A에 없는 경우, 아이디 B를 먼저 정렬합니다.\n return 1\n } else if (indexOfBoards === -1) {\n // 아이디 B만 배열 A에 없는 경우, 아이디 A를 먼저 정렬합니다.\n return -1\n } else {\n // 두 아이디 모두 배열 A에 있는 경우, 배열 A의 아이디 순서대로 정렬합니다.\n return indexOfOrder - indexOfBoards\n }\n })\n } else {\n throw 'parameter id or name mandatory'\n }\n\n return {\n base: getContextPath(domain?.subdomain) + (domain ? '/' : ''),\n playGroup\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../server/service/group/group.ts"],"names":[],"mappings":";;;;AAAA,qCAUgB;AAChB,+CAA2E;AAE3E,iDAA8C;AAC9C,yDAAgD;AAChD,0CAAsC;AAK/B,IAAM,KAAK,GAAX,MAAM,KAAK;CA+CjB,CAAA;AA9CC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;iCACC;AAEnB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjC,cAAM;qCAAA;AAEf;IAAC,IAAA,oBAAU,EAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;;uCAC1B;AAEjB;IAAC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;mCACI;AAEZ;IAAC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACN;AAEpB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,aAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,aAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qCAC5B;AAEf;IAAC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;wCAAA;AAEhB;IAAC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;wCAAA;AAEhB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;sCAAA;AAEd;IAAC,IAAA,oBAAU,EAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;;wCAC1B;AAElB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;sCAAA;AAEd;IAAC,IAAA,oBAAU,EAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;;wCAC1B;AA9CP,KAAK;IAHjB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,YAAY,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnF,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;GACpD,KAAK,CA+CjB;AA/CY,sBAAK","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n OneToMany,\n PrimaryGeneratedColumn\n} from 'typeorm'\nimport { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'\n\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Board } from '../board/board'\n\n@Entity()\n@Index('ix_group_0', (group: Group) => [group.domain, group.name], { unique: true })\n@ObjectType({ description: 'Entity for Board Management Group' })\nexport class Group {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field(type => Domain, { nullable: true })\n domain?: Domain\n\n @RelationId((group: Group) => group.domain)\n domainId?: string\n\n @Column()\n @Field()\n name: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description?: string\n\n @OneToMany(type => Board, board => board.group)\n @Field(type => [Board], { nullable: true })\n boards: Board[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((group: Group) => group.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((group: Group) => group.updater)\n updaterId?: string\n}\n"]}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../server/service/group/group.ts"],"names":[],"mappings":";;;;AAAA,qCAUgB;AAChB,+CAA2E;AAE3E,iDAA8C;AAC9C,yDAAgD;AAChD,0CAAsC;AAM/B,IAAM,KAAK,GAAX,MAAM,KAAK;CA+CjB,CAAA;AA9CC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;iCACC;AAEnB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjC,cAAM;qCAAA;AAEf;IAAC,IAAA,oBAAU,EAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;;uCAC1B;AAEjB;IAAC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;mCACI;AAEZ;IAAC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACN;AAEpB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,aAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,aAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qCAC5B;AAEf;IAAC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;wCAAA;AAEhB;IAAC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;wCAAA;AAEhB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;sCAAA;AAEd;IAAC,IAAA,oBAAU,EAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;;wCAC1B;AAElB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;sCAAA;AAEd;IAAC,IAAA,oBAAU,EAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;;wCAC1B;AA9CP,KAAK;IAHjB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,YAAY,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnF,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;GACpD,KAAK,CA+CjB;AA/CY,sBAAK","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n OneToMany,\n PrimaryGeneratedColumn\n} from 'typeorm'\nimport { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'\n\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Board } from '../board/board'\nimport { BoardHistory } from '../board/board-history'\n\n@Entity()\n@Index('ix_group_0', (group: Group) => [group.domain, group.name], { unique: true })\n@ObjectType({ description: 'Entity for Board Management Group' })\nexport class Group {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field(type => Domain, { nullable: true })\n domain?: Domain\n\n @RelationId((group: Group) => group.domain)\n domainId?: string\n\n @Column()\n @Field()\n name: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description?: string\n\n @OneToMany(type => Board, board => board.group)\n @Field(type => [Board], { nullable: true })\n boards: Board[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((group: Group) => group.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((group: Group) => group.updater)\n updaterId?: string\n}\n"]}