@things-factory/dataset 8.0.0-alpha.3 → 8.0.0-alpha.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. package/client/activities/activity-data-collect-edit.ts +3 -1
  2. package/client/activities/activity-ooc-resolve-edit.ts +5 -3
  3. package/client/activities/activity-ooc-review-edit.ts +5 -3
  4. package/client/bootstrap.ts +11 -1
  5. package/client/components/data-entry-form.ts +3 -3
  6. package/client/pages/data-entry/data-entry-list-page.ts +72 -12
  7. package/client/pages/data-report/data-report-list-page.ts +9 -2
  8. package/client/pages/data-sensor/data-sensor-list-page.ts +1 -1
  9. package/client/pages/data-set/data-item-list.ts +1 -1
  10. package/client/pages/data-set/data-set-list-page.ts +29 -17
  11. package/dist-client/activities/activity-data-collect-edit.d.ts +1 -1
  12. package/dist-client/activities/activity-data-collect-edit.js +2 -1
  13. package/dist-client/activities/activity-data-collect-edit.js.map +1 -1
  14. package/dist-client/activities/activity-ooc-resolve-edit.js +5 -3
  15. package/dist-client/activities/activity-ooc-resolve-edit.js.map +1 -1
  16. package/dist-client/activities/activity-ooc-review-edit.js +5 -3
  17. package/dist-client/activities/activity-ooc-review-edit.js.map +1 -1
  18. package/dist-client/bootstrap.js +4 -0
  19. package/dist-client/bootstrap.js.map +1 -1
  20. package/dist-client/components/data-entry-form.js +3 -3
  21. package/dist-client/components/data-entry-form.js.map +1 -1
  22. package/dist-client/pages/data-entry/data-entry-list-page.js +68 -10
  23. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  24. package/dist-client/pages/data-ooc/data-ooc-view.d.ts +1 -1
  25. package/dist-client/pages/data-report/data-report-list-page.js +8 -2
  26. package/dist-client/pages/data-report/data-report-list-page.js.map +1 -1
  27. package/dist-client/pages/data-sample/data-sample-view.d.ts +1 -1
  28. package/dist-client/pages/data-sensor/data-sensor-list-page.js +1 -1
  29. package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -1
  30. package/dist-client/pages/data-set/data-item-list.js +1 -1
  31. package/dist-client/pages/data-set/data-item-list.js.map +1 -1
  32. package/dist-client/pages/data-set/data-set-list-page.js +29 -17
  33. package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
  34. package/dist-client/tsconfig.tsbuildinfo +1 -1
  35. package/dist-server/activities/activity-data-collect.js.map +1 -1
  36. package/dist-server/activities/activity-ooc-review.js +12 -4
  37. package/dist-server/activities/activity-ooc-review.js.map +1 -1
  38. package/dist-server/controllers/create-data-sample.js +16 -10
  39. package/dist-server/controllers/create-data-sample.js.map +1 -1
  40. package/dist-server/controllers/issue-data-collection-task.d.ts +2 -0
  41. package/dist-server/controllers/{issue-collect-data.js → issue-data-collection-task.js} +13 -9
  42. package/dist-server/controllers/issue-data-collection-task.js.map +1 -0
  43. package/dist-server/engine/task/issue-collect-data.js +2 -2
  44. package/dist-server/engine/task/issue-collect-data.js.map +1 -1
  45. package/dist-server/routes.js +5 -3
  46. package/dist-server/routes.js.map +1 -1
  47. package/dist-server/service/data-ooc/data-ooc.js +12 -3
  48. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  49. package/dist-server/service/data-sample/data-sample.js +4 -1
  50. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  51. package/dist-server/service/data-set/data-set-mutation.d.ts +1 -0
  52. package/dist-server/service/data-set/data-set-mutation.js +48 -45
  53. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  54. package/dist-server/service/data-set/data-set-query.d.ts +3 -0
  55. package/dist-server/service/data-set/data-set-query.js +104 -29
  56. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  57. package/dist-server/service/data-set/data-set-type.d.ts +2 -3
  58. package/dist-server/service/data-set/data-set-type.js +6 -6
  59. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  60. package/dist-server/service/data-set/data-set.d.ts +2 -0
  61. package/dist-server/service/data-set/data-set.js +12 -0
  62. package/dist-server/service/data-set/data-set.js.map +1 -1
  63. package/dist-server/service/data-set-history/data-set-history.js +7 -2
  64. package/dist-server/service/data-set-history/data-set-history.js.map +1 -1
  65. package/dist-server/service/index.d.ts +1 -1
  66. package/dist-server/tsconfig.tsbuildinfo +1 -1
  67. package/helps/dataset/data-set.ja.md +55 -59
  68. package/helps/dataset/data-set.ko.md +9 -11
  69. package/helps/dataset/data-set.md +20 -24
  70. package/helps/dataset/data-set.zh.md +3 -11
  71. package/helps/dataset/task/issue-collect-data.ja.md +1 -1
  72. package/helps/dataset/task/issue-collect-data.ko.md +1 -1
  73. package/helps/dataset/task/issue-collect-data.md +1 -1
  74. package/helps/dataset/task/issue-collect-data.ms.md +1 -1
  75. package/helps/dataset/task/issue-collect-data.zh.md +1 -1
  76. package/package.json +13 -13
  77. package/server/activities/activity-data-collect.ts +11 -2
  78. package/server/activities/activity-ooc-review.ts +28 -7
  79. package/server/controllers/create-data-sample.ts +16 -10
  80. package/server/controllers/{issue-collect-data.ts → issue-data-collection-task.ts} +13 -7
  81. package/server/engine/task/issue-collect-data.ts +2 -2
  82. package/server/routes.ts +5 -3
  83. package/server/service/data-ooc/data-ooc.ts +12 -3
  84. package/server/service/data-sample/data-sample.ts +4 -1
  85. package/server/service/data-set/data-set-mutation.ts +44 -49
  86. package/server/service/data-set/data-set-query.ts +98 -30
  87. package/server/service/data-set/data-set-type.ts +4 -4
  88. package/server/service/data-set/data-set.ts +10 -0
  89. package/server/service/data-set-history/data-set-history.ts +8 -2
  90. package/translations/en.json +2 -0
  91. package/translations/ja.json +2 -0
  92. package/translations/ko.json +2 -0
  93. package/translations/ms.json +2 -0
  94. package/translations/zh.json +2 -0
  95. package/dist-server/controllers/issue-collect-data.d.ts +0 -2
  96. package/dist-server/controllers/issue-collect-data.js.map +0 -1
@@ -260,17 +260,19 @@ export async function createDataSample(newDataSample: NewDataSample, context: Re
260
260
  })) as Activity
261
261
 
262
262
  if (activity) {
263
- const assignee =
263
+ const assigneeRole =
264
264
  dataSet.supervisoryRoleId &&
265
265
  (await tx.getRepository(Role).findOneBy({
266
266
  domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
267
267
  id: dataSet.supervisoryRoleId
268
268
  }))
269
269
 
270
- const assignees = dataSet.supervisoryRoleId ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assignee }] : []
270
+ // const assignees = dataSet.supervisoryRoleId
271
+ // ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assigneeRole }]
272
+ // : []
271
273
 
272
274
  /* 해당 dataset의 supervisor로 하여금, OOC를 리뷰하고 instruction을 작성해서, OOC 해결을 위한 태스크를 dataset assignees에게 지시하도록 한다. */
273
- if (assignees && assignees instanceof Array && assignees.length > 0) {
275
+ if (assigneeRole) {
274
276
  const activityInstance = {
275
277
  name: `[OOC 검토] ${dataSet.name}`,
276
278
  description: dataSet.description,
@@ -279,7 +281,9 @@ export async function createDataSample(newDataSample: NewDataSample, context: Re
279
281
  input: {
280
282
  dataOocId: dataOoc.id
281
283
  },
282
- assignees,
284
+ assigneeRole,
285
+ threadsMin: 1,
286
+ threadsMax: 1,
283
287
  approvalLine: []
284
288
  }
285
289
 
@@ -362,19 +366,19 @@ export async function createDataSample(newDataSample: NewDataSample, context: Re
362
366
  })) as Activity
363
367
 
364
368
  if (activity) {
365
- const assignee =
369
+ const assigneeRole =
366
370
  dataSet.supervisoryRoleId &&
367
371
  (await tx.getRepository(Role).findOneBy({
368
372
  domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
369
373
  id: dataSet.supervisoryRoleId
370
374
  }))
371
375
 
372
- const assignees = dataSet.supervisoryRoleId
373
- ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assignee }]
374
- : []
376
+ // const assignees = dataSet.supervisoryRoleId
377
+ // ? [{ type: 'Role', value: dataSet.supervisoryRoleId, assigneeRole }]
378
+ // : []
375
379
 
376
380
  /* 해당 dataset의 supervisor로 하여금, data를 리뷰하고 instruction을 작성해서, approvalLine을 이용해서 승인을 한다. */
377
- if (assignees && assignees instanceof Array && assignees.length > 0) {
381
+ if (assigneeRole) {
378
382
  dataSample.dataItems = dataItems
379
383
  const activityInstance = {
380
384
  name: `[Data 검토] ${dataSet.name}`,
@@ -384,7 +388,9 @@ export async function createDataSample(newDataSample: NewDataSample, context: Re
384
388
  input: {
385
389
  dataSampleId: dataSample.id
386
390
  },
387
- assignees,
391
+ assigneeRole,
392
+ threadsMin: 1,
393
+ threadsMax: 1,
388
394
  approvalLine: dataSet.reviewApprovalLine
389
395
  }
390
396
 
@@ -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,10 +34,12 @@ 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에게 할당한다. */
38
- if (assignees && assignees instanceof Array && assignees.length > 0) {
41
+ /* 해당 dataset에 대한 데이타 수집 태스크를 dataset entryRole에게 할당한다. */
42
+ if (entryRole) {
39
43
  const activityInstance = {
40
44
  name: `[Data 수집] ${dataSet.name}`,
41
45
  description: dataSet.description,
@@ -45,7 +49,9 @@ export async function issueCollectData(
45
49
  dataSetId: dataSet.id,
46
50
  dataSetName: dataSet.name
47
51
  },
48
- assignees
52
+ assigneeRole: entryRole,
53
+ threadsMin: 1,
54
+ threadsMax: 1
49
55
  }
50
56
 
51
57
  context.state = {
@@ -57,7 +63,7 @@ export async function issueCollectData(
57
63
  return await issue(activityInstance, context)
58
64
  } else {
59
65
  throw new Error(
60
- `Assignees not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`
66
+ `Data Entry Role not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`
61
67
  )
62
68
  }
63
69
  } 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
  })
@@ -88,7 +88,10 @@ export class DataOoc {
88
88
  ? 'longtext'
89
89
  : DATABASE_TYPE == 'oracle'
90
90
  ? 'clob'
91
- : 'varchar'
91
+ : DATABASE_TYPE == 'mssql'
92
+ ? 'nvarchar'
93
+ : 'varchar',
94
+ length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined
92
95
  })
93
96
  @Field({ nullable: true })
94
97
  correctiveInstruction?: string
@@ -100,7 +103,10 @@ export class DataOoc {
100
103
  ? 'longtext'
101
104
  : DATABASE_TYPE == 'oracle'
102
105
  ? 'clob'
103
- : 'varchar'
106
+ : DATABASE_TYPE == 'mssql'
107
+ ? 'nvarchar'
108
+ : 'varchar',
109
+ length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined
104
110
  })
105
111
  @Field({ nullable: true })
106
112
  correctiveAction?: string
@@ -159,7 +165,10 @@ export class DataOoc {
159
165
  ? 'longtext'
160
166
  : DATABASE_TYPE == 'oracle'
161
167
  ? 'clob'
162
- : 'varchar'
168
+ : DATABASE_TYPE == 'mssql'
169
+ ? 'nvarchar'
170
+ : 'varchar',
171
+ length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined
163
172
  })
164
173
  @Field({ nullable: true })
165
174
  rawData?: string
@@ -104,7 +104,10 @@ export class DataSample {
104
104
  ? 'longtext'
105
105
  : DATABASE_TYPE == 'oracle'
106
106
  ? 'clob'
107
- : 'varchar',
107
+ : DATABASE_TYPE == 'mssql'
108
+ ? 'nvarchar'
109
+ : 'varchar',
110
+ length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined,
108
111
  transformer: json5Transformer
109
112
  })
110
113
  @Field({ nullable: true })
@@ -1,14 +1,16 @@
1
1
  import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
2
  import { In } from 'typeorm'
3
3
 
4
+ import { getRepository } from '@things-factory/shell'
5
+ import { User } from '@things-factory/auth-base'
4
6
  import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
5
7
  import { ApprovalLineItem, OrgMemberTargetType } from '@things-factory/organization'
6
8
  import { Application, CallbackBase, registerSchedule, unregisterSchedule } from '@things-factory/scheduler-client'
7
- import { AssigneeItem } from '@things-factory/worklist'
8
9
 
9
10
  import { getDataFinalizeCrontabSchedule } from '../../controllers/finalize-data-collection'
10
11
  import { DataSet } from './data-set'
11
12
  import { DataSetPatch, NewDataSet } from './data-set-type'
13
+ import { issueDataCollectionTask } from '../../controllers/issue-data-collection-task'
12
14
 
13
15
  const crypto = require('crypto')
14
16
 
@@ -78,39 +80,6 @@ function getOutlierApprovalLineValue(patch: NewDataSet | DataSetPatch): Approval
78
80
  })
79
81
  }
80
82
 
81
- function getAssigneesValue(patch: NewDataSet | DataSetPatch): AssigneeItem[] {
82
- const { assignees } = patch
83
-
84
- if (!('assignees' in patch)) {
85
- /* assignees이 언급되지 않았다면, 업데이트하지 않는다. */
86
- return
87
- }
88
-
89
- if (!assignees || !(assignees instanceof Array)) {
90
- /* assignees의 값이 없거나 배열이 아니라면, 클리어시킨다. */
91
- return null
92
- }
93
-
94
- return assignees
95
- .map(m => {
96
- return {
97
- type: m.type,
98
- assignee: m.assignee
99
- }
100
- })
101
- .filter(m => m.type)
102
- .filter(m => {
103
- switch (m.type) {
104
- case OrgMemberTargetType.Employee:
105
- case OrgMemberTargetType.Department:
106
- case OrgMemberTargetType.Role:
107
- return !!m.assignee?.id
108
- default:
109
- return true
110
- }
111
- })
112
- }
113
-
114
83
  @Resolver(DataSet)
115
84
  export class DataSetMutation {
116
85
  @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
@@ -118,12 +87,11 @@ export class DataSetMutation {
118
87
  @Mutation(returns => DataSet, { description: 'To create new DataSet' })
119
88
  async createDataSet(@Arg('dataSet') dataSet: NewDataSet, @Ctx() context: ResolverContext): Promise<DataSet> {
120
89
  const { domain, user, tx } = context.state
121
- const dataSetRepo = tx.getRepository(DataSet)
90
+ const dataSetRepo = getRepository(DataSet, tx)
122
91
 
123
92
  const result = await dataSetRepo.save({
124
93
  ...dataSet,
125
94
  approvalLine: getApprovalLineValue(dataSet),
126
- assignees: getAssigneesValue(dataSet),
127
95
  outlierApprovalLineValue: getOutlierApprovalLineValue(dataSet),
128
96
  version: 1,
129
97
  domain,
@@ -145,7 +113,7 @@ export class DataSetMutation {
145
113
  @Ctx() context: ResolverContext
146
114
  ): Promise<DataSet> {
147
115
  const { domain, user, tx } = context.state
148
- const dataSetRepo = tx.getRepository(DataSet)
116
+ const dataSetRepo = getRepository(DataSet, tx)
149
117
 
150
118
  const dataSet = await dataSetRepo.findOne({
151
119
  where: { domain: { id: domain.id }, id },
@@ -158,7 +126,6 @@ export class DataSetMutation {
158
126
  ...patch,
159
127
  approvalLine: getApprovalLineValue(patch),
160
128
  outlierApprovalLineValue: getOutlierApprovalLineValue(patch),
161
- assignees: getAssigneesValue(patch),
162
129
  updater: user
163
130
  })
164
131
 
@@ -175,7 +142,7 @@ export class DataSetMutation {
175
142
  @Ctx() context: ResolverContext
176
143
  ): Promise<DataSet[]> {
177
144
  const { domain, user, tx } = context.state
178
- const dataSetRepo = tx.getRepository(DataSet)
145
+ const dataSetRepo = getRepository(DataSet, tx)
179
146
 
180
147
  let results = []
181
148
  const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
@@ -189,7 +156,6 @@ export class DataSetMutation {
189
156
  const result = await dataSetRepo.save({
190
157
  ...newRecord,
191
158
  approvalLine: getApprovalLineValue(newRecord),
192
- assignees: getAssigneesValue(newRecord),
193
159
  outlierApprovalLineValue: getOutlierApprovalLineValue(newRecord),
194
160
  domain,
195
161
  creator: user,
@@ -220,7 +186,6 @@ export class DataSetMutation {
220
186
  ...updateRecord,
221
187
  approvalLine: getApprovalLineValue(updateRecord),
222
188
  outlierApprovalLineValue: getOutlierApprovalLineValue(updateRecord),
223
- assignees: getAssigneesValue(updateRecord),
224
189
  updater: user
225
190
  })
226
191
 
@@ -242,7 +207,7 @@ export class DataSetMutation {
242
207
  async deleteDataSet(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
243
208
  const { domain, tx } = context.state
244
209
 
245
- await tx.getRepository(DataSet).delete({ domain: { id: domain.id }, id })
210
+ await getRepository(DataSet, tx).delete({ domain: { id: domain.id }, id })
246
211
  await deleteAttachmentsByRef(null, { refBys: [`report-${id}`] }, context)
247
212
 
248
213
  return true
@@ -254,7 +219,7 @@ export class DataSetMutation {
254
219
  async deleteDataSets(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<boolean> {
255
220
  const { domain, tx } = context.state
256
221
 
257
- await tx.getRepository(DataSet).delete({
222
+ await getRepository(DataSet, tx).delete({
258
223
  domain: { id: domain.id },
259
224
  id: In(ids)
260
225
  })
@@ -264,6 +229,36 @@ export class DataSetMutation {
264
229
  return true
265
230
  }
266
231
 
232
+ @Directive('@transaction')
233
+ @Mutation(returns => Boolean, { description: 'To issue data-collection task for the given dataset' })
234
+ async issueDataCollection(@Arg('dataSetId') dataSetId: string, @Ctx() context: ResolverContext): Promise<boolean> {
235
+ const { domain, tx, user } = context.state
236
+
237
+ const dataSet = await getRepository(DataSet, tx).findOne({
238
+ where: {
239
+ domain: {
240
+ id: In([domain.id, domain.parentId].filter(Boolean))
241
+ },
242
+ id: dataSetId
243
+ }
244
+ })
245
+
246
+ const { supervisoryRoleId } = dataSet
247
+
248
+ const me = await getRepository(User, tx).findOne({
249
+ where: { id: user.id },
250
+ relations: ['roles']
251
+ })
252
+
253
+ if (!me.roles.find(role => role.id == supervisoryRoleId)) {
254
+ throw new Error(`You don't have permission to issue data collection task for this dataset.`)
255
+ }
256
+
257
+ const activityInstance = await issueDataCollectionTask(domain.id, dataSet.id, context)
258
+
259
+ return !!activityInstance
260
+ }
261
+
267
262
  @Directive('@transaction')
268
263
  @Mutation(returns => DataSet, { description: 'To start data collection schedule for the given dataset' })
269
264
  async startDataCollectionSchedule(
@@ -272,7 +267,7 @@ export class DataSetMutation {
272
267
  ): Promise<DataSet> {
273
268
  const { domain, tx } = context.state
274
269
 
275
- var repository = tx.getRepository(DataSet)
270
+ var repository = getRepository(DataSet, tx)
276
271
  var dataSet = await repository.findOne({
277
272
  where: { domain: { id: domain.id }, id: dataSetId }
278
273
  })
@@ -338,7 +333,7 @@ export class DataSetMutation {
338
333
  ): Promise<DataSet | undefined> {
339
334
  const { domain, tx } = context.state
340
335
 
341
- var repository = tx.getRepository(DataSet)
336
+ var repository = getRepository(DataSet, tx)
342
337
  var dataSet = await repository.findOne({
343
338
  where: { domain: { id: domain.id }, id: dataSetId }
344
339
  })
@@ -371,7 +366,7 @@ export class DataSetMutation {
371
366
  ): Promise<DataSet> {
372
367
  const { domain, tx } = context.state
373
368
 
374
- var repository = tx.getRepository(DataSet)
369
+ var repository = getRepository(DataSet, tx)
375
370
  var dataSet = await repository.findOne({
376
371
  where: { domain: { id: domain.id }, id: dataSetId }
377
372
  })
@@ -448,7 +443,7 @@ export class DataSetMutation {
448
443
  ): Promise<DataSet | undefined> {
449
444
  const { domain, tx } = context.state
450
445
 
451
- var repository = tx.getRepository(DataSet)
446
+ var repository = getRepository(DataSet, tx)
452
447
  var dataSet = await repository.findOne({
453
448
  where: { domain: { id: domain.id }, id: dataSetId }
454
449
  })
@@ -482,7 +477,7 @@ export class DataSetMutation {
482
477
  @Ctx() context: ResolverContext
483
478
  ): Promise<boolean> {
484
479
  const { domain, tx } = context.state
485
- const dataSetRepo = tx.getRepository(DataSet)
480
+ const dataSetRepo = getRepository(DataSet, tx)
486
481
 
487
482
  await Promise.all(
488
483
  dataSets.map(async (dataSet: DataSet) => {
@@ -501,7 +496,7 @@ export class DataSetMutation {
501
496
  @Mutation(returns => [DataSet], { description: 'To copy multiple data-sets' })
502
497
  async copyDataSets(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<DataSet[]> {
503
498
  const { domain, user, tx } = context.state
504
- const dataSetRepo = tx.getRepository(DataSet)
499
+ const dataSetRepo = getRepository(DataSet, tx)
505
500
 
506
501
  const originals = await dataSetRepo.find({
507
502
  where: {