@things-factory/dataset 6.0.67 → 6.0.70

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.
Files changed (56) hide show
  1. package/client/pages/data-set/data-set-list-page.ts +1 -1
  2. package/client/pages/data-summary/data-summary-list-page.ts +390 -0
  3. package/client/pages/data-summary/data-summary-search-page.ts +417 -0
  4. package/client/pages/data-summary/data-summary-view.ts +119 -0
  5. package/client/route.ts +12 -0
  6. package/dist-client/pages/data-set/data-set-list-page.js +1 -1
  7. package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
  8. package/dist-client/pages/data-summary/data-summary-importer.d.ts +22 -0
  9. package/dist-client/pages/data-summary/data-summary-importer.js +100 -0
  10. package/dist-client/pages/data-summary/data-summary-importer.js.map +1 -0
  11. package/dist-client/pages/data-summary/data-summary-list-page.d.ts +57 -0
  12. package/dist-client/pages/data-summary/data-summary-list-page.js +389 -0
  13. package/dist-client/pages/data-summary/data-summary-list-page.js.map +1 -0
  14. package/dist-client/pages/data-summary/data-summary-search-page.d.ts +63 -0
  15. package/dist-client/pages/data-summary/data-summary-search-page.js +407 -0
  16. package/dist-client/pages/data-summary/data-summary-search-page.js.map +1 -0
  17. package/dist-client/pages/data-summary/data-summary-view.d.ts +1 -0
  18. package/dist-client/pages/data-summary/data-summary-view.js +100 -0
  19. package/dist-client/pages/data-summary/data-summary-view.js.map +1 -0
  20. package/dist-client/route.js +9 -0
  21. package/dist-client/route.js.map +1 -1
  22. package/dist-client/tsconfig.tsbuildinfo +1 -1
  23. package/dist-server/controllers/create-data-sample.js +1 -1
  24. package/dist-server/controllers/create-data-sample.js.map +1 -1
  25. package/dist-server/controllers/generate-data-summary.js +94 -0
  26. package/dist-server/controllers/generate-data-summary.js.map +1 -0
  27. package/dist-server/controllers/generate-summary-data.js +88 -0
  28. package/dist-server/controllers/generate-summary-data.js.map +1 -0
  29. package/dist-server/service/data-summary/data-summary-mutation.js +28 -0
  30. package/dist-server/service/data-summary/data-summary-mutation.js.map +1 -0
  31. package/dist-server/service/data-summary/data-summary-query.js +136 -0
  32. package/dist-server/service/data-summary/data-summary-query.js.map +1 -0
  33. package/dist-server/service/data-summary/data-summary-type.js +57 -0
  34. package/dist-server/service/data-summary/data-summary-type.js.map +1 -0
  35. package/dist-server/service/data-summary/data-summary.js +188 -0
  36. package/dist-server/service/data-summary/data-summary.js.map +1 -0
  37. package/dist-server/service/data-summary/index.js +10 -0
  38. package/dist-server/service/data-summary/index.js.map +1 -0
  39. package/dist-server/service/index.js +4 -0
  40. package/dist-server/service/index.js.map +1 -1
  41. package/dist-server/tsconfig.tsbuildinfo +1 -1
  42. package/helps/dataset/data-summary.md +160 -0
  43. package/package.json +5 -5
  44. package/server/controllers/create-data-sample.ts +1 -1
  45. package/server/controllers/generate-data-summary.ts +124 -0
  46. package/server/service/data-summary/data-summary-mutation.ts +19 -0
  47. package/server/service/data-summary/data-summary-query.ts +96 -0
  48. package/server/service/data-summary/data-summary-type.ts +40 -0
  49. package/server/service/data-summary/data-summary.ts +165 -0
  50. package/server/service/data-summary/index.ts +7 -0
  51. package/server/service/index.ts +4 -0
  52. package/things-factory.config.js +10 -1
  53. package/translations/en.json +8 -0
  54. package/translations/ko.json +8 -0
  55. package/translations/ms.json +8 -0
  56. package/translations/zh.json +8 -0
@@ -51,7 +51,7 @@ const formatDate = (keys, _moment) => {
51
51
  async function createDataSample(dataSample, context) {
52
52
  const { domain, user, tx } = context.state;
53
53
  const dataSet = await tx.getRepository(data_set_1.DataSet).findOne({
54
- where: { id: dataSample.dataSet.id },
54
+ where: { domain: { id: domain.id }, id: dataSample.dataSet.id },
55
55
  relations: ['dataKeySet']
56
56
  });
57
57
  const dataItems = dataSet.dataItems;
@@ -1 +1 @@
1
- {"version":3,"file":"create-data-sample.js","sourceRoot":"","sources":["../../server/controllers/create-data-sample.ts"],"names":[],"mappings":"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","sourcesContent":["import moment from 'moment-timezone'\n\nimport { Role } from '@things-factory/auth-base'\nimport { getRedirectSubdomainPath, pubsub } from '@things-factory/shell'\nimport { logger } from '@things-factory/env'\nimport { getWorkDateAndShift } from '@things-factory/work-shift'\n\nimport { DataOoc, DataOocStatus } from '../service/data-ooc/data-ooc'\nimport { DataSample } from '../service/data-sample/data-sample'\nimport { NewDataSample } from '../service/data-sample/data-sample-type'\nimport { DataSet } from '../service/data-set/data-set'\nimport { DataUseCase } from './data-use-case'\nimport { Activity } from '@things-factory/worklist'\n\nimport { issue } from '@things-factory/worklist/dist-server/controllers/activity-instance/issue'\n\n// See README.md at ## Data Samples\nprocess.env.TZ = 'UTC'\n\nconst fillDataKeys = (dataKeySet, data) => {\n const keys = dataKeySet?.dataKeyItems || []\n return keys.reduce((sum, key, index) => {\n const value = data[key.dataKey]\n if (value != null) {\n sum[`key0${index + 1}`] = value instanceof Array ? value[0] : value\n }\n return sum\n }, {})\n}\n\n// parse variable javascript string pattern\nconst replaceVariables = (keys, dic) => {\n for (const k in keys) {\n const matches = keys[k].match(/\\$\\{\\w*\\}/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, dic[m.slice(2, -1)])\n })\n }\n return keys\n}\n\n// It is required UTC date for Partitioning File System like AWS S3 from Athena.\n// ex) %YYYY, %MM, %DD\nconst formatDate = (keys, _moment) => {\n for (const k in keys) {\n const matches = keys[k].match(/%\\w*/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, _moment.format(m.substr(1)))\n })\n }\n return keys\n}\n\nexport async function createDataSample(dataSample: NewDataSample, context: ResolverContext): Promise<DataSample> {\n const { domain, user, tx } = context.state\n\n const dataSet = await tx.getRepository(DataSet).findOne({\n where: { id: dataSample.dataSet.id },\n relations: ['dataKeySet']\n })\n\n const dataItems = dataSet.dataItems\n const collectedAt = dataSample.collectedAt || new Date()\n\n const timezone = dataSet.timezone || domain.timezone || 'UTC'\n const format = 'YYYY-MM-DD'\n\n // workDate ex) 2022-04-04\n const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt, { timezone, format })\n\n // local time dataSet timezone or domain timezone or default 'UTC'\n\n const localDateTz = moment(collectedAt).tz(timezone)\n const defaultPartitionKeys = {\n domain: domain.subdomain,\n datasetid: dataSample.dataSet.id /* It should not be 'data_set_id' as column name duplicated for Glue */,\n date: localDateTz.format(format) /* local time date */,\n workdate: workDate /* working date */,\n workshift: workShift\n }\n\n var partitionKeys = {\n ...defaultPartitionKeys,\n ...dataSet.partitionKeys\n }\n\n partitionKeys = formatDate(partitionKeys, localDateTz)\n partitionKeys = replaceVariables(partitionKeys, dataSample.data)\n\n const dataKeys = fillDataKeys(dataSet?.dataKeySet, dataSample.data)\n\n const { ooc, oos, judgment } = DataUseCase.evaluate(dataSet, dataItems, dataSample.data) || {}\n\n const old = await tx.getRepository(DataSample).findOne({\n where: {\n domain: { id: domain.id },\n dataSet: { id: dataSet.id },\n collectedAt,\n ...dataKeys\n }\n })\n\n const result = await tx.getRepository(DataSample).save({\n ...old,\n name: dataSet.name,\n description: dataSet.description,\n useCase: dataSet.useCase,\n type: dataSet.type,\n ...dataSample,\n ...dataKeys,\n dataSetVersion: dataSet.version,\n domain,\n partitionKeys,\n ooc,\n oos,\n judgment,\n collectedAt,\n workDate,\n workShift,\n creator: user,\n updater: user\n })\n\n if (ooc || oos) {\n const dataOoc = await tx.getRepository(DataOoc).save({\n ...result,\n history: [\n {\n user: {\n id: user.id,\n name: user.name\n },\n state: DataOocStatus.CREATED,\n timestamp: collectedAt\n }\n ],\n state: DataOocStatus.CREATED\n })\n\n const activity = (await tx.getRepository(Activity).findOneBy({\n domain: { id: domain.id },\n name: 'OOC Review'\n })) as Activity\n\n if (activity) {\n const assignee =\n dataSet.supervisoryRoleId &&\n (await tx.getRepository(Role).findOneBy({ domain: { id: domain.id }, id: dataSet.supervisoryRoleId }))\n\n const assignees = dataSet.supervisoryRoleId ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assignee }] : []\n\n /* 해당 dataset의 supervisor로 하여금, OOC를 리뷰하고 instruction을 작성해서, OOC 해결을 위한 태스크를 dataset assignees에게 지시하도록 한다. */\n if (assignees && assignees instanceof Array && assignees.length > 0) {\n const activityInstance = {\n name: `[OOC 검토] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(collectedAt.getTime() + 24 * 60 * 60 * 1000),\n input: {\n dataOocId: dataOoc.id\n },\n assignees,\n approvalLine: []\n }\n\n await issue(activityInstance, context)\n } else {\n console.error(\n `Assignees are not set. So Data OOC Review task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`\n )\n }\n } else {\n console.error('OOC Review Activity not installed.')\n }\n\n try {\n pubsub.publish('data-ooc', {\n dataOoc,\n supervisoryRoleId: dataSet.supervisoryRoleId\n })\n\n pubsub.publish('notification', {\n notification: {\n domain,\n type: 'error',\n title: `[OOC] ${dataSet.name}`,\n body: `Data OOC occurred on '${dataSet.name}'`,\n url: getRedirectSubdomainPath(context, domain.subdomain, `/data-ooc/${dataOoc.id}`),\n timestamp: collectedAt\n }\n })\n } catch (err) {\n logger.error('Notification', err)\n }\n }\n\n return result\n}\n"]}
1
+ {"version":3,"file":"create-data-sample.js","sourceRoot":"","sources":["../../server/controllers/create-data-sample.ts"],"names":[],"mappings":"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","sourcesContent":["import moment from 'moment-timezone'\n\nimport { Role } from '@things-factory/auth-base'\nimport { getRedirectSubdomainPath, pubsub } from '@things-factory/shell'\nimport { logger } from '@things-factory/env'\nimport { getWorkDateAndShift } from '@things-factory/work-shift'\n\nimport { DataOoc, DataOocStatus } from '../service/data-ooc/data-ooc'\nimport { DataSample } from '../service/data-sample/data-sample'\nimport { NewDataSample } from '../service/data-sample/data-sample-type'\nimport { DataSet } from '../service/data-set/data-set'\nimport { DataUseCase } from './data-use-case'\nimport { Activity } from '@things-factory/worklist'\n\nimport { issue } from '@things-factory/worklist/dist-server/controllers/activity-instance/issue'\n\n// See README.md at ## Data Samples\nprocess.env.TZ = 'UTC'\n\nconst fillDataKeys = (dataKeySet, data) => {\n const keys = dataKeySet?.dataKeyItems || []\n return keys.reduce((sum, key, index) => {\n const value = data[key.dataKey]\n if (value != null) {\n sum[`key0${index + 1}`] = value instanceof Array ? value[0] : value\n }\n return sum\n }, {})\n}\n\n// parse variable javascript string pattern\nconst replaceVariables = (keys, dic) => {\n for (const k in keys) {\n const matches = keys[k].match(/\\$\\{\\w*\\}/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, dic[m.slice(2, -1)])\n })\n }\n return keys\n}\n\n// It is required UTC date for Partitioning File System like AWS S3 from Athena.\n// ex) %YYYY, %MM, %DD\nconst formatDate = (keys, _moment) => {\n for (const k in keys) {\n const matches = keys[k].match(/%\\w*/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, _moment.format(m.substr(1)))\n })\n }\n return keys\n}\n\nexport async function createDataSample(dataSample: NewDataSample, context: ResolverContext): Promise<DataSample> {\n const { domain, user, tx } = context.state\n\n const dataSet = await tx.getRepository(DataSet).findOne({\n where: { domain: { id: domain.id }, id: dataSample.dataSet.id },\n relations: ['dataKeySet']\n })\n\n const dataItems = dataSet.dataItems\n const collectedAt = dataSample.collectedAt || new Date()\n\n const timezone = dataSet.timezone || domain.timezone || 'UTC'\n const format = 'YYYY-MM-DD'\n\n // workDate ex) 2022-04-04\n const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt, { timezone, format })\n\n // local time dataSet timezone or domain timezone or default 'UTC'\n\n const localDateTz = moment(collectedAt).tz(timezone)\n const defaultPartitionKeys = {\n domain: domain.subdomain,\n datasetid: dataSample.dataSet.id /* It should not be 'data_set_id' as column name duplicated for Glue */,\n date: localDateTz.format(format) /* local time date */,\n workdate: workDate /* working date */,\n workshift: workShift\n }\n\n var partitionKeys = {\n ...defaultPartitionKeys,\n ...dataSet.partitionKeys\n }\n\n partitionKeys = formatDate(partitionKeys, localDateTz)\n partitionKeys = replaceVariables(partitionKeys, dataSample.data)\n\n const dataKeys = fillDataKeys(dataSet?.dataKeySet, dataSample.data)\n\n const { ooc, oos, judgment } = DataUseCase.evaluate(dataSet, dataItems, dataSample.data) || {}\n\n const old = await tx.getRepository(DataSample).findOne({\n where: {\n domain: { id: domain.id },\n dataSet: { id: dataSet.id },\n collectedAt,\n ...dataKeys\n }\n })\n\n const result = await tx.getRepository(DataSample).save({\n ...old,\n name: dataSet.name,\n description: dataSet.description,\n useCase: dataSet.useCase,\n type: dataSet.type,\n ...dataSample,\n ...dataKeys,\n dataSetVersion: dataSet.version,\n domain,\n partitionKeys,\n ooc,\n oos,\n judgment,\n collectedAt,\n workDate,\n workShift,\n creator: user,\n updater: user\n })\n\n if (ooc || oos) {\n const dataOoc = await tx.getRepository(DataOoc).save({\n ...result,\n history: [\n {\n user: {\n id: user.id,\n name: user.name\n },\n state: DataOocStatus.CREATED,\n timestamp: collectedAt\n }\n ],\n state: DataOocStatus.CREATED\n })\n\n const activity = (await tx.getRepository(Activity).findOneBy({\n domain: { id: domain.id },\n name: 'OOC Review'\n })) as Activity\n\n if (activity) {\n const assignee =\n dataSet.supervisoryRoleId &&\n (await tx.getRepository(Role).findOneBy({ domain: { id: domain.id }, id: dataSet.supervisoryRoleId }))\n\n const assignees = dataSet.supervisoryRoleId ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assignee }] : []\n\n /* 해당 dataset의 supervisor로 하여금, OOC를 리뷰하고 instruction을 작성해서, OOC 해결을 위한 태스크를 dataset assignees에게 지시하도록 한다. */\n if (assignees && assignees instanceof Array && assignees.length > 0) {\n const activityInstance = {\n name: `[OOC 검토] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(collectedAt.getTime() + 24 * 60 * 60 * 1000),\n input: {\n dataOocId: dataOoc.id\n },\n assignees,\n approvalLine: []\n }\n\n await issue(activityInstance, context)\n } else {\n console.error(\n `Assignees are not set. So Data OOC Review task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`\n )\n }\n } else {\n console.error('OOC Review Activity not installed.')\n }\n\n try {\n pubsub.publish('data-ooc', {\n dataOoc,\n supervisoryRoleId: dataSet.supervisoryRoleId\n })\n\n pubsub.publish('notification', {\n notification: {\n domain,\n type: 'error',\n title: `[OOC] ${dataSet.name}`,\n body: `Data OOC occurred on '${dataSet.name}'`,\n url: getRedirectSubdomainPath(context, domain.subdomain, `/data-ooc/${dataOoc.id}`),\n timestamp: collectedAt\n }\n })\n } catch (err) {\n logger.error('Notification', err)\n }\n }\n\n return result\n}\n"]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateDataSummary = void 0;
4
+ const shell_1 = require("@things-factory/shell");
5
+ const env_1 = require("@things-factory/env");
6
+ const data_sample_1 = require("../service/data-sample/data-sample");
7
+ const data_set_1 = require("../service/data-set/data-set");
8
+ const data_summary_1 = require("../service/data-summary/data-summary");
9
+ const compareKeys = (dataKeyItems, summary, sample) => {
10
+ return dataKeyItems.every((item, index) => {
11
+ const prop = `key0${index + 1}`;
12
+ return sample[prop] === summary[prop];
13
+ });
14
+ };
15
+ const buildKeysFromSample = (dataKeyItems, sample) => {
16
+ return dataKeyItems.reduce((sum, item, index) => {
17
+ const prop = `key0${index + 1}`;
18
+ sum[prop] = sample[prop];
19
+ return sum;
20
+ }, {});
21
+ };
22
+ const buildKeySortingList = (dataKeyItems) => {
23
+ return dataKeyItems.reduce((sum, item, index) => {
24
+ const name = `key0${index + 1}`;
25
+ sum.push({ name, desc: true });
26
+ return sum;
27
+ }, []);
28
+ };
29
+ async function generateDataSummary(dataSetId, workDate, workShift = 'NA', context) {
30
+ var _a;
31
+ const { domain, user, tx } = context.state;
32
+ try {
33
+ const dataSet = await tx.getRepository(data_set_1.DataSet).findOne({
34
+ where: { domain: { id: domain.id }, id: dataSetId },
35
+ relations: ['dataKeySet']
36
+ });
37
+ const dataKeyItems = ((_a = dataSet.dataKeySet) === null || _a === void 0 ? void 0 : _a.dataKeyItems) || [];
38
+ const limit = 100;
39
+ var page = 1;
40
+ var summaries = [];
41
+ var summary;
42
+ do {
43
+ const samples = await (0, shell_1.getQueryBuilderFromListParams)({
44
+ repository: tx.getRepository(data_sample_1.DataSample),
45
+ params: {
46
+ filters: [
47
+ { name: 'dataSetId', operator: 'eq', value: dataSetId },
48
+ { name: 'workDate', operator: 'eq', value: workDate },
49
+ { name: 'workShift', operator: 'eq', value: workShift }
50
+ ],
51
+ pagination: { page, limit },
52
+ sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]
53
+ },
54
+ domain
55
+ }).getMany();
56
+ for (const sample of samples) {
57
+ if (!summary || !compareKeys(dataKeyItems, summary, sample)) {
58
+ if (summary) {
59
+ summaries.push(summary);
60
+ }
61
+ summary = Object.assign(Object.assign({ domain, name: dataSet.name, description: dataSet.description, workDate,
62
+ workShift,
63
+ dataSet }, buildKeysFromSample(dataKeyItems, sample)), { count: 0, countOoc: 0, countOos: 0, updater: user, creator: user });
64
+ }
65
+ summary.count++;
66
+ sample.ooc && summary.countOoc++;
67
+ sample.oos && summary.countOos++;
68
+ }
69
+ if (samples.length < limit) {
70
+ summary && summaries.push(summary);
71
+ break;
72
+ }
73
+ page++;
74
+ } while (true);
75
+ tx.getRepository(data_summary_1.DataSummary).upsert(summaries, [
76
+ 'domain',
77
+ 'dataSet',
78
+ 'key01',
79
+ 'key02',
80
+ 'key03',
81
+ 'key04',
82
+ 'key05',
83
+ 'workDate',
84
+ 'workShift'
85
+ ]);
86
+ return true;
87
+ }
88
+ catch (e) {
89
+ env_1.logger.error(e);
90
+ }
91
+ return false;
92
+ }
93
+ exports.generateDataSummary = generateDataSummary;
94
+ //# sourceMappingURL=generate-data-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-data-summary.js","sourceRoot":"","sources":["../../server/controllers/generate-data-summary.ts"],"names":[],"mappings":"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","sourcesContent":["import { Sorting, getQueryBuilderFromListParams } from '@things-factory/shell'\nimport { logger } from '@things-factory/env'\n\nimport { DataSample } from '../service/data-sample/data-sample'\nimport { DataSet } from '../service/data-set/data-set'\n\nimport { DataSummary } from '../service/data-summary/data-summary'\nimport { DataKeyItem } from '../service/data-key-set/data-key-item-type'\n\nconst compareKeys = (dataKeyItems: DataKeyItem[], summary: Partial<DataSummary>, sample: DataSample): boolean => {\n return dataKeyItems.every((item, index) => {\n const prop = `key0${index + 1}`\n return sample[prop] === summary[prop]\n })\n}\n\nconst buildKeysFromSample = (dataKeyItems: DataKeyItem[], sample: DataSample): Partial<DataSummary> => {\n return dataKeyItems.reduce((sum, item, index) => {\n const prop = `key0${index + 1}`\n sum[prop] = sample[prop]\n\n return sum\n }, {} as Partial<DataSummary>)\n}\n\nconst buildKeySortingList = (dataKeyItems: DataKeyItem[]): Sorting[] => {\n return dataKeyItems.reduce((sum, item, index) => {\n const name = `key0${index + 1}`\n sum.push({ name, desc: true })\n return sum\n }, [])\n}\n\nexport async function generateDataSummary(\n dataSetId: string,\n workDate: string,\n workShift: string = 'NA',\n context: ResolverContext\n): Promise<boolean> {\n const { domain, user, tx } = context.state\n\n try {\n const dataSet = await tx.getRepository(DataSet).findOne({\n where: { domain: { id: domain.id }, id: dataSetId },\n relations: ['dataKeySet']\n })\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n\n const limit = 100\n var page = 1\n\n var summaries: Partial<DataSummary>[] = []\n var summary: Partial<DataSummary>\n\n do {\n const samples = await getQueryBuilderFromListParams({\n repository: tx.getRepository(DataSample),\n params: {\n filters: [\n { name: 'dataSetId', operator: 'eq', value: dataSetId },\n { name: 'workDate', operator: 'eq', value: workDate },\n { name: 'workShift', operator: 'eq', value: workShift }\n ],\n pagination: { page, limit },\n sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]\n },\n domain\n }).getMany()\n\n for (const sample of samples) {\n if (!summary || !compareKeys(dataKeyItems, summary, sample)) {\n if (summary) {\n summaries.push(summary)\n }\n\n summary = {\n domain,\n name: dataSet.name,\n description: dataSet.description,\n workDate,\n workShift,\n dataSet,\n ...buildKeysFromSample(dataKeyItems, sample),\n count: 0,\n countOoc: 0,\n countOos: 0,\n updater: user,\n creator: user\n }\n }\n\n summary.count++\n sample.ooc && summary.countOoc++\n sample.oos && summary.countOos++\n }\n\n if (samples.length < limit) {\n summary && summaries.push(summary)\n break\n }\n\n page++\n } while (true)\n\n tx.getRepository(DataSummary).upsert(summaries, [\n 'domain',\n 'dataSet',\n 'key01',\n 'key02',\n 'key03',\n 'key04',\n 'key05',\n 'workDate',\n 'workShift'\n ])\n\n return true\n } catch (e) {\n logger.error(e)\n }\n\n return false\n}\n"]}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateSummaryData = void 0;
4
+ const shell_1 = require("@things-factory/shell");
5
+ const env_1 = require("@things-factory/env");
6
+ const data_sample_1 = require("../service/data-sample/data-sample");
7
+ const data_set_1 = require("../service/data-set/data-set");
8
+ const data_summary_1 = require("../service/data-summary/data-summary");
9
+ const compareKeys = (dataKeyItems, summary, sample) => {
10
+ return dataKeyItems.every((item, index) => {
11
+ const prop = `key0${index + 1}`;
12
+ return sample[prop] === summary[prop];
13
+ });
14
+ };
15
+ const buildKeysFromSample = (dataKeyItems, sample) => {
16
+ return dataKeyItems.reduce((sum, item, index) => {
17
+ const prop = `key0${index + 1}`;
18
+ sum[prop] === sample[prop];
19
+ return sum;
20
+ }, {});
21
+ };
22
+ const buildKeySortingList = (dataKeyItems) => {
23
+ return dataKeyItems.reduce((sum, item, index) => {
24
+ const name = `key0${index + 1}`;
25
+ sum.push({ name, desc: true });
26
+ return sum;
27
+ }, []);
28
+ };
29
+ const buildKeyList = (dataKeyItems) => {
30
+ return dataKeyItems.reduce((sum, item, index) => {
31
+ sum.push(`key0${index + 1}`);
32
+ return sum;
33
+ }, []);
34
+ };
35
+ async function generateSummaryData(dataSetId, workDate, workShift, context) {
36
+ var _a;
37
+ const { domain, user, tx } = context.state;
38
+ try {
39
+ const dataSet = await tx.getRepository(data_set_1.DataSet).findOne({
40
+ where: { domain: { id: domain.id }, id: dataSetId },
41
+ relations: ['dataKeySet']
42
+ });
43
+ const dataKeyItems = ((_a = dataSet.dataKeySet) === null || _a === void 0 ? void 0 : _a.dataKeyItems) || [];
44
+ const limit = 100;
45
+ var page = 1;
46
+ var summaries = [];
47
+ var summary;
48
+ do {
49
+ const samples = await (0, shell_1.getQueryBuilderFromListParams)({
50
+ repository: tx.getRepository(data_sample_1.DataSample),
51
+ params: {
52
+ filters: [
53
+ { name: 'dataSet', operator: 'eq', value: dataSetId },
54
+ { name: 'workDate', operator: 'eq', value: workDate },
55
+ { name: 'workShift', operator: 'eq', value: workShift }
56
+ ],
57
+ pagination: { page, limit },
58
+ sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]
59
+ },
60
+ domain
61
+ }).getMany();
62
+ for (const sample of samples) {
63
+ if (!summary || !compareKeys(dataKeyItems, summary, sample)) {
64
+ if (summary) {
65
+ summaries.push(summary);
66
+ }
67
+ summary = Object.assign(Object.assign({ domain, name: dataSet.name, description: dataSet.description, workDate,
68
+ workShift,
69
+ dataSet }, buildKeysFromSample(dataKeyItems, sample)), { count: 0, countOoc: 0, countOos: 0, updater: user, creator: user });
70
+ }
71
+ summary.count++;
72
+ sample.ooc && summary.countOoc++;
73
+ sample.oos && summary.countOos++;
74
+ }
75
+ if (samples.length < limit) {
76
+ summary && summaries.push(summary);
77
+ break;
78
+ }
79
+ page++;
80
+ } while (true);
81
+ tx.getRepository(data_summary_1.DataSummary).upsert(summaries, ['workDate', 'workShift', ...buildKeyList(dataKeyItems)]);
82
+ }
83
+ catch (e) {
84
+ env_1.logger.error(e);
85
+ }
86
+ }
87
+ exports.generateSummaryData = generateSummaryData;
88
+ //# sourceMappingURL=generate-summary-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-summary-data.js","sourceRoot":"","sources":["../../server/controllers/generate-summary-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { Sorting, getQueryBuilderFromListParams } from '@things-factory/shell'\nimport { logger } from '@things-factory/env'\n\nimport { DataSample } from '../service/data-sample/data-sample'\nimport { DataSet } from '../service/data-set/data-set'\n\nimport { DataSummary } from '../service/data-summary/data-summary'\nimport { DataKeyItem } from '../service/data-key-set/data-key-item-type'\n\nconst compareKeys = (dataKeyItems: DataKeyItem[], summary: Partial<DataSummary>, sample: DataSample): boolean => {\n return dataKeyItems.every((item, index) => {\n const prop = `key0${index + 1}`\n return sample[prop] === summary[prop]\n })\n}\n\nconst buildKeysFromSample = (dataKeyItems: DataKeyItem[], sample: DataSample): Partial<DataSummary> => {\n return dataKeyItems.reduce((sum, item, index) => {\n const prop = `key0${index + 1}`\n sum[prop] === sample[prop]\n\n return sum\n }, {} as Partial<DataSummary>)\n}\n\nconst buildKeySortingList = (dataKeyItems: DataKeyItem[]): Sorting[] => {\n return dataKeyItems.reduce((sum, item, index) => {\n const name = `key0${index + 1}`\n sum.push({ name, desc: true })\n return sum\n }, [])\n}\n\nconst buildKeyList = (dataKeyItems: DataKeyItem[]): string[] => {\n return dataKeyItems.reduce((sum, item, index) => {\n sum.push(`key0${index + 1}`)\n return sum\n }, [])\n}\n\nexport async function generateSummaryData(\n dataSetId: string,\n workDate: string,\n workShift: string,\n context: ResolverContext\n): Promise<void> {\n const { domain, user, tx } = context.state\n\n try {\n const dataSet = await tx.getRepository(DataSet).findOne({\n where: { domain: { id: domain.id }, id: dataSetId },\n relations: ['dataKeySet']\n })\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n\n const limit = 100\n var page = 1\n\n var summaries: Partial<DataSummary>[] = []\n var summary: Partial<DataSummary>\n\n do {\n const samples = await getQueryBuilderFromListParams({\n repository: tx.getRepository(DataSample),\n params: {\n filters: [\n { name: 'dataSet', operator: 'eq', value: dataSetId },\n { name: 'workDate', operator: 'eq', value: workDate },\n { name: 'workShift', operator: 'eq', value: workShift }\n ],\n pagination: { page, limit },\n sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]\n },\n domain\n }).getMany()\n\n for (const sample of samples) {\n if (!summary || !compareKeys(dataKeyItems, summary, sample)) {\n if (summary) {\n summaries.push(summary)\n }\n\n summary = {\n domain,\n name: dataSet.name,\n description: dataSet.description,\n workDate,\n workShift,\n dataSet,\n ...buildKeysFromSample(dataKeyItems, sample),\n count: 0,\n countOoc: 0,\n countOos: 0,\n updater: user,\n creator: user\n }\n }\n\n summary.count++\n sample.ooc && summary.countOoc++\n sample.oos && summary.countOos++\n }\n\n if (samples.length < limit) {\n summary && summaries.push(summary)\n break\n }\n\n page++\n } while (true)\n\n tx.getRepository(DataSummary).upsert(summaries, ['workDate', 'workShift', ...buildKeyList(dataKeyItems)])\n } catch (e) {\n logger.error(e)\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataSummaryMutation = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const data_summary_1 = require("./data-summary");
7
+ const generate_data_summary_1 = require("../../controllers/generate-data-summary");
8
+ let DataSummaryMutation = class DataSummaryMutation {
9
+ async generateDataSummaries(dataSetId, workDate, workShift, context) {
10
+ return await (0, generate_data_summary_1.generateDataSummary)(dataSetId, workDate, workShift, context);
11
+ }
12
+ };
13
+ tslib_1.__decorate([
14
+ (0, type_graphql_1.Directive)('@transaction'),
15
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To generate new Data Summaries' }),
16
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('dataSetId')),
17
+ tslib_1.__param(1, (0, type_graphql_1.Arg)('workDate')),
18
+ tslib_1.__param(2, (0, type_graphql_1.Arg)('workShift')),
19
+ tslib_1.__param(3, (0, type_graphql_1.Ctx)()),
20
+ tslib_1.__metadata("design:type", Function),
21
+ tslib_1.__metadata("design:paramtypes", [String, String, String, Object]),
22
+ tslib_1.__metadata("design:returntype", Promise)
23
+ ], DataSummaryMutation.prototype, "generateDataSummaries", null);
24
+ DataSummaryMutation = tslib_1.__decorate([
25
+ (0, type_graphql_1.Resolver)(data_summary_1.DataSummary)
26
+ ], DataSummaryMutation);
27
+ exports.DataSummaryMutation = DataSummaryMutation;
28
+ //# sourceMappingURL=data-summary-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-summary-mutation.js","sourceRoot":"","sources":["../../../server/service/data-summary/data-summary-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AAEtE,iDAA4C;AAE5C,mFAA6E;AAGtE,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAGxB,AAAN,KAAK,CAAC,qBAAqB,CACP,SAAiB,EAClB,QAAgB,EACf,SAAiB,EAC5B,OAAwB;QAE/B,OAAO,MAAM,IAAA,2CAAmB,EAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAC3E,CAAC;CACF,CAAA;AARO;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IAE7E,mBAAA,IAAA,kBAAG,EAAC,WAAW,CAAC,CAAA;IAChB,mBAAA,IAAA,kBAAG,EAAC,UAAU,CAAC,CAAA;IACf,mBAAA,IAAA,kBAAG,EAAC,WAAW,CAAC,CAAA;IAChB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;gEAGP;AAVU,mBAAmB;IAD/B,IAAA,uBAAQ,EAAC,0BAAW,CAAC;GACT,mBAAmB,CAW/B;AAXY,kDAAmB","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\n\nimport { DataSummary } from './data-summary'\n\nimport { generateDataSummary } from '../../controllers/generate-data-summary'\n\n@Resolver(DataSummary)\nexport class DataSummaryMutation {\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To generate new Data Summaries' })\n async generateDataSummaries(\n @Arg('dataSetId') dataSetId: string,\n @Arg('workDate') workDate: string,\n @Arg('workShift') workShift: string,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n return await generateDataSummary(dataSetId, workDate, workShift, context)\n }\n}\n"]}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataSummaryQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const shell_1 = require("@things-factory/shell");
7
+ const auth_base_1 = require("@things-factory/auth-base");
8
+ const data_key_set_1 = require("../data-key-set/data-key-set");
9
+ const data_item_type_1 = require("../data-set/data-item-type");
10
+ const data_set_1 = require("../data-set/data-set");
11
+ const data_set_history_1 = require("../data-set-history/data-set-history");
12
+ const data_summary_1 = require("./data-summary");
13
+ const data_summary_type_1 = require("./data-summary-type");
14
+ let DataSummaryQuery = class DataSummaryQuery {
15
+ async dataSummary(id, context) {
16
+ const { domain } = context.state;
17
+ return await (0, shell_1.getRepository)(data_summary_1.DataSummary).findOne({
18
+ where: { domain: { id: domain.id }, id }
19
+ });
20
+ }
21
+ async dataSummaries(params, context) {
22
+ const { domain } = context.state;
23
+ const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
24
+ domain,
25
+ params,
26
+ repository: await (0, shell_1.getRepository)(data_summary_1.DataSummary),
27
+ searchables: ['name', 'description']
28
+ });
29
+ const [items, total] = await queryBuilder.getManyAndCount();
30
+ return { items, total };
31
+ }
32
+ async dataSummariesByDataKeySet(dataKeySetId, params, context) {
33
+ const { domain } = context.state;
34
+ const dataKeySet = await (0, shell_1.getRepository)(data_key_set_1.DataKeySet).findOneBy({ id: dataKeySetId });
35
+ const dataKeyItems = (dataKeySet === null || dataKeySet === void 0 ? void 0 : dataKeySet.dataKeyItems) || [];
36
+ const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`);
37
+ const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
38
+ repository: (0, shell_1.getRepository)(data_summary_1.DataSummary),
39
+ params,
40
+ domain,
41
+ alias: 'dks',
42
+ searchables: ['name', 'description'].concat(searchables)
43
+ }).innerJoin('dks.dataSet', 'ds', 'ds.dataKeySet = :dataKeySetId', {
44
+ dataKeySetId
45
+ });
46
+ const [items, total] = await queryBuilder.getManyAndCount();
47
+ return { items, total };
48
+ }
49
+ async dataItems(dataSummary) {
50
+ const dataSetHistory = await (0, shell_1.getRepository)(data_set_history_1.DataSetHistory).findOne({
51
+ where: {
52
+ originalId: dataSummary.dataSetId,
53
+ version: dataSummary.dataSetVersion
54
+ }
55
+ });
56
+ return (dataSetHistory === null || dataSetHistory === void 0 ? void 0 : dataSetHistory.dataItems) || [];
57
+ }
58
+ async dataSet(dataSummary) {
59
+ return await (0, shell_1.getRepository)(data_set_1.DataSet).findOneBy({ id: dataSummary.dataSetId });
60
+ }
61
+ async domain(dataSummary) {
62
+ return await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({ id: dataSummary.domainId });
63
+ }
64
+ async updater(dataSummary) {
65
+ return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: dataSummary.updaterId });
66
+ }
67
+ async creator(dataSummary) {
68
+ return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: dataSummary.creatorId });
69
+ }
70
+ };
71
+ tslib_1.__decorate([
72
+ (0, type_graphql_1.Query)(returns => data_summary_1.DataSummary, { nullable: true, description: 'To fetch a DataSummary' }),
73
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
74
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
75
+ tslib_1.__metadata("design:type", Function),
76
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
77
+ tslib_1.__metadata("design:returntype", Promise)
78
+ ], DataSummaryQuery.prototype, "dataSummary", null);
79
+ tslib_1.__decorate([
80
+ (0, type_graphql_1.Query)(returns => data_summary_type_1.DataSummaryList, { description: 'To fetch multiple DataSummaries' }),
81
+ tslib_1.__param(0, (0, type_graphql_1.Args)()),
82
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
83
+ tslib_1.__metadata("design:type", Function),
84
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
85
+ tslib_1.__metadata("design:returntype", Promise)
86
+ ], DataSummaryQuery.prototype, "dataSummaries", null);
87
+ tslib_1.__decorate([
88
+ (0, type_graphql_1.Directive)('@privilege(category: "data-summary", privilege: "query", domainOwnerGranted: true)'),
89
+ (0, type_graphql_1.Query)(returns => data_summary_type_1.DataSummaryList, { description: 'To fetch multiple data summaries by data key set' }),
90
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('dataKeySetId')),
91
+ tslib_1.__param(1, (0, type_graphql_1.Args)()),
92
+ tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
93
+ tslib_1.__metadata("design:type", Function),
94
+ tslib_1.__metadata("design:paramtypes", [String, shell_1.ListParam, Object]),
95
+ tslib_1.__metadata("design:returntype", Promise)
96
+ ], DataSummaryQuery.prototype, "dataSummariesByDataKeySet", null);
97
+ tslib_1.__decorate([
98
+ (0, type_graphql_1.FieldResolver)(type => [data_item_type_1.DataItem]),
99
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
100
+ tslib_1.__metadata("design:type", Function),
101
+ tslib_1.__metadata("design:paramtypes", [data_summary_1.DataSummary]),
102
+ tslib_1.__metadata("design:returntype", Promise)
103
+ ], DataSummaryQuery.prototype, "dataItems", null);
104
+ tslib_1.__decorate([
105
+ (0, type_graphql_1.FieldResolver)(type => data_set_1.DataSet),
106
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
107
+ tslib_1.__metadata("design:type", Function),
108
+ tslib_1.__metadata("design:paramtypes", [data_summary_1.DataSummary]),
109
+ tslib_1.__metadata("design:returntype", Promise)
110
+ ], DataSummaryQuery.prototype, "dataSet", null);
111
+ tslib_1.__decorate([
112
+ (0, type_graphql_1.FieldResolver)(type => shell_1.Domain),
113
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
114
+ tslib_1.__metadata("design:type", Function),
115
+ tslib_1.__metadata("design:paramtypes", [data_summary_1.DataSummary]),
116
+ tslib_1.__metadata("design:returntype", Promise)
117
+ ], DataSummaryQuery.prototype, "domain", null);
118
+ tslib_1.__decorate([
119
+ (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
120
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
121
+ tslib_1.__metadata("design:type", Function),
122
+ tslib_1.__metadata("design:paramtypes", [data_summary_1.DataSummary]),
123
+ tslib_1.__metadata("design:returntype", Promise)
124
+ ], DataSummaryQuery.prototype, "updater", null);
125
+ tslib_1.__decorate([
126
+ (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
127
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
128
+ tslib_1.__metadata("design:type", Function),
129
+ tslib_1.__metadata("design:paramtypes", [data_summary_1.DataSummary]),
130
+ tslib_1.__metadata("design:returntype", Promise)
131
+ ], DataSummaryQuery.prototype, "creator", null);
132
+ DataSummaryQuery = tslib_1.__decorate([
133
+ (0, type_graphql_1.Resolver)(data_summary_1.DataSummary)
134
+ ], DataSummaryQuery);
135
+ exports.DataSummaryQuery = DataSummaryQuery;
136
+ //# sourceMappingURL=data-summary-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-summary-query.js","sourceRoot":"","sources":["../../../server/service/data-summary/data-summary-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { DataKeySet } from '../data-key-set/data-key-set'\nimport { DataItem } from '../data-set/data-item-type'\nimport { DataSet } from '../data-set/data-set'\nimport { DataSetHistory } from '../data-set-history/data-set-history'\nimport { DataSummary } from './data-summary'\nimport { DataSummaryList } from './data-summary-type'\n\n@Resolver(DataSummary)\nexport class DataSummaryQuery {\n @Query(returns => DataSummary!, { nullable: true, description: 'To fetch a DataSummary' })\n async dataSummary(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<DataSummary> {\n const { domain } = context.state\n\n return await getRepository(DataSummary).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => DataSummaryList, { description: 'To fetch multiple DataSummaries' })\n async dataSummaries(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<DataSummaryList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(DataSummary),\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"data-summary\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSummaryList, { description: 'To fetch multiple data summaries by data key set' })\n async dataSummariesByDataKeySet(\n @Arg('dataKeySetId') dataKeySetId: string,\n @Args() params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSummaryList> {\n const { domain } = context.state\n\n const dataKeySet = await getRepository(DataKeySet).findOneBy({ id: dataKeySetId })\n const dataKeyItems = dataKeySet?.dataKeyItems || []\n const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSummary),\n params,\n domain,\n alias: 'dks',\n searchables: ['name', 'description'].concat(searchables)\n }).innerJoin('dks.dataSet', 'ds', 'ds.dataKeySet = :dataKeySetId', {\n dataKeySetId\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [DataItem])\n async dataItems(@Root() dataSummary: DataSummary): Promise<DataItem[]> {\n const dataSetHistory: DataSetHistory = await getRepository(DataSetHistory).findOne({\n where: {\n originalId: dataSummary.dataSetId,\n version: dataSummary.dataSetVersion\n }\n })\n return dataSetHistory?.dataItems || []\n }\n\n @FieldResolver(type => DataSet)\n async dataSet(@Root() dataSummary: DataSummary): Promise<DataSet> {\n return await getRepository(DataSet).findOneBy({ id: dataSummary.dataSetId })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() dataSummary: DataSummary): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: dataSummary.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() dataSummary: DataSummary): Promise<User> {\n return await getRepository(User).findOneBy({ id: dataSummary.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() dataSummary: DataSummary): Promise<User> {\n return await getRepository(User).findOneBy({ id: dataSummary.creatorId })\n }\n}\n"]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataSummaryList = exports.DataSummaryPatch = exports.NewDataSummary = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const data_summary_1 = require("./data-summary");
7
+ let NewDataSummary = class NewDataSummary {
8
+ };
9
+ tslib_1.__decorate([
10
+ (0, type_graphql_1.Field)(),
11
+ tslib_1.__metadata("design:type", String)
12
+ ], NewDataSummary.prototype, "name", void 0);
13
+ tslib_1.__decorate([
14
+ (0, type_graphql_1.Field)({ nullable: true }),
15
+ tslib_1.__metadata("design:type", String)
16
+ ], NewDataSummary.prototype, "description", void 0);
17
+ NewDataSummary = tslib_1.__decorate([
18
+ (0, type_graphql_1.InputType)()
19
+ ], NewDataSummary);
20
+ exports.NewDataSummary = NewDataSummary;
21
+ let DataSummaryPatch = class DataSummaryPatch {
22
+ };
23
+ tslib_1.__decorate([
24
+ (0, type_graphql_1.Field)(type => type_graphql_1.ID, { nullable: true }),
25
+ tslib_1.__metadata("design:type", String)
26
+ ], DataSummaryPatch.prototype, "id", void 0);
27
+ tslib_1.__decorate([
28
+ (0, type_graphql_1.Field)({ nullable: true }),
29
+ tslib_1.__metadata("design:type", String)
30
+ ], DataSummaryPatch.prototype, "name", void 0);
31
+ tslib_1.__decorate([
32
+ (0, type_graphql_1.Field)({ nullable: true }),
33
+ tslib_1.__metadata("design:type", String)
34
+ ], DataSummaryPatch.prototype, "description", void 0);
35
+ tslib_1.__decorate([
36
+ (0, type_graphql_1.Field)({ nullable: true }),
37
+ tslib_1.__metadata("design:type", String)
38
+ ], DataSummaryPatch.prototype, "cuFlag", void 0);
39
+ DataSummaryPatch = tslib_1.__decorate([
40
+ (0, type_graphql_1.InputType)()
41
+ ], DataSummaryPatch);
42
+ exports.DataSummaryPatch = DataSummaryPatch;
43
+ let DataSummaryList = class DataSummaryList {
44
+ };
45
+ tslib_1.__decorate([
46
+ (0, type_graphql_1.Field)(type => [data_summary_1.DataSummary]),
47
+ tslib_1.__metadata("design:type", Array)
48
+ ], DataSummaryList.prototype, "items", void 0);
49
+ tslib_1.__decorate([
50
+ (0, type_graphql_1.Field)(type => type_graphql_1.Int),
51
+ tslib_1.__metadata("design:type", Number)
52
+ ], DataSummaryList.prototype, "total", void 0);
53
+ DataSummaryList = tslib_1.__decorate([
54
+ (0, type_graphql_1.ObjectType)()
55
+ ], DataSummaryList);
56
+ exports.DataSummaryList = DataSummaryList;
57
+ //# sourceMappingURL=data-summary-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-summary-type.js","sourceRoot":"","sources":["../../../server/service/data-summary/data-summary-type.ts"],"names":[],"mappings":";;;;AAEA,+CAAsF;AAItF,iDAAqE;AAG9D,IAAM,cAAc,GAApB,MAAM,cAAc;CAM1B,CAAA;AALC;IAAC,IAAA,oBAAK,GAAE;;4CACI;AAEZ;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACN;AALT,cAAc;IAD1B,IAAA,wBAAS,GAAE;GACC,cAAc,CAM1B;AANY,wCAAc;AASpB,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAY5B,CAAA;AAXC;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CAC3B;AAEX;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACb;AAEb;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACN;AAEpB;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACX;AAXJ,gBAAgB;IAD5B,IAAA,wBAAS,GAAE;GACC,gBAAgB,CAY5B;AAZY,4CAAgB;AAetB,IAAM,eAAe,GAArB,MAAM,eAAe;CAM3B,CAAA;AALC;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0BAAW,CAAC,CAAC;;8CACT;AAEpB;IAAC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;8CACN;AALF,eAAe;IAD3B,IAAA,yBAAU,GAAE;GACA,eAAe,CAM3B;AANY,0CAAe","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'\n\nimport { ObjectRef, ScalarObject } from '@things-factory/shell'\n\nimport { DataSummary, DataSummaryDurationType } from './data-summary'\n\n@InputType()\nexport class NewDataSummary {\n @Field()\n name: string\n\n @Field({ nullable: true })\n description?: string\n}\n\n@InputType()\nexport class DataSummaryPatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class DataSummaryList {\n @Field(type => [DataSummary])\n items: DataSummary[]\n\n @Field(type => Int)\n total: number\n}\n"]}