@things-factory/dataset 5.0.0-zeta.1 → 5.0.0-zeta.12
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/client/bootstrap.js +2 -3
- package/client/pages/data-entry/data-entry-list-page.js +0 -1
- package/client/pages/data-ooc/data-ooc-list-page.js +11 -16
- package/client/pages/data-ooc/data-ooc-view.js +19 -14
- package/client/pages/data-report/data-report-list-page.js +0 -1
- package/client/pages/data-sample/data-sample-list-page.js +11 -12
- package/client/pages/data-sample/data-sample-view.js +3 -2
- package/client/pages/data-set/data-item-list.js +32 -98
- package/client/pages/data-set/data-set-list-page.js +0 -1
- package/config/config.development.js +1 -1
- package/config/config.production.js +13 -1
- package/dist-server/controllers/create-data-sample.js +10 -44
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/controllers/data-use-case.js +11 -5
- package/dist-server/controllers/data-use-case.js.map +1 -1
- package/dist-server/controllers/index.js +1 -1
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/service/data-item/index.js +1 -4
- package/dist-server/service/data-item/index.js.map +1 -1
- package/dist-server/service/data-ooc/data-ooc-query.js +15 -10
- package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -1
- package/dist-server/service/data-ooc/data-ooc-type.js +4 -0
- package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -1
- package/dist-server/service/data-ooc/data-ooc.js +11 -14
- package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-query.js +18 -0
- package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-type.js +4 -0
- package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
- package/dist-server/service/data-sample/data-sample.js +12 -3
- package/dist-server/service/data-sample/data-sample.js.map +1 -1
- package/dist-server/service/{data-item → data-set}/data-item-type.js +60 -33
- package/dist-server/service/data-set/data-item-type.js.map +1 -0
- package/dist-server/service/data-set/data-set-mutation.js +40 -63
- package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
- package/dist-server/service/data-set/data-set-query.js +4 -0
- package/dist-server/service/data-set/data-set-query.js.map +1 -1
- package/dist-server/service/data-set/data-set-type.js +10 -1
- package/dist-server/service/data-set/data-set-type.js.map +1 -1
- package/dist-server/service/data-set/data-set.js +14 -3
- package/dist-server/service/data-set/data-set.js.map +1 -1
- package/dist-server/service/data-set-history/data-set-history-query.js +173 -0
- package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -0
- package/dist-server/service/data-set-history/data-set-history-type.js +29 -0
- package/dist-server/service/data-set-history/data-set-history-type.js.map +1 -0
- package/dist-server/service/data-set-history/data-set-history.js +205 -0
- package/dist-server/service/data-set-history/data-set-history.js.map +1 -0
- package/dist-server/service/data-set-history/index.js +8 -0
- package/dist-server/service/data-set-history/index.js.map +1 -0
- package/dist-server/service/index.js +6 -3
- package/dist-server/service/index.js.map +1 -1
- package/package.json +18 -17
- package/server/controllers/create-data-sample.ts +12 -49
- package/server/controllers/data-use-case.ts +19 -7
- package/server/controllers/index.ts +1 -1
- package/server/service/data-item/index.ts +0 -3
- package/server/service/data-ooc/data-ooc-query.ts +13 -8
- package/server/service/data-ooc/data-ooc-type.ts +3 -0
- package/server/service/data-ooc/data-ooc.ts +9 -14
- package/server/service/data-sample/data-sample-query.ts +14 -1
- package/server/service/data-sample/data-sample-type.ts +3 -0
- package/server/service/data-sample/data-sample.ts +10 -3
- package/server/service/data-set/data-item-type.ts +82 -0
- package/server/service/data-set/data-set-mutation.ts +64 -60
- package/server/service/data-set/data-set-query.ts +5 -0
- package/server/service/data-set/data-set-type.ts +8 -1
- package/server/service/data-set/data-set.ts +9 -3
- package/server/service/data-set-history/data-set-history-query.ts +110 -0
- package/server/service/data-set-history/data-set-history-type.ts +12 -0
- package/server/service/data-set-history/data-set-history.ts +160 -0
- package/server/service/data-set-history/index.ts +5 -0
- package/server/service/index.ts +7 -4
- package/translations/en.json +4 -4
- package/translations/ko.json +10 -10
- package/translations/ms.json +4 -4
- package/translations/zh.json +4 -4
- package/dist-server/service/data-item/data-item-mutation.js +0 -73
- package/dist-server/service/data-item/data-item-mutation.js.map +0 -1
- package/dist-server/service/data-item/data-item-query.js +0 -104
- package/dist-server/service/data-item/data-item-query.js.map +0 -1
- package/dist-server/service/data-item/data-item-type.js.map +0 -1
- package/server/service/data-item/data-item-mutation.ts +0 -61
- package/server/service/data-item/data-item-query.ts +0 -58
- package/server/service/data-item/data-item-type.ts +0 -57
@@ -14,14 +14,14 @@ import { User } from '@things-factory/auth-base'
|
|
14
14
|
import { config } from '@things-factory/env'
|
15
15
|
import { Domain, ScalarObject } from '@things-factory/shell'
|
16
16
|
|
17
|
+
import { DataItem } from '../data-set/data-item-type'
|
17
18
|
import { DataSet } from '../data-set/data-set'
|
18
19
|
|
19
20
|
const ORMCONFIG = config.get('ormconfig', {})
|
20
21
|
const DATABASE_TYPE = ORMCONFIG.type
|
21
22
|
@Entity()
|
22
|
-
@Index('ix_data_sample_0', (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet], { unique: false })
|
23
23
|
@Index(
|
24
|
-
'
|
24
|
+
'ix_data_sample_0',
|
25
25
|
(dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.collectedAt],
|
26
26
|
{ unique: false }
|
27
27
|
)
|
@@ -71,13 +71,20 @@ export class DataSample {
|
|
71
71
|
@RelationId((dataSample: DataSample) => dataSample.dataSet)
|
72
72
|
dataSetId?: string
|
73
73
|
|
74
|
+
@Column({ nullable: true })
|
75
|
+
@Field({ nullable: true })
|
76
|
+
dataSetVersion?: number
|
77
|
+
|
74
78
|
@Column('simple-json', { nullable: true })
|
75
79
|
@Field(type => ScalarObject, { nullable: true })
|
76
80
|
data?: ScalarObject
|
77
81
|
|
78
82
|
@Column('simple-json', { nullable: true })
|
79
83
|
@Field(type => ScalarObject, { nullable: true })
|
80
|
-
|
84
|
+
judgment?: ScalarObject
|
85
|
+
|
86
|
+
@Field(type => [DataItem], { nullable: true })
|
87
|
+
dataItems?: DataItem[]
|
81
88
|
|
82
89
|
@Column({
|
83
90
|
nullable: true,
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import { Field, InputType, Int, ObjectType, registerEnumType } from 'type-graphql'
|
2
|
+
|
3
|
+
import { ScalarObject } from '@things-factory/shell'
|
4
|
+
|
5
|
+
export enum DataItemType {
|
6
|
+
number = 'number',
|
7
|
+
text = 'text',
|
8
|
+
boolean = 'boolean',
|
9
|
+
select = 'select',
|
10
|
+
file = 'file'
|
11
|
+
}
|
12
|
+
|
13
|
+
registerEnumType(DataItemType, {
|
14
|
+
name: 'DataItemType',
|
15
|
+
description: 'state enumeration of a data-item'
|
16
|
+
})
|
17
|
+
|
18
|
+
@ObjectType({ description: 'Entity for DataItem' })
|
19
|
+
export class DataItem {
|
20
|
+
@Field()
|
21
|
+
name: string
|
22
|
+
|
23
|
+
@Field({ nullable: true })
|
24
|
+
description?: string
|
25
|
+
|
26
|
+
@Field({ nullable: true })
|
27
|
+
tag?: string
|
28
|
+
|
29
|
+
@Field({ nullable: true })
|
30
|
+
active?: boolean
|
31
|
+
|
32
|
+
@Field({ nullable: true })
|
33
|
+
hidden?: boolean
|
34
|
+
|
35
|
+
@Field({ nullable: true })
|
36
|
+
type?: DataItemType
|
37
|
+
|
38
|
+
@Field(type => ScalarObject, { nullable: true })
|
39
|
+
options?: ScalarObject
|
40
|
+
|
41
|
+
@Field({ nullable: true })
|
42
|
+
unit?: string
|
43
|
+
|
44
|
+
@Field(type => Int, { nullable: true })
|
45
|
+
quota: number
|
46
|
+
|
47
|
+
@Field(type => ScalarObject, { nullable: true })
|
48
|
+
spec?: ScalarObject
|
49
|
+
}
|
50
|
+
|
51
|
+
@InputType()
|
52
|
+
export class DataItemPatch {
|
53
|
+
@Field({ nullable: true })
|
54
|
+
name?: string
|
55
|
+
|
56
|
+
@Field({ nullable: true })
|
57
|
+
description?: string
|
58
|
+
|
59
|
+
@Field({ nullable: true })
|
60
|
+
tag?: string
|
61
|
+
|
62
|
+
@Field(type => DataItemType, { nullable: true })
|
63
|
+
type?: DataItemType
|
64
|
+
|
65
|
+
@Field(type => ScalarObject, { nullable: true })
|
66
|
+
options?: ScalarObject
|
67
|
+
|
68
|
+
@Field({ nullable: true })
|
69
|
+
unit?: string
|
70
|
+
|
71
|
+
@Field(type => Int, { nullable: true })
|
72
|
+
quota?: number
|
73
|
+
|
74
|
+
@Field({ nullable: true })
|
75
|
+
active?: boolean
|
76
|
+
|
77
|
+
@Field({ nullable: true })
|
78
|
+
hidden?: boolean
|
79
|
+
|
80
|
+
@Field(type => ScalarObject, { nullable: true })
|
81
|
+
spec?: ScalarObject
|
82
|
+
}
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
2
|
-
import {
|
2
|
+
import { In } from 'typeorm'
|
3
3
|
|
4
4
|
import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
|
5
|
-
import { Domain } from '@things-factory/shell'
|
6
5
|
|
7
|
-
import {
|
6
|
+
import { DataSetHistory } from '../data-set-history/data-set-history'
|
8
7
|
import { DataSet } from './data-set'
|
9
8
|
import { DataSetPatch, NewDataSet } from './data-set-type'
|
10
9
|
|
@@ -17,9 +16,12 @@ export class DataSetMutation {
|
|
17
16
|
@Mutation(returns => DataSet, { description: 'To create new DataSet' })
|
18
17
|
async createDataSet(@Arg('dataSet') dataSet: NewDataSet, @Ctx() context: any): Promise<DataSet> {
|
19
18
|
const { domain, user, tx } = context.state
|
19
|
+
const dataSetRepo = tx.getRepository(DataSet)
|
20
|
+
const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
|
20
21
|
|
21
|
-
const result = await
|
22
|
+
const result = await dataSetRepo.save({
|
22
23
|
...dataSet,
|
24
|
+
version: 1,
|
23
25
|
domain,
|
24
26
|
creator: user,
|
25
27
|
updater: user
|
@@ -27,6 +29,12 @@ export class DataSetMutation {
|
|
27
29
|
|
28
30
|
await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: '+' })
|
29
31
|
|
32
|
+
await dataSetHistoryRepo.save(
|
33
|
+
await dataSetRepo.findOne(result.id, {
|
34
|
+
relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
|
35
|
+
})
|
36
|
+
)
|
37
|
+
|
30
38
|
return result
|
31
39
|
}
|
32
40
|
|
@@ -35,20 +43,28 @@ export class DataSetMutation {
|
|
35
43
|
@Mutation(returns => DataSet, { description: 'To modify DataSet information' })
|
36
44
|
async updateDataSet(@Arg('id') id: string, @Arg('patch') patch: DataSetPatch, @Ctx() context: any): Promise<DataSet> {
|
37
45
|
const { domain, user, tx } = context.state
|
46
|
+
const dataSetRepo = tx.getRepository(DataSet)
|
47
|
+
const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
|
38
48
|
|
39
|
-
const
|
40
|
-
const dataSet = await repository.findOne({
|
49
|
+
const dataSet = await dataSetRepo.findOne({
|
41
50
|
where: { domain, id }
|
42
51
|
})
|
43
52
|
|
44
|
-
const result = await
|
53
|
+
const result = await dataSetRepo.save({
|
45
54
|
...dataSet,
|
46
55
|
...patch,
|
56
|
+
version: (dataSet.version || 0) + 1,
|
47
57
|
updater: user
|
48
58
|
})
|
49
59
|
|
50
60
|
await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: 'M' })
|
51
61
|
|
62
|
+
await dataSetHistoryRepo.save(
|
63
|
+
await dataSetRepo.findOne(id, {
|
64
|
+
relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
|
65
|
+
})
|
66
|
+
)
|
67
|
+
|
52
68
|
return result
|
53
69
|
}
|
54
70
|
|
@@ -60,11 +76,12 @@ export class DataSetMutation {
|
|
60
76
|
@Ctx() context: any
|
61
77
|
): Promise<DataSet[]> {
|
62
78
|
const { domain, user, tx } = context.state
|
79
|
+
const dataSetRepo = tx.getRepository(DataSet)
|
80
|
+
const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
|
63
81
|
|
64
82
|
let results = []
|
65
83
|
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
66
84
|
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
67
|
-
const dataSetRepo = tx.getRepository(DataSet)
|
68
85
|
|
69
86
|
if (_createRecords.length > 0) {
|
70
87
|
const cuFlag = '+'
|
@@ -73,6 +90,7 @@ export class DataSetMutation {
|
|
73
90
|
|
74
91
|
const result = await dataSetRepo.save({
|
75
92
|
...newRecord,
|
93
|
+
version: 1,
|
76
94
|
domain,
|
77
95
|
creator: user,
|
78
96
|
updater: user
|
@@ -80,7 +98,12 @@ export class DataSetMutation {
|
|
80
98
|
|
81
99
|
await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
|
82
100
|
|
83
|
-
results.push({
|
101
|
+
results.push({
|
102
|
+
...(await dataSetRepo.findOne(result.id, {
|
103
|
+
relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
|
104
|
+
})),
|
105
|
+
cuFlag
|
106
|
+
})
|
84
107
|
}
|
85
108
|
}
|
86
109
|
|
@@ -93,15 +116,23 @@ export class DataSetMutation {
|
|
93
116
|
const result = await dataSetRepo.save({
|
94
117
|
...dataSet,
|
95
118
|
...newRecord,
|
119
|
+
version: (dataSet.version || 0) + 1,
|
96
120
|
updater: user
|
97
121
|
})
|
98
122
|
|
99
123
|
await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
|
100
124
|
|
101
|
-
results.push({
|
125
|
+
results.push({
|
126
|
+
...(await dataSetRepo.findOne(result.id, {
|
127
|
+
relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
|
128
|
+
})),
|
129
|
+
cuFlag
|
130
|
+
})
|
102
131
|
}
|
103
132
|
}
|
104
133
|
|
134
|
+
results.forEach(result => dataSetHistoryRepo.save({ ...result }))
|
135
|
+
|
105
136
|
return results
|
106
137
|
}
|
107
138
|
|
@@ -139,20 +170,22 @@ export class DataSetMutation {
|
|
139
170
|
@Arg('dataSets', type => [DataSetPatch]) dataSets: DataSet[],
|
140
171
|
@Ctx() context: any
|
141
172
|
): Promise<boolean> {
|
142
|
-
const tx
|
143
|
-
const
|
173
|
+
const { domain, tx } = context.state
|
174
|
+
const dataSetRepo = tx.getRepository(DataSet)
|
175
|
+
const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
|
176
|
+
|
144
177
|
await Promise.all(
|
145
178
|
dataSets.map(async (dataSet: DataSet) => {
|
146
|
-
const createdDataSet: DataSet = await
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
)
|
155
|
-
|
179
|
+
const createdDataSet: DataSet = await dataSetRepo.save({
|
180
|
+
domain,
|
181
|
+
version: 1 /* overridable by dataSet's origin value */,
|
182
|
+
...dataSet
|
183
|
+
})
|
184
|
+
await dataSetHistoryRepo.save(
|
185
|
+
...(await dataSetRepo.findOne(createdDataSet.id, {
|
186
|
+
relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
|
187
|
+
}))
|
188
|
+
)
|
156
189
|
})
|
157
190
|
)
|
158
191
|
|
@@ -164,69 +197,40 @@ export class DataSetMutation {
|
|
164
197
|
@Mutation(returns => [DataSet], { description: 'To copy multiple data-sets' })
|
165
198
|
async copyDataSets(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<DataSet[]> {
|
166
199
|
const { domain, user, tx } = context.state
|
200
|
+
const dataSetRepo = tx.getRepository(DataSet)
|
201
|
+
const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
|
167
202
|
|
168
|
-
const originals = await
|
203
|
+
const originals = await dataSetRepo.find({
|
169
204
|
where: {
|
170
205
|
id: In(ids),
|
171
206
|
domain
|
172
207
|
},
|
173
|
-
relations: ['domain', '
|
208
|
+
relations: ['domain', 'supervisoryRole', 'entryRole']
|
174
209
|
})
|
175
210
|
|
176
211
|
if (originals.length == 0) {
|
177
212
|
return []
|
178
213
|
}
|
179
214
|
|
180
|
-
var newDataItems = []
|
181
|
-
|
182
215
|
var newCopys = originals.map(dataSet => {
|
183
216
|
let dataSetId = crypto.randomUUID()
|
184
|
-
newDataItems.push(
|
185
|
-
...dataSet.dataItems.map(dataItem => {
|
186
|
-
return {
|
187
|
-
dataSet: dataSetId,
|
188
|
-
name: dataItem.name,
|
189
|
-
description: dataItem.description,
|
190
|
-
sequence: dataItem.sequence,
|
191
|
-
tag: dataItem.tag,
|
192
|
-
active: dataItem.active,
|
193
|
-
type: dataItem.type,
|
194
|
-
quota: dataItem.quota,
|
195
|
-
spec: dataItem.spec,
|
196
|
-
unit: dataItem.unit,
|
197
|
-
options: dataItem.options,
|
198
|
-
hidden: dataItem.hidden,
|
199
|
-
// connection: dataItem.connection,
|
200
|
-
// params: dataItem.params,
|
201
|
-
domain,
|
202
|
-
creator: user,
|
203
|
-
updater: user
|
204
|
-
}
|
205
|
-
})
|
206
|
-
)
|
207
217
|
|
208
218
|
return {
|
219
|
+
...dataSet,
|
209
220
|
id: dataSetId,
|
210
221
|
name: dataSet.name + ' (' + dataSetId + ')',
|
211
|
-
type: dataSet.type,
|
212
|
-
description: dataSet.description,
|
213
222
|
active: false,
|
214
|
-
|
215
|
-
timezone: dataSet.timezone,
|
216
|
-
|
223
|
+
version: 1,
|
217
224
|
domain,
|
218
225
|
creator: user,
|
219
226
|
updater: user
|
220
227
|
}
|
221
228
|
})
|
222
229
|
|
223
|
-
var copiedDataSets = await
|
224
|
-
|
230
|
+
var copiedDataSets = await dataSetRepo.save(newCopys)
|
231
|
+
await dataSetHistoryRepo.save(copiedDataSets)
|
225
232
|
|
226
|
-
return copiedDataSets
|
227
|
-
dataSet.dataItems = copiedDataItems.filter(dataItem => dataItem.dataSet == dataSet.id)
|
228
|
-
return dataSet
|
229
|
-
})
|
233
|
+
return copiedDataSets
|
230
234
|
}
|
231
235
|
|
232
236
|
async _createAttachment(context, attachment, { refId, cuFlag }) {
|
@@ -103,6 +103,11 @@ export class DataSetQuery {
|
|
103
103
|
|
104
104
|
@FieldResolver(type => [DataItem])
|
105
105
|
async dataItems(@Root() dataSet: DataSet): Promise<DataItem[]> {
|
106
|
+
/* TODO this fieldResolver should be removed. This is only for migration temporarily */
|
107
|
+
if (dataSet.dataItems) {
|
108
|
+
return dataSet.dataItems as DataItem[]
|
109
|
+
}
|
110
|
+
|
106
111
|
return await getRepository(DataItem).find({
|
107
112
|
dataSet
|
108
113
|
})
|
@@ -1,8 +1,9 @@
|
|
1
|
-
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
2
1
|
import { FileUpload, GraphQLUpload } from 'graphql-upload'
|
2
|
+
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
3
3
|
|
4
4
|
import { ObjectRef, ScalarObject } from '@things-factory/shell'
|
5
5
|
|
6
|
+
import { DataItemPatch } from './data-item-type'
|
6
7
|
import { DataSet, DataSetEntryType, DataSetMonitorType, DataSetReportType } from './data-set'
|
7
8
|
|
8
9
|
@InputType()
|
@@ -31,6 +32,9 @@ export class NewDataSet {
|
|
31
32
|
@Field(type => ScalarObject, { nullable: true })
|
32
33
|
partitionKeys?: ScalarObject
|
33
34
|
|
35
|
+
@Field(type => [DataItemPatch], { nullable: true })
|
36
|
+
dataItems?: DataItemPatch[]
|
37
|
+
|
34
38
|
@Field({ nullable: true })
|
35
39
|
schedule?: string
|
36
40
|
|
@@ -88,6 +92,9 @@ export class DataSetPatch {
|
|
88
92
|
@Field(type => ScalarObject, { nullable: true })
|
89
93
|
partitionKeys?: ScalarObject
|
90
94
|
|
95
|
+
@Field(type => [DataItemPatch], { nullable: true })
|
96
|
+
dataItems?: DataItemPatch[]
|
97
|
+
|
91
98
|
@Field({ nullable: true })
|
92
99
|
schedule?: string
|
93
100
|
|
@@ -5,7 +5,6 @@ import {
|
|
5
5
|
Entity,
|
6
6
|
Index,
|
7
7
|
ManyToOne,
|
8
|
-
OneToMany,
|
9
8
|
PrimaryGeneratedColumn,
|
10
9
|
RelationId,
|
11
10
|
UpdateDateColumn
|
@@ -14,7 +13,7 @@ import {
|
|
14
13
|
import { Role, User } from '@things-factory/auth-base'
|
15
14
|
import { Domain, ScalarObject } from '@things-factory/shell'
|
16
15
|
|
17
|
-
import { DataItem } from '
|
16
|
+
import { DataItem } from './data-item-type'
|
18
17
|
|
19
18
|
export enum DataSetEntryType {
|
20
19
|
Generated = 'generated',
|
@@ -77,6 +76,13 @@ export class DataSet {
|
|
77
76
|
@Field({ nullable: true })
|
78
77
|
description?: string
|
79
78
|
|
79
|
+
@Column({
|
80
|
+
nullable: true,
|
81
|
+
default: 1
|
82
|
+
})
|
83
|
+
@Field({ nullable: true })
|
84
|
+
version?: number = 1
|
85
|
+
|
80
86
|
@Column({
|
81
87
|
nullable: true
|
82
88
|
})
|
@@ -156,7 +162,7 @@ export class DataSet {
|
|
156
162
|
@Field(type => ScalarObject, { nullable: true })
|
157
163
|
partitionKeys?: ScalarObject
|
158
164
|
|
159
|
-
@
|
165
|
+
@Column('simple-json', { nullable: true })
|
160
166
|
@Field(type => [DataItem], { nullable: true })
|
161
167
|
dataItems: DataItem[]
|
162
168
|
|
@@ -0,0 +1,110 @@
|
|
1
|
+
import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
2
|
+
import { getRepository } from 'typeorm'
|
3
|
+
|
4
|
+
import { Attachment } from '@things-factory/attachment-base'
|
5
|
+
import { Role, User } from '@things-factory/auth-base'
|
6
|
+
import { Board } from '@things-factory/board-service'
|
7
|
+
import { Domain, getQueryBuilderFromListParams, ListParam, ScalarDate } from '@things-factory/shell'
|
8
|
+
|
9
|
+
import { DataSetHistory } from './data-set-history'
|
10
|
+
import { DataSetHistoryList } from './data-set-history-type'
|
11
|
+
|
12
|
+
@Resolver(DataSetHistory)
|
13
|
+
export class DataSetHistoryQuery {
|
14
|
+
@Directive('@privilege(category: "data-set-history", privilege: "query", domainOwnerGranted: true)')
|
15
|
+
@Query(returns => DataSetHistory, { description: 'To fetch a DataSetHistory' })
|
16
|
+
async dataSetHistory(
|
17
|
+
@Arg('id') id: string,
|
18
|
+
@Arg('timestamp', type => ScalarDate) timestamp: ScalarDate,
|
19
|
+
@Ctx() context: any
|
20
|
+
): Promise<DataSetHistory> {
|
21
|
+
const { domain } = context.state
|
22
|
+
|
23
|
+
return await getRepository(DataSetHistory).findOne({
|
24
|
+
where: { domain, id, updatedAt: timestamp }
|
25
|
+
})
|
26
|
+
}
|
27
|
+
|
28
|
+
@Directive('@privilege(category: "data-set-history", privilege: "query", domainOwnerGranted: true)')
|
29
|
+
@Query(returns => DataSetHistoryList, { description: 'To fetch multiple DataSetHistories' })
|
30
|
+
async dataSetHistories(@Args() params: ListParam, @Ctx() context: any): Promise<DataSetHistoryList> {
|
31
|
+
const { domain } = context.state
|
32
|
+
|
33
|
+
const queryBuilder = getQueryBuilderFromListParams({
|
34
|
+
repository: getRepository(DataSetHistory),
|
35
|
+
params,
|
36
|
+
domain,
|
37
|
+
searchables: ['name', 'description', 'supervisoryRole']
|
38
|
+
})
|
39
|
+
|
40
|
+
const [items, total] = await queryBuilder.getManyAndCount()
|
41
|
+
|
42
|
+
return { items, total }
|
43
|
+
}
|
44
|
+
|
45
|
+
@FieldResolver(type => Role)
|
46
|
+
async entryRole(@Root() dataSetHistory: DataSetHistory): Promise<Role> {
|
47
|
+
return (
|
48
|
+
dataSetHistory.entryRole ||
|
49
|
+
(await getRepository(Role).findOne({
|
50
|
+
id: dataSetHistory.entryRoleId
|
51
|
+
}))
|
52
|
+
)
|
53
|
+
}
|
54
|
+
|
55
|
+
@FieldResolver(type => Role)
|
56
|
+
async supervisoryRole(@Root() dataSetHistory: DataSetHistory): Promise<Role> {
|
57
|
+
return (
|
58
|
+
dataSetHistory.supervisoryRole ||
|
59
|
+
(await getRepository(Role).findOne({
|
60
|
+
id: dataSetHistory.supervisoryRoleId
|
61
|
+
}))
|
62
|
+
)
|
63
|
+
}
|
64
|
+
|
65
|
+
@FieldResolver(type => Board, { nullable: true })
|
66
|
+
async entryBoard(@Root() dataSetHistory: DataSetHistory) {
|
67
|
+
if (dataSetHistory.entryType == 'board' && dataSetHistory.entryView) {
|
68
|
+
return await getRepository(Board).findOne({ id: dataSetHistory.entryView })
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
@FieldResolver(type => Board, { nullable: true })
|
73
|
+
async monitorBoard(@Root() dataSetHistory: DataSetHistory) {
|
74
|
+
if (dataSetHistory.monitorType == 'board' && dataSetHistory.monitorView) {
|
75
|
+
return await getRepository(Board).findOne({ id: dataSetHistory.monitorView })
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
@FieldResolver(type => User)
|
80
|
+
async timestamp(@Root() dataSetHistory: DataSetHistory): Promise<User> {
|
81
|
+
return dataSetHistory.updatedAt
|
82
|
+
}
|
83
|
+
|
84
|
+
@FieldResolver(type => Domain)
|
85
|
+
async domain(@Root() dataSetHistory: DataSetHistory): Promise<Domain> {
|
86
|
+
return await getRepository(Domain).findOne(dataSetHistory.domainId)
|
87
|
+
}
|
88
|
+
|
89
|
+
@FieldResolver(type => User)
|
90
|
+
async updater(@Root() dataSetHistory: DataSetHistory): Promise<User> {
|
91
|
+
return await getRepository(User).findOne(dataSetHistory.updaterId)
|
92
|
+
}
|
93
|
+
|
94
|
+
@FieldResolver(type => User)
|
95
|
+
async creator(@Root() dataSetHistory: DataSetHistory): Promise<User> {
|
96
|
+
return await getRepository(User).findOne(dataSetHistory.creatorId)
|
97
|
+
}
|
98
|
+
|
99
|
+
@FieldResolver(type => String)
|
100
|
+
async reportTemplate(@Root() dataSetHistory: DataSetHistory): Promise<string | undefined> {
|
101
|
+
const attachment: Attachment = await getRepository(Attachment).findOne({
|
102
|
+
where: {
|
103
|
+
domain: dataSetHistory.domainId,
|
104
|
+
refBy: `report-${dataSetHistory.id}`
|
105
|
+
}
|
106
|
+
})
|
107
|
+
|
108
|
+
return attachment?.path
|
109
|
+
}
|
110
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Field, Int, ObjectType } from 'type-graphql'
|
2
|
+
|
3
|
+
import { DataSetHistory } from '../data-set-history/data-set-history'
|
4
|
+
|
5
|
+
@ObjectType()
|
6
|
+
export class DataSetHistoryList {
|
7
|
+
@Field(type => [DataSetHistory])
|
8
|
+
items: DataSetHistory[]
|
9
|
+
|
10
|
+
@Field(type => Int)
|
11
|
+
total: number
|
12
|
+
}
|