@things-factory/dataset 9.0.0-beta.7 → 9.0.0-beta.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.
- package/dist-client/activities/activity-data-collect-edit.d.ts +8 -1
- package/dist-client/activities/activity-data-collect-edit.js +62 -9
- package/dist-client/activities/activity-data-collect-edit.js.map +1 -1
- package/dist-client/activities/activity-data-review-edit.d.ts +2 -0
- package/dist-client/activities/activity-data-review-edit.js +24 -4
- package/dist-client/activities/activity-data-review-edit.js.map +1 -1
- package/dist-client/activities/activity-data-review-view.d.ts +2 -0
- package/dist-client/activities/activity-data-review-view.js +26 -4
- package/dist-client/activities/activity-data-review-view.js.map +1 -1
- package/dist-client/activities/activity-ooc-resolve-edit.js +7 -0
- package/dist-client/activities/activity-ooc-resolve-edit.js.map +1 -1
- package/dist-client/activities/activity-ooc-resolve-view.js +7 -0
- package/dist-client/activities/activity-ooc-resolve-view.js.map +1 -1
- package/dist-client/activities/activity-ooc-review-edit.d.ts +1 -0
- package/dist-client/activities/activity-ooc-review-edit.js +28 -4
- package/dist-client/activities/activity-ooc-review-edit.js.map +1 -1
- package/dist-client/activities/activity-ooc-review-view.js +7 -0
- package/dist-client/activities/activity-ooc-review-view.js.map +1 -1
- package/dist-client/components/checklist-entry-form.d.ts +21 -0
- package/dist-client/components/checklist-entry-form.js +108 -0
- package/dist-client/components/checklist-entry-form.js.map +1 -0
- package/dist-client/components/data-entry-form.d.ts +3 -2
- package/dist-client/components/data-entry-form.js +2 -2
- package/dist-client/components/data-entry-form.js.map +1 -1
- package/dist-client/pages/data-entry/data-entry-list-page.d.ts +1 -0
- package/dist-client/pages/data-entry/data-entry-list-page.js +12 -2
- package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
- package/dist-client/pages/data-ooc/data-ooc-list-page.js +2 -2
- package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -1
- package/dist-client/pages/data-ooc/data-ooc-page.js +3 -0
- package/dist-client/pages/data-ooc/data-ooc-page.js.map +1 -1
- package/dist-client/pages/data-ooc/data-ooc-view.js +3 -0
- package/dist-client/pages/data-ooc/data-ooc-view.js.map +1 -1
- package/dist-client/pages/data-report/data-report-list-page.js +1 -1
- package/dist-client/pages/data-report/data-report-list-page.js.map +1 -1
- package/dist-client/pages/data-sample/data-sample-view.d.ts +2 -0
- package/dist-client/pages/data-sample/data-sample-view.js +27 -1
- package/dist-client/pages/data-sample/data-sample-view.js.map +1 -1
- package/dist-client/pages/data-sensor/data-sensor-list-page.js +24 -0
- package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -1
- package/dist-client/pages/data-set/data-item-list.js +9 -0
- package/dist-client/pages/data-set/data-item-list.js.map +1 -1
- package/dist-client/pages/data-set/data-set-list-page.d.ts +2 -0
- package/dist-client/pages/data-set/data-set-list-page.js +55 -9
- package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
- package/dist-client/pages/data-summary/data-summary-period-page.js +53 -37
- package/dist-client/pages/data-summary/data-summary-period-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/create-data-sample.js +11 -11
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/controllers/issue-data-collection-task.js +1 -1
- package/dist-server/controllers/issue-data-collection-task.js.map +1 -1
- package/dist-server/controllers/query-data-summary-by-period.d.ts +1 -1
- package/dist-server/controllers/query-data-summary-by-period.js +12 -11
- package/dist-server/controllers/query-data-summary-by-period.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-query.d.ts +1 -1
- package/dist-server/service/data-sample/data-sample-query.js +8 -1
- package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
- package/dist-server/service/data-sensor/data-sensor-type.d.ts +4 -0
- package/dist-server/service/data-sensor/data-sensor-type.js +16 -0
- package/dist-server/service/data-sensor/data-sensor-type.js.map +1 -1
- package/dist-server/service/data-sensor/data-sensor.d.ts +2 -0
- package/dist-server/service/data-sensor/data-sensor.js +10 -0
- package/dist-server/service/data-sensor/data-sensor.js.map +1 -1
- package/dist-server/service/data-set/data-item-type.d.ts +2 -0
- package/dist-server/service/data-set/data-item-type.js +14 -0
- package/dist-server/service/data-set/data-item-type.js.map +1 -1
- package/dist-server/service/data-set/data-set-mutation.js +2 -2
- package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
- package/dist-server/service/data-set/data-set.d.ts +1 -0
- package/dist-server/service/data-set/data-set.js +5 -0
- package/dist-server/service/data-set/data-set.js.map +1 -1
- package/dist-server/service/data-summary/data-summary-query.d.ts +1 -1
- package/dist-server/service/data-summary/data-summary-query.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -13
- package/things-factory.config.js +4 -0
- package/translations/en.json +3 -0
- package/translations/ja.json +3 -0
- package/translations/ko.json +3 -0
- package/translations/ms.json +3 -0
- package/translations/zh.json +3 -0
@@ -54,7 +54,7 @@ const formatDate = (keys, _moment) => {
|
|
54
54
|
};
|
55
55
|
async function createDataSample(newDataSample, context) {
|
56
56
|
const { domain, user, tx } = context.state;
|
57
|
-
const dataSet = await
|
57
|
+
const dataSet = await (0, shell_1.getRepository)(data_set_js_1.DataSet, tx).findOne({
|
58
58
|
where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, id: newDataSample.dataSet.id },
|
59
59
|
relations: ['dataKeySet']
|
60
60
|
});
|
@@ -78,7 +78,7 @@ async function createDataSample(newDataSample, context) {
|
|
78
78
|
partitionKeys = replaceVariables(partitionKeys, newDataSample.data);
|
79
79
|
const dataKeys = fillDataKeys(dataSet === null || dataSet === void 0 ? void 0 : dataSet.dataKeySet, newDataSample.data);
|
80
80
|
const { ooc, oos, judgment } = data_use_case_js_1.DataUseCase.evaluate(dataSet, dataItems, newDataSample.data) || {};
|
81
|
-
const old = await
|
81
|
+
const old = await (0, shell_1.getRepository)(data_sample_js_1.DataSample, tx).findOne({
|
82
82
|
where: Object.assign({ domain: { id: domain.id }, dataSet: { id: dataSet.id }, collectedAt }, dataKeys)
|
83
83
|
});
|
84
84
|
/*
|
@@ -105,7 +105,7 @@ async function createDataSample(newDataSample, context) {
|
|
105
105
|
refType: data_sample_js_1.DataSample.name
|
106
106
|
}
|
107
107
|
}, context);
|
108
|
-
const fetched = await
|
108
|
+
const fetched = await (0, shell_1.getRepository)(attachment_base_1.Attachment, tx).findOneBy({ id: attachment.id });
|
109
109
|
if (fetched) {
|
110
110
|
attachments.push(fetched);
|
111
111
|
paths.push({
|
@@ -130,7 +130,7 @@ async function createDataSample(newDataSample, context) {
|
|
130
130
|
}
|
131
131
|
}
|
132
132
|
}
|
133
|
-
const dataSample = await
|
133
|
+
const dataSample = await (0, shell_1.getRepository)(data_sample_js_1.DataSample, tx).save(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, old), { name: dataSet.name, description: dataSet.description, useCase: dataSet.useCase, type: dataSet.type }), newDataSample), dataKeys), { dataSetVersion: dataSet.version, domain,
|
134
134
|
partitionKeys,
|
135
135
|
ooc,
|
136
136
|
oos,
|
@@ -144,7 +144,7 @@ async function createDataSample(newDataSample, context) {
|
|
144
144
|
/* post-process for for file attachment. */
|
145
145
|
if (attachments.length > 0) {
|
146
146
|
attachments.forEach(attachment => (attachment.refId = dataSample.id));
|
147
|
-
|
147
|
+
(0, shell_1.getRepository)(attachment_base_1.Attachment, tx).save(attachments);
|
148
148
|
}
|
149
149
|
if (ooc || oos) {
|
150
150
|
const dataOoc = await (0, create_data_ooc_js_1.createDataOoc)(dataSample, dataSet, context);
|
@@ -156,7 +156,7 @@ async function createDataSample(newDataSample, context) {
|
|
156
156
|
type: 'error',
|
157
157
|
title: `[OOC] ${dataSet.name}`,
|
158
158
|
body: `Data OOC occurred on '${dataSet.name}'`,
|
159
|
-
url: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
159
|
+
url: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/data-ooc/${dataOoc.id}`),
|
160
160
|
timestamp: collectedAt
|
161
161
|
}
|
162
162
|
});
|
@@ -167,7 +167,7 @@ async function createDataSample(newDataSample, context) {
|
|
167
167
|
}
|
168
168
|
else {
|
169
169
|
if (normalScenarioId) {
|
170
|
-
const scenario = await
|
170
|
+
const scenario = await (0, shell_1.getRepository)(integration_base_1.Scenario, tx).findOne({
|
171
171
|
where: {
|
172
172
|
domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) },
|
173
173
|
id: normalScenarioId
|
@@ -207,13 +207,13 @@ async function createDataSample(newDataSample, context) {
|
|
207
207
|
}
|
208
208
|
}
|
209
209
|
if (dataSet.requiresReview) {
|
210
|
-
const activity = (await
|
210
|
+
const activity = (await (0, shell_1.getRepository)(worklist_1.Activity, tx).findOneBy({
|
211
211
|
domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) },
|
212
212
|
name: 'Data Review'
|
213
213
|
}));
|
214
214
|
if (activity) {
|
215
215
|
const assigneeRole = dataSet.supervisoryRoleId &&
|
216
|
-
(await
|
216
|
+
(await (0, shell_1.getRepository)(auth_base_1.Role, tx).findOneBy({
|
217
217
|
domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) },
|
218
218
|
id: dataSet.supervisoryRoleId
|
219
219
|
}));
|
@@ -237,7 +237,7 @@ async function createDataSample(newDataSample, context) {
|
|
237
237
|
approvalLine: dataSet.reviewApprovalLine
|
238
238
|
};
|
239
239
|
dataSample.reviewActivityInstance = await (0, issue_1.issue)(activityInstance, context);
|
240
|
-
await
|
240
|
+
await (0, shell_1.getRepository)(data_sample_js_1.DataSample, tx).save(dataSample);
|
241
241
|
try {
|
242
242
|
shell_1.pubsub.publish('notification', {
|
243
243
|
notification: {
|
@@ -245,7 +245,7 @@ async function createDataSample(newDataSample, context) {
|
|
245
245
|
type: 'info',
|
246
246
|
title: `[Data Review] ${dataSet.name}`,
|
247
247
|
body: `Data Review occurred on '${dataSet.name}'`,
|
248
|
-
url: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
248
|
+
url: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/data-sample/${dataSample.id}`),
|
249
249
|
timestamp: collectedAt
|
250
250
|
}
|
251
251
|
});
|
@@ -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'\nimport { In } from 'typeorm'\n\nimport { Attachment, createAttachment } from '@things-factory/attachment-base'\nimport { Role } from '@things-factory/auth-base'\nimport { logger } from '@things-factory/env'\nimport { getRedirectSubdomainPath, pubsub } from '@things-factory/shell'\nimport { getWorkDateAndShift } from '@things-factory/work-shift'\nimport { Scenario, publishData } from '@things-factory/integration-base'\nimport { Activity } from '@things-factory/worklist'\nimport { issue } from '@things-factory/worklist/dist-server/controllers/activity-instance/issue'\n\nimport { DataSample } from '../service/data-sample/data-sample.js'\nimport { NewDataSample } from '../service/data-sample/data-sample-type.js'\nimport { DataSet } from '../service/data-set/data-set.js'\nimport { createDataOoc } from './create-data-ooc.js'\nimport { issueOocReview } from './issue-ooc-review.js'\nimport { DataUseCase } from './data-use-case.js'\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(newDataSample: 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: In([domain.id, domain.parentId].filter(Boolean)) }, id: newDataSample.dataSet.id },\n relations: ['dataKeySet']\n })\n\n const { dataItems = [], tag: publishTag, normalScenarioId, outlierScenarioId } = dataSet\n const collectedAt = newDataSample.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: newDataSample.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, newDataSample.data)\n\n const dataKeys = fillDataKeys(dataSet?.dataKeySet, newDataSample.data)\n\n const { ooc, oos, judgment } = DataUseCase.evaluate(dataSet, dataItems, newDataSample.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 /* \n pre-processing for file attachment.\n currently only support type of [FileUpload].\n If [FileUpload[]] type needed, add 'files' type for dataset\n */\n\n const data = newDataSample.data\n const attachments = []\n\n for (let dataItem of dataItems) {\n if (dataItem.type == 'file') {\n const tag = dataItem.tag\n const filesArray = data[tag]\n\n if (tag && filesArray && filesArray.length > 0) {\n let pathsArray = []\n\n for (let files of filesArray) {\n let paths = []\n\n if (files instanceof Array) {\n for (let file of files) {\n if (file) {\n const attachment = await createAttachment(\n null,\n {\n attachment: {\n file: file.file,\n refType: DataSample.name\n }\n },\n context\n )\n\n const fetched = await tx.getRepository(Attachment).findOneBy({ id: attachment.id })\n if (fetched) {\n attachments.push(fetched)\n paths.push({\n id: fetched.id,\n mimetype: fetched.mimetype,\n name: fetched.name,\n fullpath: fetched.fullpath\n })\n } else {\n throw `Failed to save file(${attachment.name})`\n }\n } else {\n paths.push(null)\n }\n }\n }\n\n pathsArray.push(paths)\n }\n\n data[tag] = pathsArray\n }\n }\n }\n\n const dataSample = await tx.getRepository(DataSample).save({\n ...old,\n name: dataSet.name,\n description: dataSet.description,\n useCase: dataSet.useCase,\n type: dataSet.type,\n ...newDataSample,\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 (publishTag) {\n publishData(publishTag, data, { domain, user })\n }\n\n /* post-process for for file attachment. */\n if (attachments.length > 0) {\n attachments.forEach(attachment => (attachment.refId = dataSample.id))\n tx.getRepository(Attachment).save(attachments)\n }\n\n if (ooc || oos) {\n const dataOoc = await createDataOoc(dataSample, dataSet, context)\n await issueOocReview(dataOoc, dataSet, context)\n\n try {\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 } else {\n if (normalScenarioId) {\n const scenario = await tx.getRepository(Scenario).findOne({\n where: {\n domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },\n id: normalScenarioId\n },\n relations: ['domain', 'steps', 'updater']\n })\n\n if (scenario) {\n scenario.start({\n instanceName: scenario.name + ':' + dataSet.name + ':' + dataSample.id,\n domain,\n user,\n variables: {\n dataSampleId: dataSample.id,\n dataSet: dataSet.id,\n data,\n ooc,\n oos,\n judgment,\n collectedAt,\n workDate,\n workShift,\n domain: {\n id: domain.id,\n subdomain: domain.subdomain,\n name: domain.name\n },\n updator: {\n id: user.id,\n email: user.email,\n name: user.name\n }\n }\n })\n } else {\n console.error(`Cannot find the set normal-scenario for the dataset(${dataSet.name}).`)\n }\n }\n\n if (dataSet.requiresReview) {\n const activity = (await tx.getRepository(Activity).findOneBy({\n domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },\n name: 'Data Review'\n })) as Activity\n\n if (activity) {\n const assigneeRole =\n dataSet.supervisoryRoleId &&\n (await tx.getRepository(Role).findOneBy({\n domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },\n id: dataSet.supervisoryRoleId\n }))\n\n // const assignees = dataSet.supervisoryRoleId\n // ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assigneeRole }]\n // : []\n\n /* 해당 dataset의 supervisor로 하여금, data를 리뷰하고 instruction을 작성해서, approvalLine을 이용해서 승인을 한다. */\n if (assigneeRole) {\n dataSample.dataItems = dataItems\n const activityInstance = {\n name: `[Data 검토] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(collectedAt.getTime() + (activity.standardTime || 24 * 60 * 60) * 1000),\n input: {\n dataSampleId: dataSample.id\n },\n assigneeRole,\n threadsMin: 1,\n threadsMax: 1,\n approvalLine: dataSet.reviewApprovalLine\n }\n\n dataSample.reviewActivityInstance = await issue(activityInstance as any, context)\n await tx.getRepository(DataSample).save(dataSample)\n\n try {\n pubsub.publish('notification', {\n notification: {\n domain,\n type: 'info',\n title: `[Data Review] ${dataSet.name}`,\n body: `Data Review occurred on '${dataSet.name}'`,\n url: getRedirectSubdomainPath(context, domain.subdomain, `/data-sample/${dataSample.id}`),\n timestamp: collectedAt\n }\n })\n } catch (err) {\n logger.error('Notification', err)\n }\n } else {\n console.error(\n `Assignees are not set. So Data Review task for ${dataSet.name}(${dataSet.id}) could not be issued.`\n )\n }\n } else {\n console.error('Data Review Activity not installed.')\n }\n }\n }\n\n return dataSample\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'\nimport { In } from 'typeorm'\n\nimport { Attachment, createAttachment } from '@things-factory/attachment-base'\nimport { Role } from '@things-factory/auth-base'\nimport { logger } from '@things-factory/env'\nimport { getRepository, getRedirectSubdomainPath, pubsub } from '@things-factory/shell'\nimport { getWorkDateAndShift } from '@things-factory/work-shift'\nimport { Scenario, publishData } from '@things-factory/integration-base'\nimport { Activity } from '@things-factory/worklist'\nimport { issue } from '@things-factory/worklist/dist-server/controllers/activity-instance/issue'\n\nimport { DataSample } from '../service/data-sample/data-sample.js'\nimport { NewDataSample } from '../service/data-sample/data-sample-type.js'\nimport { DataSet } from '../service/data-set/data-set.js'\nimport { createDataOoc } from './create-data-ooc.js'\nimport { issueOocReview } from './issue-ooc-review.js'\nimport { DataUseCase } from './data-use-case.js'\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(newDataSample: NewDataSample, context: ResolverContext): Promise<DataSample> {\n const { domain, user, tx } = context.state\n\n const dataSet = await getRepository(DataSet, tx).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: newDataSample.dataSet.id },\n relations: ['dataKeySet']\n })\n\n const { dataItems = [], tag: publishTag, normalScenarioId, outlierScenarioId } = dataSet\n const collectedAt = newDataSample.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: newDataSample.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, newDataSample.data)\n\n const dataKeys = fillDataKeys(dataSet?.dataKeySet, newDataSample.data)\n\n const { ooc, oos, judgment } = DataUseCase.evaluate(dataSet, dataItems, newDataSample.data) || {}\n\n const old = await getRepository(DataSample, tx).findOne({\n where: {\n domain: { id: domain.id },\n dataSet: { id: dataSet.id },\n collectedAt,\n ...dataKeys\n }\n })\n\n /* \n pre-processing for file attachment.\n currently only support type of [FileUpload].\n If [FileUpload[]] type needed, add 'files' type for dataset\n */\n\n const data = newDataSample.data\n const attachments = []\n\n for (let dataItem of dataItems) {\n if (dataItem.type == 'file') {\n const tag = dataItem.tag\n const filesArray = data[tag]\n\n if (tag && filesArray && filesArray.length > 0) {\n let pathsArray = []\n\n for (let files of filesArray) {\n let paths = []\n\n if (files instanceof Array) {\n for (let file of files) {\n if (file) {\n const attachment = await createAttachment(\n null,\n {\n attachment: {\n file: file.file,\n refType: DataSample.name\n }\n },\n context\n )\n\n const fetched = await getRepository(Attachment, tx).findOneBy({ id: attachment.id })\n if (fetched) {\n attachments.push(fetched)\n paths.push({\n id: fetched.id,\n mimetype: fetched.mimetype,\n name: fetched.name,\n fullpath: fetched.fullpath\n })\n } else {\n throw `Failed to save file(${attachment.name})`\n }\n } else {\n paths.push(null)\n }\n }\n }\n\n pathsArray.push(paths)\n }\n\n data[tag] = pathsArray\n }\n }\n }\n\n const dataSample = await getRepository(DataSample, tx).save({\n ...old,\n name: dataSet.name,\n description: dataSet.description,\n useCase: dataSet.useCase,\n type: dataSet.type,\n ...newDataSample,\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 (publishTag) {\n publishData(publishTag, data, { domain, user })\n }\n\n /* post-process for for file attachment. */\n if (attachments.length > 0) {\n attachments.forEach(attachment => (attachment.refId = dataSample.id))\n getRepository(Attachment, tx).save(attachments)\n }\n\n if (ooc || oos) {\n const dataOoc = await createDataOoc(dataSample, dataSet, context)\n await issueOocReview(dataOoc, dataSet, context)\n\n try {\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, `/data-ooc/${dataOoc.id}`),\n timestamp: collectedAt\n }\n })\n } catch (err) {\n logger.error('Notification', err)\n }\n } else {\n if (normalScenarioId) {\n const scenario = await getRepository(Scenario, tx).findOne({\n where: {\n domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },\n id: normalScenarioId\n },\n relations: ['domain', 'steps', 'updater']\n })\n\n if (scenario) {\n scenario.start({\n instanceName: scenario.name + ':' + dataSet.name + ':' + dataSample.id,\n domain,\n user,\n variables: {\n dataSampleId: dataSample.id,\n dataSet: dataSet.id,\n data,\n ooc,\n oos,\n judgment,\n collectedAt,\n workDate,\n workShift,\n domain: {\n id: domain.id,\n subdomain: domain.subdomain,\n name: domain.name\n },\n updator: {\n id: user.id,\n email: user.email,\n name: user.name\n }\n }\n })\n } else {\n console.error(`Cannot find the set normal-scenario for the dataset(${dataSet.name}).`)\n }\n }\n\n if (dataSet.requiresReview) {\n const activity = (await getRepository(Activity, tx).findOneBy({\n domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },\n name: 'Data Review'\n })) as Activity\n\n if (activity) {\n const assigneeRole =\n dataSet.supervisoryRoleId &&\n (await getRepository(Role, tx).findOneBy({\n domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },\n id: dataSet.supervisoryRoleId\n }))\n\n // const assignees = dataSet.supervisoryRoleId\n // ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assigneeRole }]\n // : []\n\n /* 해당 dataset의 supervisor로 하여금, data를 리뷰하고 instruction을 작성해서, approvalLine을 이용해서 승인을 한다. */\n if (assigneeRole) {\n dataSample.dataItems = dataItems\n const activityInstance = {\n name: `[Data 검토] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(collectedAt.getTime() + (activity.standardTime || 24 * 60 * 60) * 1000),\n input: {\n dataSampleId: dataSample.id\n },\n assigneeRole,\n threadsMin: 1,\n threadsMax: 1,\n approvalLine: dataSet.reviewApprovalLine\n }\n\n dataSample.reviewActivityInstance = await issue(activityInstance as any, context)\n await getRepository(DataSample, tx).save(dataSample)\n\n try {\n pubsub.publish('notification', {\n notification: {\n domain,\n type: 'info',\n title: `[Data Review] ${dataSet.name}`,\n body: `Data Review occurred on '${dataSet.name}'`,\n url: getRedirectSubdomainPath(context, domain, `/data-sample/${dataSample.id}`),\n timestamp: collectedAt\n }\n })\n } catch (err) {\n logger.error('Notification', err)\n }\n } else {\n console.error(\n `Assignees are not set. So Data Review task for ${dataSet.name}(${dataSet.id}) could not be issued.`\n )\n }\n } else {\n console.error('Data Review Activity not installed.')\n }\n }\n }\n\n return dataSample\n}\n"]}
|
@@ -6,7 +6,7 @@ const shell_1 = require("@things-factory/shell");
|
|
6
6
|
const worklist_1 = require("@things-factory/worklist");
|
7
7
|
const data_set_js_1 = require("../service/data-set/data-set.js");
|
8
8
|
async function issueDataCollectionTask(domainId, dataSetId, context) {
|
9
|
-
await (0, shell_1.getDataSource)().transaction(async (tx) => {
|
9
|
+
return await (0, shell_1.getDataSource)().transaction(async (tx) => {
|
10
10
|
const domain = await tx.getRepository(shell_1.Domain).findOneBy({ id: domainId });
|
11
11
|
if (!domain) {
|
12
12
|
throw new Error(`domain(${domainId}) not found`);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"issue-data-collection-task.js","sourceRoot":"","sources":["../../server/controllers/issue-data-collection-task.ts"],"names":[],"mappings":";;AAOA,0DA8DC;AArED,qCAA4B;AAE5B,iDAA6D;AAC7D,uDAA4E;AAE5E,iEAAyD;AAElD,KAAK,UAAU,uBAAuB,CAC3C,QAAgB,EAChB,SAAiB,EACjB,OAAwB;IAExB,MAAM,IAAA,qBAAa,GAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;
|
1
|
+
{"version":3,"file":"issue-data-collection-task.js","sourceRoot":"","sources":["../../server/controllers/issue-data-collection-task.ts"],"names":[],"mappings":";;AAOA,0DA8DC;AArED,qCAA4B;AAE5B,iDAA6D;AAC7D,uDAA4E;AAE5E,iEAAyD;AAElD,KAAK,UAAU,uBAAuB,CAC3C,QAAgB,EAChB,SAAiB,EACjB,OAAwB;IAExB,OAAO,MAAM,IAAA,qBAAa,GAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,cAAM,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEzE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,aAAa,CAAC,CAAA;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,qBAAO,CAAC,CAAC,OAAO,CAAC;YACtD,KAAK,EAAE;gBACL,MAAM,EAAE;oBACN,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBACrD;gBACD,EAAE,EAAE,SAAS;aACd;YACD,SAAS,EAAE,CAAC,WAAW,CAAC;SACzB,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,mBAAQ,CAAC,CAAC,SAAS,CAAC;YAC3D,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;YAChE,IAAI,EAAE,cAAc;SACrB,CAAC,CAAa,CAAA;QAEf,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;YAExC,0DAA0D;YAC1D,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,gBAAgB,GAAG;oBACvB,IAAI,EAAE,aAAa,OAAO,CAAC,IAAI,EAAE;oBACjC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,UAAU,EAAE,QAAQ,CAAC,EAAE;oBACvB,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,YAAY,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;oBACzF,KAAK,EAAE;wBACL,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,WAAW,EAAE,OAAO,CAAC,IAAI;qBAC1B;oBACD,YAAY,EAAE,SAAS;oBACvB,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,CAAC;iBACd,CAAA;gBAED,OAAO,CAAC,KAAK,mCACR,OAAO,CAAC,KAAK,KAChB,MAAM;oBACN,EAAE,GACH,CAAA;gBAED,OAAO,MAAM,IAAA,gBAAK,EAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,yDAAyD,OAAO,CAAC,IAAI,oCAAoC,CAC1G,CAAA;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { In } from 'typeorm'\n\nimport { Domain, getDataSource } from '@things-factory/shell'\nimport { Activity, ActivityInstance, issue } from '@things-factory/worklist'\n\nimport { DataSet } from '../service/data-set/data-set.js'\n\nexport async function issueDataCollectionTask(\n domainId: string,\n dataSetId: string,\n context: ResolverContext\n): Promise<ActivityInstance | void> {\n return await getDataSource().transaction(async tx => {\n const domain = await tx.getRepository(Domain).findOneBy({ id: domainId })\n\n if (!domain) {\n throw new Error(`domain(${domainId}) not found`)\n }\n\n const dataSet = await tx.getRepository(DataSet).findOne({\n where: {\n domain: {\n id: In([domain.id, domain.parentId].filter(Boolean))\n },\n id: dataSetId\n },\n relations: ['entryRole']\n })\n\n const activity = (await tx.getRepository(Activity).findOneBy({\n domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },\n name: 'Collect Data'\n })) as Activity\n\n if (activity) {\n const { entryRole, timeLimit } = dataSet\n\n /* 해당 dataset에 대한 데이타 수집 태스크를 dataset entryRole에게 할당한다. */\n if (entryRole) {\n const activityInstance = {\n name: `[Data 수집] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(Date.now() + (timeLimit || activity.standardTime || 24 * 60 * 60) * 1000),\n input: {\n dataSetId: dataSet.id,\n dataSetName: dataSet.name\n },\n assigneeRole: entryRole,\n threadsMin: 1,\n threadsMax: 1\n }\n\n context.state = {\n ...context.state,\n domain,\n tx\n }\n\n return await issue(activityInstance, context)\n } else {\n throw new Error(\n `Data Entry Role not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`\n )\n }\n } else {\n throw new Error(`Data Collect Activity is not installed.`)\n }\n })\n}\n"]}
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import { ListParam } from '@things-factory/shell';
|
2
2
|
import { DataSummary } from '../service/data-summary/data-summary.js';
|
3
|
-
export declare function queryDataSummaryByPeriod(period: 'today' | 'this month' | '30 days' | 'this year' | '12 months', dataSetName: string, dataKeys: string[] | null, params: ListParam, context: ResolverContext): Promise<DataSummary[]>;
|
3
|
+
export declare function queryDataSummaryByPeriod(period: 'today' | 'this month' | '30 days' | 'this year' | '12 months' | 'date range' | 'month', dataSetName: string, dataKeys: string[] | null, params: ListParam, context: ResolverContext): Promise<DataSummary[]>;
|
@@ -17,7 +17,7 @@ const STAT_FUNCTION_MAP = {
|
|
17
17
|
mode: 'mode'
|
18
18
|
};
|
19
19
|
async function queryDataSummaryByPeriod(period, dataSetName, dataKeys, params, context) {
|
20
|
-
var _a;
|
20
|
+
var _a, _b;
|
21
21
|
const { domain, user, tx } = context.state;
|
22
22
|
const { t } = context;
|
23
23
|
const dataSet = await (0, shell_1.getRepository)(data_set_js_1.DataSet).findOne({
|
@@ -47,7 +47,14 @@ async function queryDataSummaryByPeriod(period, dataSetName, dataKeys, params, c
|
|
47
47
|
: dataSet.dataKeySet.dataKeyItems;
|
48
48
|
const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`);
|
49
49
|
const dataItems = dataSet.dataItems.filter(item => item.agg);
|
50
|
-
const {
|
50
|
+
const { date, month } = params.filters.reduce((acc, filter) => {
|
51
|
+
if (filter.name === 'date')
|
52
|
+
acc.date = filter.value;
|
53
|
+
if (filter.name === 'month')
|
54
|
+
acc.month = filter.value;
|
55
|
+
return acc;
|
56
|
+
}, { date: null, month: null });
|
57
|
+
const { from, to } = await (0, shell_1.getTimesForPeriod)(period, { date, month }, context);
|
51
58
|
const selectPeriod = queryBuilder => {
|
52
59
|
if (period == 'today') {
|
53
60
|
queryBuilder.addSelect('summary.date', 'date').addSelect('summary.period', 'period');
|
@@ -107,14 +114,8 @@ async function queryDataSummaryByPeriod(period, dataSetName, dataKeys, params, c
|
|
107
114
|
const desc = false;
|
108
115
|
var orderByPeriod = period == 'today'
|
109
116
|
? [
|
110
|
-
{
|
111
|
-
|
112
|
-
desc
|
113
|
-
},
|
114
|
-
{
|
115
|
-
name: 'period',
|
116
|
-
desc
|
117
|
-
}
|
117
|
+
{ name: 'date', desc },
|
118
|
+
{ name: 'period', desc }
|
118
119
|
]
|
119
120
|
: ['this year', '12 months'].includes(period)
|
120
121
|
? [{ name: 'month', desc }]
|
@@ -124,7 +125,7 @@ async function queryDataSummaryByPeriod(period, dataSetName, dataKeys, params, c
|
|
124
125
|
}
|
125
126
|
var queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
|
126
127
|
repository: (0, shell_1.getRepository)(data_summary_js_1.DataSummary),
|
127
|
-
params: Object.assign(Object.assign({}, params), { sortings: [] }),
|
128
|
+
params: Object.assign(Object.assign({}, params), { filters: ((_b = params === null || params === void 0 ? void 0 : params.filters) === null || _b === void 0 ? void 0 : _b.filter(({ name }) => name !== 'date' && name !== 'month')) || [], sortings: [] }),
|
128
129
|
domain,
|
129
130
|
alias: 'summary',
|
130
131
|
searchables: searchables
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"query-data-summary-by-period.js","sourceRoot":"","sources":["../../server/controllers/query-data-summary-by-period.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\n\nimport {\n getQueryBuilderFromListParams,\n getRepository,\n getTimesForPeriod,\n ListParam,\n Sorting\n} from '@things-factory/shell'\n\nimport { DataSet, DataSetSummaryPeriodType } from '../service/data-set/data-set.js'\nimport { DataSummary } from '../service/data-summary/data-summary.js'\n\nconst STAT_FUNCTION_MAP = {\n sum: 'sum',\n mean: 'mean',\n stddev: 'standardDeviation',\n variance: 'variance',\n min: 'min',\n max: 'max',\n range: 'range',\n median: 'median',\n mode: 'mode'\n}\n\nexport async function queryDataSummaryByPeriod(\n period: 'today' | 'this month' | '30 days' | 'this year' | '12 months',\n dataSetName: string,\n dataKeys: string[] | null,\n params: ListParam,\n context: ResolverContext\n): Promise<DataSummary[]> {\n const { domain, user, tx } = context.state\n const { t } = context\n\n const dataSet = await getRepository(DataSet).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name: dataSetName },\n relations: ['dataKeySet']\n })\n\n if (!dataSet) {\n throw new Error(t('error.dataset not found', { dataSetName }))\n }\n\n // limitations\n const summaryPeriodType = dataSet.summaryPeriod\n if (\n (summaryPeriodType == DataSetSummaryPeriodType.Day || summaryPeriodType == DataSetSummaryPeriodType.WorkDate) &&\n period == 'today'\n ) {\n throw new Error(t('error.summary not supported', { dataSetName, period: t(`label.period-${period}`) }))\n }\n\n // dataKeys 가 설정되지 않았다면, dataSet의 dataKeySet을 그대로 적용한다는 의미임.\n // dataKeys == [] 라면, dataKeySet을 적용하지 않는다는 의미임.\n // dataKeys에는 dataKeySet의 dataKey 값을 따라야 한다.\n const dataKeyItems = !dataSet.dataKeySet?.dataKeyItems\n ? []\n : dataKeys\n ? dataKeys\n .map(dataKey => {\n return dataSet.dataKeySet.dataKeyItems.find(item => item.dataKey == dataKey)\n })\n .filter(Boolean)\n : dataSet.dataKeySet.dataKeyItems\n\n const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)\n const dataItems = dataSet.dataItems.filter(item => item.agg)\n\n const { from, to } = await getTimesForPeriod(period, context)\n\n const selectPeriod = queryBuilder => {\n if (period == 'today') {\n queryBuilder.addSelect('summary.date', 'date').addSelect('summary.period', 'period')\n } else if (['this year', '12 months'].includes(period)) {\n queryBuilder.addSelect('SUBSTRING(summary.date, 1, 7) AS month')\n } else {\n queryBuilder.addSelect('summary.date', 'date')\n }\n\n return queryBuilder\n }\n const selectKeys = dataKeyItems.map((item, index) => {\n const aliasName = `key0${index + 1}`\n const columnName = `summary.${aliasName}`\n\n return `${columnName} as ${aliasName}`\n }) as string[]\n const selectData = dataItems.map((item, index) => {\n const aliasName = `data0${index + 1}`\n const columnName = `summary.${aliasName}`\n\n switch (item.agg) {\n case STAT_FUNCTION_MAP.sum:\n return `SUM(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.mean:\n // 일차 mean 된 값들을 다시 계산하므로, 무의미할 수 있다.\n return `AVG(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.stddev:\n // 일차 stddev 된 값들을 다시 계산하므로, 무의미할 수 있다.\n return `STDDEV(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.variance:\n // 일차 variance 된 값들을 다시 계산하므로, 무의미할 수 있다.\n return `VARIANCE(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.min:\n return `MIN(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.max:\n return `MAX(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.range:\n // 일차 range 값들을 다시 계산하므로, 무의미할 수 있다.\n return `MAX(${columnName}) - MIN(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.mode:\n // not guaranteed\n return `MODE() WITHIN GROUP (ORDER BY ${columnName})`\n default:\n return `AVG(${columnName}) as ${aliasName}`\n }\n })\n\n const groupByPeriod =\n period == 'today'\n ? 'summary.date, summary.period'\n : ['this year', '12 months'].includes(period)\n ? 'SUBSTRING(summary.date, 1, 7)'\n : 'summary.date'\n const groupByKeys = dataKeyItems\n .map((item, index) => {\n return `summary.key0${index + 1}`\n })\n .join(', ')\n\n const desc = false\n var orderByPeriod: Sorting[] =\n period == 'today'\n ? [\n {\n name: 'date',\n desc\n },\n {\n name: 'period',\n desc\n }\n ]\n : ['this year', '12 months'].includes(period)\n ? [{ name: 'month', desc }]\n : [{ name: 'date', desc }]\n\n if (params?.sortings && params.sortings.length > 0) {\n orderByPeriod = params.sortings\n }\n\n var queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSummary),\n params: {\n ...params,\n sortings: []\n },\n domain,\n alias: 'summary',\n searchables: searchables\n })\n .select('summary.dataSet')\n .addSelect(selectData)\n .addSelect('SUM(summary.count)', 'count')\n .addSelect('SUM(summary.countOoc)', 'countOoc')\n .addSelect('SUM(summary.countOos)', 'countOos')\n\n queryBuilder = selectPeriod(queryBuilder)\n .innerJoin('summary.dataSet', 'ds', 'ds.id = :dataSetName', {\n dataSetName: dataSet.id\n })\n .andWhere('summary.domain = :domain', { domain: domain.id })\n .andWhere('summary.date >= :from', { from })\n .andWhere('summary.date < :to', { to })\n .addGroupBy('summary.dataSet')\n .addGroupBy(groupByPeriod)\n\n if (dataKeyItems.length > 0) {\n queryBuilder.addSelect(selectKeys).addGroupBy(groupByKeys)\n }\n\n orderByPeriod.map(orderBy => {\n const { name: sort, desc } = orderBy\n queryBuilder.addOrderBy(sort, desc ? 'DESC' : 'ASC')\n })\n\n const items = await queryBuilder.getRawMany()\n\n return items\n}\n"]}
|
1
|
+
{"version":3,"file":"query-data-summary-by-period.js","sourceRoot":"","sources":["../../server/controllers/query-data-summary-by-period.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\n\nimport {\n getQueryBuilderFromListParams,\n getRepository,\n getTimesForPeriod,\n ListParam,\n Sorting\n} from '@things-factory/shell'\n\nimport { DataSet, DataSetSummaryPeriodType } from '../service/data-set/data-set.js'\nimport { DataSummary } from '../service/data-summary/data-summary.js'\n\nconst STAT_FUNCTION_MAP = {\n sum: 'sum',\n mean: 'mean',\n stddev: 'standardDeviation',\n variance: 'variance',\n min: 'min',\n max: 'max',\n range: 'range',\n median: 'median',\n mode: 'mode'\n}\n\nexport async function queryDataSummaryByPeriod(\n period: 'today' | 'this month' | '30 days' | 'this year' | '12 months' | 'date range' | 'month',\n dataSetName: string,\n dataKeys: string[] | null,\n params: ListParam,\n context: ResolverContext\n): Promise<DataSummary[]> {\n const { domain, user, tx } = context.state\n const { t } = context\n\n const dataSet = await getRepository(DataSet).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name: dataSetName },\n relations: ['dataKeySet']\n })\n\n if (!dataSet) {\n throw new Error(t('error.dataset not found', { dataSetName }))\n }\n\n // limitations\n const summaryPeriodType = dataSet.summaryPeriod\n if (\n (summaryPeriodType == DataSetSummaryPeriodType.Day || summaryPeriodType == DataSetSummaryPeriodType.WorkDate) &&\n period == 'today'\n ) {\n throw new Error(t('error.summary not supported', { dataSetName, period: t(`label.period-${period}`) }))\n }\n\n // dataKeys 가 설정되지 않았다면, dataSet의 dataKeySet을 그대로 적용한다는 의미임.\n // dataKeys == [] 라면, dataKeySet을 적용하지 않는다는 의미임.\n // dataKeys에는 dataKeySet의 dataKey 값을 따라야 한다.\n const dataKeyItems = !dataSet.dataKeySet?.dataKeyItems\n ? []\n : dataKeys\n ? dataKeys\n .map(dataKey => {\n return dataSet.dataKeySet.dataKeyItems.find(item => item.dataKey == dataKey)\n })\n .filter(Boolean)\n : dataSet.dataKeySet.dataKeyItems\n\n const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)\n const dataItems = dataSet.dataItems.filter(item => item.agg)\n\n const { date, month } = params.filters.reduce(\n (acc, filter) => {\n if (filter.name === 'date') acc.date = filter.value\n if (filter.name === 'month') acc.month = filter.value\n return acc\n },\n { date: null, month: null }\n )\n\n const { from, to } = await getTimesForPeriod(period, { date, month }, context)\n\n const selectPeriod = queryBuilder => {\n if (period == 'today') {\n queryBuilder.addSelect('summary.date', 'date').addSelect('summary.period', 'period')\n } else if (['this year', '12 months'].includes(period)) {\n queryBuilder.addSelect('SUBSTRING(summary.date, 1, 7) AS month')\n } else {\n queryBuilder.addSelect('summary.date', 'date')\n }\n\n return queryBuilder\n }\n const selectKeys = dataKeyItems.map((item, index) => {\n const aliasName = `key0${index + 1}`\n const columnName = `summary.${aliasName}`\n\n return `${columnName} as ${aliasName}`\n }) as string[]\n const selectData = dataItems.map((item, index) => {\n const aliasName = `data0${index + 1}`\n const columnName = `summary.${aliasName}`\n\n switch (item.agg) {\n case STAT_FUNCTION_MAP.sum:\n return `SUM(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.mean:\n // 일차 mean 된 값들을 다시 계산하므로, 무의미할 수 있다.\n return `AVG(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.stddev:\n // 일차 stddev 된 값들을 다시 계산하므로, 무의미할 수 있다.\n return `STDDEV(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.variance:\n // 일차 variance 된 값들을 다시 계산하므로, 무의미할 수 있다.\n return `VARIANCE(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.min:\n return `MIN(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.max:\n return `MAX(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.range:\n // 일차 range 값들을 다시 계산하므로, 무의미할 수 있다.\n return `MAX(${columnName}) - MIN(${columnName}) as ${aliasName}`\n case STAT_FUNCTION_MAP.mode:\n // not guaranteed\n return `MODE() WITHIN GROUP (ORDER BY ${columnName})`\n default:\n return `AVG(${columnName}) as ${aliasName}`\n }\n })\n\n const groupByPeriod =\n period == 'today'\n ? 'summary.date, summary.period'\n : ['this year', '12 months'].includes(period)\n ? 'SUBSTRING(summary.date, 1, 7)'\n : 'summary.date'\n const groupByKeys = dataKeyItems\n .map((item, index) => {\n return `summary.key0${index + 1}`\n })\n .join(', ')\n\n const desc = false\n var orderByPeriod: Sorting[] =\n period == 'today'\n ? [\n { name: 'date', desc },\n { name: 'period', desc }\n ]\n : ['this year', '12 months'].includes(period)\n ? [{ name: 'month', desc }]\n : [{ name: 'date', desc }]\n\n if (params?.sortings && params.sortings.length > 0) {\n orderByPeriod = params.sortings\n }\n\n var queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSummary),\n params: {\n ...params,\n filters: params?.filters?.filter(({ name }) => name !== 'date' && name !== 'month') || [],\n sortings: []\n },\n domain,\n alias: 'summary',\n searchables: searchables\n })\n .select('summary.dataSet')\n .addSelect(selectData)\n .addSelect('SUM(summary.count)', 'count')\n .addSelect('SUM(summary.countOoc)', 'countOoc')\n .addSelect('SUM(summary.countOos)', 'countOos')\n\n queryBuilder = selectPeriod(queryBuilder)\n .innerJoin('summary.dataSet', 'ds', 'ds.id = :dataSetName', {\n dataSetName: dataSet.id\n })\n .andWhere('summary.domain = :domain', { domain: domain.id })\n .andWhere('summary.date >= :from', { from })\n .andWhere('summary.date < :to', { to })\n .addGroupBy('summary.dataSet')\n .addGroupBy(groupByPeriod)\n\n if (dataKeyItems.length > 0) {\n queryBuilder.addSelect(selectKeys).addGroupBy(groupByKeys)\n }\n\n orderByPeriod.map(orderBy => {\n const { name: sort, desc } = orderBy\n queryBuilder.addOrderBy(sort, desc ? 'DESC' : 'ASC')\n })\n\n const items = await queryBuilder.getRawMany()\n\n return items\n}\n"]}
|
@@ -11,7 +11,7 @@ export declare class DataSampleQuery {
|
|
11
11
|
dataSamples(params: ListParam, context: ResolverContext): Promise<DataSampleList>;
|
12
12
|
dataSamplesByDataSet(dataSetId: string, params: ListParam, context: ResolverContext): Promise<DataSampleList>;
|
13
13
|
dataSamplesByDataKeySet(dataKeySetId: string, params: ListParam, context: ResolverContext): Promise<DataSampleList>;
|
14
|
-
dataSamplesByPeriod(period: 'today' | 'this month' | '30 days' | 'this year' | '12 months', dataSetName: string, params: ListParam, context: ResolverContext): Promise<DataSampleList>;
|
14
|
+
dataSamplesByPeriod(period: 'today' | 'this month' | '30 days' | 'this year' | '12 months' | 'date range' | 'month', dataSetName: string, params: ListParam, context: ResolverContext): Promise<DataSampleList>;
|
15
15
|
dataItems(dataSample: DataSample): Promise<DataItem[]>;
|
16
16
|
dataSet(dataSample: DataSample): Promise<DataSet>;
|
17
17
|
dataOoc(dataSample: DataSample): Promise<DataOoc>;
|
@@ -76,7 +76,14 @@ let DataSampleQuery = class DataSampleQuery {
|
|
76
76
|
async dataSamplesByPeriod(period, dataSetName, params, context) {
|
77
77
|
var _a;
|
78
78
|
const { domain } = context.state;
|
79
|
-
const {
|
79
|
+
const { date, month } = params.filters.reduce((acc, filter) => {
|
80
|
+
if (filter.name === 'date')
|
81
|
+
acc.date = filter.value;
|
82
|
+
if (filter.name === 'month')
|
83
|
+
acc.month = filter.value;
|
84
|
+
return acc;
|
85
|
+
}, { date: null, month: null });
|
86
|
+
const { from, to } = await (0, shell_1.getISOStringsForPeriod)(period, { date, month }, context);
|
80
87
|
const dataSet = await (0, shell_1.getRepository)(data_set_js_1.DataSet).findOne({
|
81
88
|
where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, name: dataSetName },
|
82
89
|
relations: ['dataKeySet']
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-sample-query.js","sourceRoot":"","sources":["../../../server/service/data-sample/data-sample-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\nimport { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport {\n Domain,\n getQueryBuilderFromListParams,\n getRepository,\n getISOStringsForPeriod,\n ListParam\n} from '@things-factory/shell'\nimport { ActivityInstance } from '@things-factory/worklist'\n\nimport { DataKeySet } from '../data-key-set/data-key-set.js'\nimport { DataSetHistory } from '../data-set-history/data-set-history.js'\nimport { DataItem } from '../data-set/data-item-type.js'\nimport { DataSet } from '../data-set/data-set.js'\nimport { DataOoc } from '../data-ooc/data-ooc.js'\nimport { DataSample } from './data-sample.js'\nimport { DataSampleList } from './data-sample-type.js'\n\n@Resolver(DataSample)\nexport class DataSampleQuery {\n @Directive('@privilege(category: \"data-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSample, { description: 'To fetch a data sample' })\n async dataSample(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<DataSample> {\n const { domain } = context.state\n\n return await getRepository(DataSample).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Directive('@privilege(category: \"data-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSampleList, { description: 'To fetch multiple data samples' })\n async dataSamples(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSample),\n params,\n domain,\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-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSampleList, { description: 'To fetch multiple data samples by data set' })\n async dataSamplesByDataSet(\n @Arg('dataSetId') dataSetId: string,\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\n const { domain } = context.state\n\n const dataSet = await getRepository(DataSet).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId },\n relations: ['dataKeySet']\n })\n\n if (!dataSet) {\n throw new Error(`dataSet not found by the given dataSetId(${dataSetId})`)\n }\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSample),\n params,\n domain,\n alias: 'sample',\n searchables: ['name', 'description'].concat(searchables)\n }).innerJoin('sample.dataSet', 'ds', 'ds.id = :dataSetId', {\n dataSetId\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"data-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSampleList, { description: 'To fetch multiple data samples by data key set' })\n async dataSamplesByDataKeySet(\n @Arg('dataKeySetId') dataKeySetId: string,\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\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(DataSample),\n params,\n domain,\n alias: 'sample',\n searchables: ['name', 'description'].concat(searchables)\n }).innerJoin('sample.dataSet', 'ds', 'ds.dataKeySet = :dataKeySetId', {\n dataKeySetId\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => DataSampleList, { description: 'To fetch multiple DataSamples by period' })\n async dataSamplesByPeriod(\n @Arg('period') period: 'today' | 'this month' | '30 days' | 'this year' | '12 months',\n @Arg('dataSetName') dataSetName: string,\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\n const { domain } = context.state\n const { from, to } = await getISOStringsForPeriod(period, context)\n\n const dataSet = await getRepository(DataSet).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name: dataSetName },\n relations: ['dataKeySet']\n })\n\n if (!dataSet) {\n throw new Error(`dataSet not found by the given dataSetName(${dataSetName})`)\n }\n\n const { filters = [] } = params || {}\n const alteredFilters = filters.concat([\n {\n name: 'collectedAt',\n operator: 'between',\n value: [from, to]\n }\n ])\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSample),\n params: {\n ...params,\n filters: alteredFilters\n },\n domain,\n alias: 'sample',\n searchables: ['name', 'description'].concat(searchables)\n }).innerJoin('sample.dataSet', 'ds', 'ds.id = :dataSetId', {\n dataSetId: dataSet.id\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [DataItem])\n async dataItems(@Root() dataSample: DataSample): Promise<DataItem[]> {\n const dataSetHistory: DataSetHistory =\n dataSample.dataSetId &&\n (await getRepository(DataSetHistory).findOne({\n where: {\n originalId: dataSample.dataSetId,\n version: dataSample.dataSetVersion\n }\n }))\n\n return dataSetHistory?.dataItems.filter(item => item.active) || []\n }\n\n @FieldResolver(type => DataSet)\n async dataSet(@Root() dataSample: DataSample): Promise<DataSet> {\n return dataSample.dataSetId && (await getRepository(DataSet).findOneBy({ id: dataSample.dataSetId }))\n }\n\n @FieldResolver(type => DataOoc)\n async dataOoc(@Root() dataSample: DataSample): Promise<DataOoc> {\n if (dataSample.ooc || dataSample.oos) {\n return await getRepository(DataOoc).findOneBy({ dataSample: { id: dataSample.id } })\n }\n }\n\n @FieldResolver(type => ActivityInstance)\n async reviewActivityInstance(@Root() dataSample: DataSample): Promise<ActivityInstance> {\n return (\n dataSample.reviewActivityInstanceId &&\n (await getRepository(ActivityInstance).findOneBy({ id: dataSample.reviewActivityInstanceId }))\n )\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() dataSample: DataSample): Promise<Domain> {\n return dataSample.domainId && (await getRepository(Domain).findOneBy({ id: dataSample.domainId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() dataSample: DataSample): Promise<User> {\n return dataSample.updaterId && (await getRepository(User).findOneBy({ id: dataSample.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() dataSample: DataSample): Promise<User> {\n return dataSample.creatorId && (await getRepository(User).findOneBy({ id: dataSample.creatorId }))\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"data-sample-query.js","sourceRoot":"","sources":["../../../server/service/data-sample/data-sample-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\nimport { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport {\n Domain,\n getQueryBuilderFromListParams,\n getRepository,\n getISOStringsForPeriod,\n ListParam\n} from '@things-factory/shell'\nimport { ActivityInstance } from '@things-factory/worklist'\n\nimport { DataKeySet } from '../data-key-set/data-key-set.js'\nimport { DataSetHistory } from '../data-set-history/data-set-history.js'\nimport { DataItem } from '../data-set/data-item-type.js'\nimport { DataSet } from '../data-set/data-set.js'\nimport { DataOoc } from '../data-ooc/data-ooc.js'\nimport { DataSample } from './data-sample.js'\nimport { DataSampleList } from './data-sample-type.js'\n\n@Resolver(DataSample)\nexport class DataSampleQuery {\n @Directive('@privilege(category: \"data-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSample, { description: 'To fetch a data sample' })\n async dataSample(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<DataSample> {\n const { domain } = context.state\n\n return await getRepository(DataSample).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Directive('@privilege(category: \"data-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSampleList, { description: 'To fetch multiple data samples' })\n async dataSamples(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSample),\n params,\n domain,\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-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSampleList, { description: 'To fetch multiple data samples by data set' })\n async dataSamplesByDataSet(\n @Arg('dataSetId') dataSetId: string,\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\n const { domain } = context.state\n\n const dataSet = await getRepository(DataSet).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId },\n relations: ['dataKeySet']\n })\n\n if (!dataSet) {\n throw new Error(`dataSet not found by the given dataSetId(${dataSetId})`)\n }\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSample),\n params,\n domain,\n alias: 'sample',\n searchables: ['name', 'description'].concat(searchables)\n }).innerJoin('sample.dataSet', 'ds', 'ds.id = :dataSetId', {\n dataSetId\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"data-sample\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataSampleList, { description: 'To fetch multiple data samples by data key set' })\n async dataSamplesByDataKeySet(\n @Arg('dataKeySetId') dataKeySetId: string,\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\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(DataSample),\n params,\n domain,\n alias: 'sample',\n searchables: ['name', 'description'].concat(searchables)\n }).innerJoin('sample.dataSet', 'ds', 'ds.dataKeySet = :dataKeySetId', {\n dataKeySetId\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => DataSampleList, { description: 'To fetch multiple DataSamples by period' })\n async dataSamplesByPeriod(\n @Arg('period') period: 'today' | 'this month' | '30 days' | 'this year' | '12 months' | 'date range' | 'month',\n @Arg('dataSetName') dataSetName: string,\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<DataSampleList> {\n const { domain } = context.state\n\n const { date, month } = params.filters.reduce(\n (acc, filter) => {\n if (filter.name === 'date') acc.date = filter.value\n if (filter.name === 'month') acc.month = filter.value\n return acc\n },\n { date: null, month: null }\n )\n\n const { from, to } = await getISOStringsForPeriod(period, { date, month }, context)\n\n const dataSet = await getRepository(DataSet).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name: dataSetName },\n relations: ['dataKeySet']\n })\n\n if (!dataSet) {\n throw new Error(`dataSet not found by the given dataSetName(${dataSetName})`)\n }\n\n const { filters = [] } = params || {}\n const alteredFilters = filters.concat([\n {\n name: 'collectedAt',\n operator: 'between',\n value: [from, to]\n }\n ])\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataSample),\n params: {\n ...params,\n filters: alteredFilters\n },\n domain,\n alias: 'sample',\n searchables: ['name', 'description'].concat(searchables)\n }).innerJoin('sample.dataSet', 'ds', 'ds.id = :dataSetId', {\n dataSetId: dataSet.id\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [DataItem])\n async dataItems(@Root() dataSample: DataSample): Promise<DataItem[]> {\n const dataSetHistory: DataSetHistory =\n dataSample.dataSetId &&\n (await getRepository(DataSetHistory).findOne({\n where: {\n originalId: dataSample.dataSetId,\n version: dataSample.dataSetVersion\n }\n }))\n\n return dataSetHistory?.dataItems.filter(item => item.active) || []\n }\n\n @FieldResolver(type => DataSet)\n async dataSet(@Root() dataSample: DataSample): Promise<DataSet> {\n return dataSample.dataSetId && (await getRepository(DataSet).findOneBy({ id: dataSample.dataSetId }))\n }\n\n @FieldResolver(type => DataOoc)\n async dataOoc(@Root() dataSample: DataSample): Promise<DataOoc> {\n if (dataSample.ooc || dataSample.oos) {\n return await getRepository(DataOoc).findOneBy({ dataSample: { id: dataSample.id } })\n }\n }\n\n @FieldResolver(type => ActivityInstance)\n async reviewActivityInstance(@Root() dataSample: DataSample): Promise<ActivityInstance> {\n return (\n dataSample.reviewActivityInstanceId &&\n (await getRepository(ActivityInstance).findOneBy({ id: dataSample.reviewActivityInstanceId }))\n )\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() dataSample: DataSample): Promise<Domain> {\n return dataSample.domainId && (await getRepository(Domain).findOneBy({ id: dataSample.domainId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() dataSample: DataSample): Promise<User> {\n return dataSample.updaterId && (await getRepository(User).findOneBy({ id: dataSample.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() dataSample: DataSample): Promise<User> {\n return dataSample.creatorId && (await getRepository(User).findOneBy({ id: dataSample.creatorId }))\n }\n}\n"]}
|
@@ -10,6 +10,8 @@ export declare class NewDataSensor {
|
|
10
10
|
model?: string;
|
11
11
|
netmask?: string;
|
12
12
|
tag?: string;
|
13
|
+
capacity?: number;
|
14
|
+
unit?: string;
|
13
15
|
refBy?: string;
|
14
16
|
appliance?: ObjectRef;
|
15
17
|
dataSet?: ObjectRef;
|
@@ -26,6 +28,8 @@ export declare class DataSensorPatch {
|
|
26
28
|
model?: string;
|
27
29
|
netmask?: string;
|
28
30
|
tag?: string;
|
31
|
+
capacity?: number;
|
32
|
+
unit?: string;
|
29
33
|
refBy?: string;
|
30
34
|
appliance?: ObjectRef;
|
31
35
|
dataSet?: ObjectRef;
|
@@ -44,6 +44,14 @@ tslib_1.__decorate([
|
|
44
44
|
(0, type_graphql_1.Field)({ nullable: true }),
|
45
45
|
tslib_1.__metadata("design:type", String)
|
46
46
|
], NewDataSensor.prototype, "tag", void 0);
|
47
|
+
tslib_1.__decorate([
|
48
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
49
|
+
tslib_1.__metadata("design:type", Number)
|
50
|
+
], NewDataSensor.prototype, "capacity", void 0);
|
51
|
+
tslib_1.__decorate([
|
52
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
53
|
+
tslib_1.__metadata("design:type", String)
|
54
|
+
], NewDataSensor.prototype, "unit", void 0);
|
47
55
|
tslib_1.__decorate([
|
48
56
|
(0, type_graphql_1.Field)({ nullable: true }),
|
49
57
|
tslib_1.__metadata("design:type", String)
|
@@ -106,6 +114,14 @@ tslib_1.__decorate([
|
|
106
114
|
(0, type_graphql_1.Field)({ nullable: true }),
|
107
115
|
tslib_1.__metadata("design:type", String)
|
108
116
|
], DataSensorPatch.prototype, "tag", void 0);
|
117
|
+
tslib_1.__decorate([
|
118
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
119
|
+
tslib_1.__metadata("design:type", Number)
|
120
|
+
], DataSensorPatch.prototype, "capacity", void 0);
|
121
|
+
tslib_1.__decorate([
|
122
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
123
|
+
tslib_1.__metadata("design:type", String)
|
124
|
+
], DataSensorPatch.prototype, "unit", void 0);
|
109
125
|
tslib_1.__decorate([
|
110
126
|
(0, type_graphql_1.Field)({ nullable: true }),
|
111
127
|
tslib_1.__metadata("design:type", String)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-sensor-type.js","sourceRoot":"","sources":["../../../server/service/data-sensor/data-sensor-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AAEpE,iDAAiD;AAEjD,qDAA6C;AAGtC,IAAM,aAAa,GAAnB,MAAM,aAAa;
|
1
|
+
{"version":3,"file":"data-sensor-type.js","sourceRoot":"","sources":["../../../server/service/data-sensor/data-sensor-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AAEpE,iDAAiD;AAEjD,qDAA6C;AAGtC,IAAM,aAAa,GAAnB,MAAM,aAAa;CA6CzB,CAAA;AA7CY,sCAAa;AAExB;IADC,IAAA,oBAAK,GAAE;;2CACI;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACV;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACV;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACd;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjC,iBAAS;gDAAA;AAGrB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACnC,iBAAS;8CAAA;AAGnB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACnC,iBAAS;8CAAA;wBA5CR,aAAa;IADzB,IAAA,wBAAS,GAAE;GACC,aAAa,CA6CzB;AAGM,IAAM,eAAe,GAArB,MAAM,eAAe;CAmD3B,CAAA;AAnDY,0CAAe;AAE1B;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CAC3B;AAGX;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACV;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACV;AAGhB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACd;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACZ;AAGd;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjC,iBAAS;kDAAA;AAGrB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACnC,iBAAS;gDAAA;AAGnB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACnC,iBAAS;gDAAA;AAGnB;IADC,IAAA,oBAAK,GAAE;;+CACM;0BAlDH,eAAe;IAD3B,IAAA,wBAAS,GAAE;GACC,eAAe,CAmD3B;AAGM,IAAM,cAAc,GAApB,MAAM,cAAc;CAM1B,CAAA;AANY,wCAAc;AAEzB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,2BAAU,CAAC,CAAC;;6CACT;AAGnB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;6CACN;yBALF,cAAc;IAD1B,IAAA,yBAAU,GAAE;GACA,cAAc,CAM1B","sourcesContent":["import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'\n\nimport { ObjectRef } from '@things-factory/shell'\n\nimport { DataSensor } from './data-sensor.js'\n\n@InputType()\nexport class NewDataSensor {\n @Field()\n name: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n active?: boolean\n\n @Field({ nullable: true })\n deviceId?: string\n\n @Field({ nullable: true })\n serialNo?: string\n\n @Field({ nullable: true })\n brand?: string\n\n @Field({ nullable: true })\n model?: string\n\n @Field({ nullable: true })\n netmask?: string\n\n @Field({ nullable: true })\n tag?: string\n\n @Field({ nullable: true })\n capacity?: number\n\n @Field({ nullable: true })\n unit?: string\n\n @Field({ nullable: true })\n refBy?: string\n\n @Field(type => ObjectRef, { nullable: true })\n appliance?: ObjectRef\n\n @Field(type => ObjectRef, { nullable: true })\n dataSet?: ObjectRef\n\n @Field(type => ObjectRef, { nullable: true })\n decoder?: ObjectRef\n}\n\n@InputType()\nexport class DataSensorPatch {\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 active?: boolean\n\n @Field({ nullable: true })\n deviceId?: string\n\n @Field({ nullable: true })\n serialNo?: string\n\n @Field({ nullable: true })\n brand?: string\n\n @Field({ nullable: true })\n model?: string\n\n @Field({ nullable: true })\n netmask?: string\n\n @Field({ nullable: true })\n tag?: string\n\n @Field({ nullable: true })\n capacity?: number\n\n @Field({ nullable: true })\n unit?: string\n\n @Field({ nullable: true })\n refBy?: string\n\n @Field(type => ObjectRef, { nullable: true })\n appliance?: ObjectRef\n\n @Field(type => ObjectRef, { nullable: true })\n dataSet?: ObjectRef\n\n @Field(type => ObjectRef, { nullable: true })\n decoder?: ObjectRef\n\n @Field()\n cuFlag: string\n}\n\n@ObjectType()\nexport class DataSensorList {\n @Field(type => [DataSensor])\n items: DataSensor[]\n\n @Field(type => Int)\n total: number\n}\n"]}
|
@@ -70,6 +70,16 @@ tslib_1.__decorate([
|
|
70
70
|
(0, type_graphql_1.Field)({ nullable: true }),
|
71
71
|
tslib_1.__metadata("design:type", String)
|
72
72
|
], DataSensor.prototype, "tag", void 0);
|
73
|
+
tslib_1.__decorate([
|
74
|
+
(0, typeorm_1.Column)({ type: 'float', nullable: true, comment: '용량', transformer: shell_1.roundTransformer }),
|
75
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
76
|
+
tslib_1.__metadata("design:type", Number)
|
77
|
+
], DataSensor.prototype, "capacity", void 0);
|
78
|
+
tslib_1.__decorate([
|
79
|
+
(0, typeorm_1.Column)({ nullable: true, comment: '용량 단위' }),
|
80
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
81
|
+
tslib_1.__metadata("design:type", String)
|
82
|
+
], DataSensor.prototype, "unit", void 0);
|
73
83
|
tslib_1.__decorate([
|
74
84
|
(0, typeorm_1.Column)({ nullable: true }),
|
75
85
|
(0, type_graphql_1.Field)({ nullable: true }),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-sensor.js","sourceRoot":"","sources":["../../../server/service/data-sensor/data-sensor.ts"],"names":[],"mappings":";;;;AAAA,+CAAoD;AACpD,qCASgB;AAEhB,
|
1
|
+
{"version":3,"file":"data-sensor.js","sourceRoot":"","sources":["../../../server/service/data-sensor/data-sensor.ts"],"names":[],"mappings":";;;;AAAA,+CAAoD;AACpD,qCASgB;AAEhB,iDAAgE;AAChE,yDAA2D;AAC3D,uEAA2D;AAE3D,yDAAiD;AAY1C,IAAM,UAAU,GAAhB,MAAM,UAAU;CAyGtB,CAAA;AAzGY,gCAAU;AAGZ;IAFR,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;sCACC;AAInB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;sCACb,cAAM;0CAAA;AAGf;IADC,IAAA,oBAAU,EAAC,CAAC,UAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;;4CACzC;AAIjB;IAFC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;wCACK;AAIb;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACN;AAIpB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACV;AAIhB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACT;AAIjB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACT;AAIjB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACZ;AAId;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACZ;AAId;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACV;AAIhB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uCACd;AAIZ;IAFC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,wBAAgB,EAAE,CAAC;IACvF,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACT;AAIjB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC5C,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACb;AAIb;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACZ;AAId;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,qBAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,qBAAS;6CAAA;AAGrB;IADC,IAAA,oBAAU,EAAC,CAAC,UAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;;+CACzC;AAIpB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,qBAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAChB,qBAAO;2CAAA;AAGjB;IADC,IAAA,oBAAU,EAAC,CAAC,UAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;;6CACzC;AAOlB;IALC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,2BAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,2BAAQ,EAAE;QACvB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,8FAA8F;KAC5G,CAAC;sCACQ,2BAAQ;2CAAA;AAGlB;IADC,IAAA,oBAAU,EAAC,CAAC,UAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;;6CACzC;AAIlB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;6CAAA;AAIhB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;6CAAA;AAIhB;IAFC,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;2CAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,UAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;;6CACzC;AAIlB;IAFC,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;2CAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,UAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;;6CACzC;qBAxGP,UAAU;IAVtB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,kBAAkB,EAAE,CAAC,UAAsB,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7G,IAAA,eAAK,EAAC,kBAAkB,EAAE,CAAC,UAAsB,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9F,IAAA,eAAK,EAAC,kBAAkB,EAAE,CAAC,UAAsB,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE;QAC5F,MAAM,EAAE,KAAK;KACd,CAAC;IACD,IAAA,eAAK,EAAC,kBAAkB,EAAE,CAAC,UAAsB,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC/F,MAAM,EAAE,KAAK;KACd,CAAC;IACD,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;GACxC,UAAU,CAyGtB","sourcesContent":["import { Field, ID, ObjectType } from 'type-graphql'\nimport {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\n\nimport { Domain, roundTransformer } from '@things-factory/shell'\nimport { Appliance, User } from '@things-factory/auth-base'\nimport { Scenario } from '@things-factory/integration-base'\n\nimport { DataSet } from '../data-set/data-set.js'\n\n@Entity()\n@Index('ix_data_sensor_0', (dataSensor: DataSensor) => [dataSensor.domain, dataSensor.name], { unique: true })\n@Index('ix_data_sensor_1', (dataSensor: DataSensor) => [dataSensor.deviceId], { unique: true })\n@Index('ix_data_sensor_2', (dataSensor: DataSensor) => [dataSensor.domain, dataSensor.refBy], {\n unique: false\n})\n@Index('ix_data_sensor_3', (dataSensor: DataSensor) => [dataSensor.domain, dataSensor.serialNo], {\n unique: false\n})\n@ObjectType({ description: 'Entity for DataSensor' })\nexport class DataSensor {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field(type => Domain)\n domain?: Domain\n\n @RelationId((dataSensor: DataSensor) => dataSensor.domain)\n domainId?: string\n\n @Column()\n @Field()\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n active?: boolean\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n deviceId?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n serialNo?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n brand?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n model?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n netmask?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n tag?: string\n\n @Column({ type: 'float', nullable: true, comment: '용량', transformer: roundTransformer })\n @Field({ nullable: true })\n capacity?: number\n\n @Column({ nullable: true, comment: '용량 단위' })\n @Field({ nullable: true })\n unit?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n refBy?: string\n\n @ManyToOne(type => Appliance, { nullable: true })\n @Field({ nullable: true })\n appliance?: Appliance\n\n @RelationId((dataSensor: DataSensor) => dataSensor.appliance)\n applianceId?: string\n\n @ManyToOne(type => DataSet, { nullable: true })\n @Field({ nullable: true })\n dataSet?: DataSet\n\n @RelationId((dataSensor: DataSensor) => dataSensor.dataSet)\n dataSetId?: string\n\n @ManyToOne(type => Scenario, { nullable: true })\n @Field(type => Scenario, {\n nullable: true,\n description: 'The decoder scenario that automatically executes based on the trigger of raw data collection'\n })\n decoder?: Scenario\n\n @RelationId((dataSensor: DataSensor) => dataSensor.decoder)\n decoderId?: string\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((dataSensor: DataSensor) => dataSensor.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((dataSensor: DataSensor) => dataSensor.updater)\n updaterId?: string\n}\n"]}
|