@things-factory/dataset 8.0.0-alpha.5 → 8.0.0-alpha.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,7 +20,7 @@
20
20
 
21
21
  ## 機能
22
22
 
23
- 実行時に、タスクはデータセット ID の存在を確認します。ID が提供されていない場合、タスクはデータセットが見つからないことを示すエラーを投げます。有効なデータセット ID が提供された場合、タスクはそのデータセットに特定のデータ収集活動を発行します。`issueCollectData` によって処理される基本的なプロセスには、データセットの存在の検証、データ収集環境の準備、およびデータセットの構成および関連するデータソースに従ってデータ収集プロセスを開始するなどの操作が含まれます。
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가 제공되면, 작업은 해당 데이터셋에 특정한 데이터 수집 활동을 발행합니다. `issueCollectData`에 의해 처리되는 기본 프로세스는 데이터셋의 존재를 확인, 데이터 수집 환경 준비, 데이터셋의 구성 및 관련 데이터 소스에 따라 데이터 수집 프로세스 시작과 같은 작업을 포함합니다.
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 `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.
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 `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.
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,则任务将继续针对该数据集发起数据收集活动。`issueCollectData` 处理的底层过程涉及验证数据集的存在、准备数据收集环境以及根据数据集的配置和关联数据源启动数据收集过程。
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.5",
3
+ "version": "8.0.0-alpha.7",
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.3",
45
+ "@things-factory/board-service": "^8.0.0-alpha.7",
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.5",
53
+ "@things-factory/worklist": "^8.0.0-alpha.7",
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": "d226c264ff0d986257cdce930ef26f746d45bd6a"
59
+ "gitHead": "33ae14f862f5f17ad0d98dde943061a507cda7f1"
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 issueCollectData(
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 { assignees } = dataSet
37
+ const { entryRole } = dataSet
38
+
39
+ const assignees = entryRole ? [{ type: OrgMemberTargetType.Role, value: entryRole.id, assignee: entryRole }] : []
36
40
 
37
- /* 해당 dataset에 대한 데이타 수집 태스크를 dataset assignees에게 할당한다. */
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
- `Assignees not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`
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 { issueCollectData } from '../../controllers/issue-collect-data'
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 issueCollectData(domain.id, dataSetId, {
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 { issueCollectData } from './controllers/issue-collect-data'
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 issueCollectData(domainId, dataSetId, context)
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.getRepository(DataSet).findOne({ where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId } })
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 { assignees, supervisoryRoleId } = dataSet
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 activity = (await getRepository(Activity, tx).findOneBy({
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
- await issue(activityInstance, context)
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,2 +0,0 @@
1
- import { ActivityInstance } from '@things-factory/worklist';
2
- export declare function issueCollectData(domainId: string, dataSetId: string, context: ResolverContext): Promise<ActivityInstance | void>;
@@ -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"]}