@things-factory/dataset 8.0.0-alpha.5 → 8.0.0-alpha.6
Sign up to get free protection for your applications and to get access to all the features.
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/issue-data-collection-task.d.ts +2 -0
- package/dist-server/controllers/{issue-collect-data.js → issue-data-collection-task.js} +10 -7
- package/dist-server/controllers/issue-data-collection-task.js.map +1 -0
- package/dist-server/engine/task/issue-collect-data.js +2 -2
- package/dist-server/engine/task/issue-collect-data.js.map +1 -1
- package/dist-server/routes.js +5 -3
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/data-set/data-set-mutation.js +4 -31
- package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/dataset/task/issue-collect-data.ja.md +1 -1
- package/helps/dataset/task/issue-collect-data.ko.md +1 -1
- package/helps/dataset/task/issue-collect-data.md +1 -1
- package/helps/dataset/task/issue-collect-data.ms.md +1 -1
- package/helps/dataset/task/issue-collect-data.zh.md +1 -1
- package/package.json +4 -4
- package/server/controllers/{issue-collect-data.ts → issue-data-collection-task.ts} +9 -5
- package/server/engine/task/issue-collect-data.ts +2 -2
- package/server/routes.ts +5 -3
- package/server/service/data-set/data-set-mutation.ts +4 -37
- package/dist-server/controllers/issue-collect-data.d.ts +0 -2
- package/dist-server/controllers/issue-collect-data.js.map +0 -1
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
## 機能
|
22
22
|
|
23
|
-
実行時に、タスクはデータセット ID の存在を確認します。ID が提供されていない場合、タスクはデータセットが見つからないことを示すエラーを投げます。有効なデータセット ID が提供された場合、タスクはそのデータセットに特定のデータ収集活動を発行します。`
|
23
|
+
実行時に、タスクはデータセット ID の存在を確認します。ID が提供されていない場合、タスクはデータセットが見つからないことを示すエラーを投げます。有効なデータセット ID が提供された場合、タスクはそのデータセットに特定のデータ収集活動を発行します。`IssueCollectData` によって処理される基本的なプロセスには、データセットの存在の検証、データ収集環境の準備、およびデータセットの構成および関連するデータソースに従ってデータ収集プロセスを開始するなどの操作が含まれます。
|
24
24
|
|
25
25
|
タスクは開始された活動のインスタンスを返し、これを使用して進行状況を追跡し、データ収集ワークフローを管理するか、収集したデータを処理するための後続のタスクと統合することができます。
|
26
26
|
|
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
## 기능
|
19
19
|
|
20
|
-
실행 시, 작업은 데이터셋 ID의 존재를 확인합니다. ID가 제공되지 않으면, 데이터셋이 발견되지 않았다는 오류를 발생시킵니다. 유효한 데이터셋 ID가 제공되면, 작업은 해당 데이터셋에 특정한 데이터 수집 활동을 발행합니다. `
|
20
|
+
실행 시, 작업은 데이터셋 ID의 존재를 확인합니다. ID가 제공되지 않으면, 데이터셋이 발견되지 않았다는 오류를 발생시킵니다. 유효한 데이터셋 ID가 제공되면, 작업은 해당 데이터셋에 특정한 데이터 수집 활동을 발행합니다. `IssueCollectData`에 의해 처리되는 기본 프로세스는 데이터셋의 존재를 확인, 데이터 수집 환경 준비, 데이터셋의 구성 및 관련 데이터 소스에 따라 데이터 수집 프로세스 시작과 같은 작업을 포함합니다.
|
21
21
|
|
22
22
|
작업은 시작된 활동의 인스턴스를 반환하며, 이는 진행 상황을 추적하고, 데이터 수집 워크플로를 관리하거나, 수집된 데이터를 처리하기 위한 후속 작업과 통합하는 데 사용할 수 있습니다.
|
23
23
|
|
@@ -17,7 +17,7 @@ The `IssueCollectData` task is an automated function that triggers a data collec
|
|
17
17
|
|
18
18
|
## Functionality
|
19
19
|
|
20
|
-
Upon execution, the task checks for the presence of a dataset ID. If the ID is not provided, the task will throw an error indicating that no dataset has been found. If a valid dataset ID is provided, the task proceeds to issue a data collection activity specific to that dataset. The underlying process handled by `
|
20
|
+
Upon execution, the task checks for the presence of a dataset ID. If the ID is not provided, the task will throw an error indicating that no dataset has been found. If a valid dataset ID is provided, the task proceeds to issue a data collection activity specific to that dataset. The underlying process handled by `IssueCollectData` involves operations such as validating the dataset's existence, preparing the data collection environment, and initiating the data collection process according to the dataset's configuration and associated data sources.
|
21
21
|
|
22
22
|
The task returns an instance of the activity initiated, which can be used to track the progress, manage the data collection workflow, or integrate with subsequent tasks for processing the collected data.
|
23
23
|
|
@@ -19,7 +19,7 @@ Tugas `IssueCollectData` adalah fungsi automatik yang memicu proses pengumpulan
|
|
19
19
|
|
20
20
|
## Fungsi
|
21
21
|
|
22
|
-
Saat dieksekusi, tugas memeriksa keberadaan ID set data. Jika ID tidak disediakan, tugas akan melempar kesalahan yang menunjukkan bahwa tidak ada set data yang ditemukan. Jika ID set data yang valid disediakan, tugas melanjutkan untuk mengeluarkan aktiviti pengumpulan data yang spesifik untuk set data tersebut. Proses dasar yang ditangani oleh `
|
22
|
+
Saat dieksekusi, tugas memeriksa keberadaan ID set data. Jika ID tidak disediakan, tugas akan melempar kesalahan yang menunjukkan bahwa tidak ada set data yang ditemukan. Jika ID set data yang valid disediakan, tugas melanjutkan untuk mengeluarkan aktiviti pengumpulan data yang spesifik untuk set data tersebut. Proses dasar yang ditangani oleh `IssueCollectData` melibatkan operasi seperti validasi keberadaan set data, persiapan lingkungan pengumpulan data, dan memulai proses pengumpulan data sesuai dengan konfigurasi set data dan sumber data terkait.
|
23
23
|
|
24
24
|
Tugas mengembalikan instansi aktivitas yang dimulai, yang dapat digunakan untuk melacak kemajuan, mengurus alur kerja pengumpulan data, atau mengintegrasikan dengan tugas berikutnya untuk memproses data yang dikumpulkan.
|
25
25
|
|
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
## 功能
|
19
19
|
|
20
|
-
执行时,任务会检查数据集 ID 的存在。如果未提供 ID,则任务会抛出错误,指示未找到数据集。如果提供了有效的数据集 ID,则任务将继续针对该数据集发起数据收集活动。`
|
20
|
+
执行时,任务会检查数据集 ID 的存在。如果未提供 ID,则任务会抛出错误,指示未找到数据集。如果提供了有效的数据集 ID,则任务将继续针对该数据集发起数据收集活动。`IssueCollectData` 处理的底层过程涉及验证数据集的存在、准备数据收集环境以及根据数据集的配置和关联数据源启动数据收集过程。
|
21
21
|
|
22
22
|
任务返回启动的活动实例,可用于跟踪进度、管理数据收集工作流或与后续任务集成以处理收集的数据。
|
23
23
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/dataset",
|
3
|
-
"version": "8.0.0-alpha.
|
3
|
+
"version": "8.0.0-alpha.6",
|
4
4
|
"main": "dist-server/index.js",
|
5
5
|
"browser": "dist-client/index.js",
|
6
6
|
"things-factory": true,
|
@@ -42,7 +42,7 @@
|
|
42
42
|
"@operato/utils": "^8.0.0-alpha",
|
43
43
|
"@things-factory/auth-base": "^8.0.0-alpha.2",
|
44
44
|
"@things-factory/aws-base": "^8.0.0-alpha.2",
|
45
|
-
"@things-factory/board-service": "^8.0.0-alpha.
|
45
|
+
"@things-factory/board-service": "^8.0.0-alpha.6",
|
46
46
|
"@things-factory/env": "^8.0.0-alpha.0",
|
47
47
|
"@things-factory/integration-base": "^8.0.0-alpha.2",
|
48
48
|
"@things-factory/organization": "^8.0.0-alpha.5",
|
@@ -50,11 +50,11 @@
|
|
50
50
|
"@things-factory/scheduler-client": "^8.0.0-alpha.2",
|
51
51
|
"@things-factory/shell": "^8.0.0-alpha.2",
|
52
52
|
"@things-factory/work-shift": "^8.0.0-alpha.2",
|
53
|
-
"@things-factory/worklist": "^8.0.0-alpha.
|
53
|
+
"@things-factory/worklist": "^8.0.0-alpha.6",
|
54
54
|
"cron-parser": "^4.3.0",
|
55
55
|
"moment-timezone": "^0.5.45",
|
56
56
|
"simple-statistics": "^7.8.3",
|
57
57
|
"statistics": "^3.3.0"
|
58
58
|
},
|
59
|
-
"gitHead": "
|
59
|
+
"gitHead": "87d16e1d2c7b53928b468513c94c406afcd5021d"
|
60
60
|
}
|
@@ -4,8 +4,9 @@ import { Domain, getDataSource } from '@things-factory/shell'
|
|
4
4
|
import { Activity, ActivityInstance, issue } from '@things-factory/worklist'
|
5
5
|
|
6
6
|
import { DataSet } from '../service/data-set/data-set'
|
7
|
+
import { OrgMemberTargetType } from '@things-factory/organization'
|
7
8
|
|
8
|
-
export async function
|
9
|
+
export async function issueDataCollectionTask(
|
9
10
|
domainId: string,
|
10
11
|
dataSetId: string,
|
11
12
|
context: ResolverContext
|
@@ -23,7 +24,8 @@ export async function issueCollectData(
|
|
23
24
|
id: In([domain.id, domain.parentId].filter(Boolean))
|
24
25
|
},
|
25
26
|
id: dataSetId
|
26
|
-
}
|
27
|
+
},
|
28
|
+
relations: ['entryRole']
|
27
29
|
})
|
28
30
|
|
29
31
|
const activity = (await tx.getRepository(Activity).findOneBy({
|
@@ -32,9 +34,11 @@ export async function issueCollectData(
|
|
32
34
|
})) as Activity
|
33
35
|
|
34
36
|
if (activity) {
|
35
|
-
const {
|
37
|
+
const { entryRole } = dataSet
|
38
|
+
|
39
|
+
const assignees = entryRole ? [{ type: OrgMemberTargetType.Role, value: entryRole.id, assignee: entryRole }] : []
|
36
40
|
|
37
|
-
/* 해당 dataset에 대한 데이타 수집 태스크를 dataset
|
41
|
+
/* 해당 dataset에 대한 데이타 수집 태스크를 dataset entryRole에게 할당한다. */
|
38
42
|
if (assignees && assignees instanceof Array && assignees.length > 0) {
|
39
43
|
const activityInstance = {
|
40
44
|
name: `[Data 수집] ${dataSet.name}`,
|
@@ -57,7 +61,7 @@ export async function issueCollectData(
|
|
57
61
|
return await issue(activityInstance, context)
|
58
62
|
} else {
|
59
63
|
throw new Error(
|
60
|
-
`
|
64
|
+
`Data Entry Role not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`
|
61
65
|
)
|
62
66
|
}
|
63
67
|
} else {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { TaskRegistry, InputStep, Context } from '@things-factory/integration-base'
|
2
|
-
import {
|
2
|
+
import { issueDataCollectionTask } from '../../controllers/issue-data-collection-task'
|
3
3
|
import i18next from 'i18next'
|
4
4
|
|
5
5
|
async function IssueCollectData(step: InputStep, context: Context) {
|
@@ -12,7 +12,7 @@ async function IssueCollectData(step: InputStep, context: Context) {
|
|
12
12
|
throw new Error(`no dataset found`)
|
13
13
|
}
|
14
14
|
|
15
|
-
const activityInstance = await
|
15
|
+
const activityInstance = await issueDataCollectionTask(domain.id, dataSetId, {
|
16
16
|
t: i18next.t,
|
17
17
|
state: {
|
18
18
|
domain,
|
package/server/routes.ts
CHANGED
@@ -8,7 +8,7 @@ import { ScheduleRegisterRequest } from '@things-factory/scheduler-client'
|
|
8
8
|
import { createDataSample } from './controllers/create-data-sample'
|
9
9
|
import { renderJasperReport } from './controllers/jasper-report'
|
10
10
|
import { renderShinyReport } from './controllers/shiny-report'
|
11
|
-
import {
|
11
|
+
import { issueDataCollectionTask } from './controllers/issue-data-collection-task'
|
12
12
|
import { DataSensor } from './service/data-sensor/data-sensor'
|
13
13
|
import { DataSet } from './service/data-set/data-set'
|
14
14
|
|
@@ -120,7 +120,7 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
120
120
|
throw new Error(`group(${domainId}) and key(${dataSetId}) properties should not be empty`)
|
121
121
|
}
|
122
122
|
|
123
|
-
await
|
123
|
+
await issueDataCollectionTask(domainId, dataSetId, context)
|
124
124
|
|
125
125
|
context.status = 200
|
126
126
|
})
|
@@ -146,7 +146,9 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
146
146
|
throw new Error(`domain(${domainId}) not found`)
|
147
147
|
}
|
148
148
|
|
149
|
-
const dataSet = await tx
|
149
|
+
const dataSet = await tx
|
150
|
+
.getRepository(DataSet)
|
151
|
+
.findOne({ where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId } })
|
150
152
|
|
151
153
|
// do what you gotta do
|
152
154
|
})
|
@@ -11,6 +11,7 @@ import { Activity, AssigneeItem, issue } from '@things-factory/worklist'
|
|
11
11
|
import { getDataFinalizeCrontabSchedule } from '../../controllers/finalize-data-collection'
|
12
12
|
import { DataSet } from './data-set'
|
13
13
|
import { DataSetPatch, NewDataSet } from './data-set-type'
|
14
|
+
import { issueDataCollectionTask } from '../../controllers/issue-data-collection-task'
|
14
15
|
|
15
16
|
const crypto = require('crypto')
|
16
17
|
|
@@ -266,7 +267,6 @@ export class DataSetMutation {
|
|
266
267
|
return true
|
267
268
|
}
|
268
269
|
|
269
|
-
// @Directive('@privilege(category: "data-set", privilege: "mutation")')
|
270
270
|
@Directive('@transaction')
|
271
271
|
@Mutation(returns => Boolean, { description: 'To issue data-collection task for the given dataset' })
|
272
272
|
async issueDataCollection(@Arg('dataSetId') dataSetId: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
@@ -281,9 +281,8 @@ export class DataSetMutation {
|
|
281
281
|
}
|
282
282
|
})
|
283
283
|
|
284
|
-
const {
|
284
|
+
const { supervisoryRoleId } = dataSet
|
285
285
|
|
286
|
-
// role check
|
287
286
|
const me = await getRepository(User, tx).findOne({
|
288
287
|
where: { id: user.id },
|
289
288
|
relations: ['roles']
|
@@ -293,41 +292,9 @@ export class DataSetMutation {
|
|
293
292
|
throw new Error(`You don't have permission to issue data collection task for this dataset.`)
|
294
293
|
}
|
295
294
|
|
296
|
-
const
|
297
|
-
domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
|
298
|
-
name: 'Collect Data'
|
299
|
-
})) as Activity
|
300
|
-
|
301
|
-
if (activity) {
|
302
|
-
/* 해당 dataset에 대한 데이타 수집 태스크를 dataset assignees에게 할당한다. */
|
303
|
-
if (assignees && assignees instanceof Array && assignees.length > 0) {
|
304
|
-
const activityInstance = {
|
305
|
-
name: `[Data 수집] ${dataSet.name}`,
|
306
|
-
description: dataSet.description,
|
307
|
-
activityId: activity.id,
|
308
|
-
dueAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
|
309
|
-
input: {
|
310
|
-
dataSetId: dataSet.id,
|
311
|
-
dataSetName: dataSet.name
|
312
|
-
},
|
313
|
-
assignees
|
314
|
-
}
|
315
|
-
|
316
|
-
context.state = {
|
317
|
-
...context.state,
|
318
|
-
domain,
|
319
|
-
tx
|
320
|
-
}
|
295
|
+
const activityInstance = await issueDataCollectionTask(domain.id, dataSet.id, context)
|
321
296
|
|
322
|
-
|
323
|
-
} else {
|
324
|
-
throw new Error(
|
325
|
-
`Assignees not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`
|
326
|
-
)
|
327
|
-
}
|
328
|
-
}
|
329
|
-
|
330
|
-
return true
|
297
|
+
return !!activityInstance
|
331
298
|
}
|
332
299
|
|
333
300
|
@Directive('@transaction')
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"issue-collect-data.js","sourceRoot":"","sources":["../../server/controllers/issue-collect-data.ts"],"names":[],"mappings":";;AAOA,4CA2DC;AAlED,qCAA4B;AAE5B,iDAA6D;AAC7D,uDAA4E;AAE5E,2DAAsD;AAE/C,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,SAAiB,EACjB,OAAwB;IAExB,MAAM,IAAA,qBAAa,GAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;QAC3C,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,kBAAO,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;SACF,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,GAAG,OAAO,CAAA;YAE7B,0DAA0D;YAC1D,IAAI,SAAS,IAAI,SAAS,YAAY,KAAK,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpE,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,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;oBACjD,KAAK,EAAE;wBACL,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,WAAW,EAAE,OAAO,CAAC,IAAI;qBAC1B;oBACD,SAAS;iBACV,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,mDAAmD,OAAO,CAAC,IAAI,oCAAoC,CACpG,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'\n\nexport async function issueCollectData(\n domainId: string,\n dataSetId: string,\n context: ResolverContext\n): Promise<ActivityInstance | void> {\n 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 })\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 { assignees } = dataSet\n\n /* 해당 dataset에 대한 데이타 수집 태스크를 dataset assignees에게 할당한다. */\n if (assignees && assignees instanceof Array && assignees.length > 0) {\n const activityInstance = {\n name: `[Data 수집] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n input: {\n dataSetId: dataSet.id,\n dataSetName: dataSet.name\n },\n assignees\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 `Assignees 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"]}
|