@things-factory/dataset 5.0.0-alpha.13 → 5.0.0-alpha.14
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/pages/data-entry-form.js +3 -1
- package/client/pages/data-ooc.js +418 -0
- package/client/pages/data-sample.js +39 -37
- package/client/pages/data-sensor.js +1 -1
- package/client/pages/data-set.js +61 -0
- package/client/route.js +4 -0
- package/dist-server/controllers/data-use-case.js +57 -0
- package/dist-server/controllers/data-use-case.js.map +1 -0
- package/dist-server/controllers/index.js +17 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/service/data-item/data-item-type.js +6 -6
- package/dist-server/service/data-item/data-item-type.js.map +1 -1
- package/dist-server/service/data-item/data-item.js +1 -1
- package/dist-server/service/data-item/data-item.js.map +1 -1
- package/dist-server/service/data-ooc/data-ooc-mutation.js +130 -0
- package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -0
- package/dist-server/service/data-ooc/data-ooc-query.js +89 -0
- package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -0
- package/dist-server/service/data-ooc/data-ooc-type.js +99 -0
- package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -0
- package/dist-server/service/data-ooc/data-ooc.js +218 -0
- package/dist-server/service/data-ooc/data-ooc.js.map +1 -0
- package/dist-server/service/data-ooc/index.js +9 -0
- package/dist-server/service/data-ooc/index.js.map +1 -0
- package/dist-server/service/data-sample/data-sample-mutation.js +28 -88
- package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-type.js +5 -43
- package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
- package/dist-server/service/data-sample/data-sample.js +20 -6
- package/dist-server/service/data-sample/data-sample.js.map +1 -1
- package/dist-server/service/data-set/data-set-mutation.js +1 -2
- package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
- package/dist-server/service/data-set/data-set-type.js +19 -3
- package/dist-server/service/data-set/data-set-type.js.map +1 -1
- package/dist-server/service/data-set/data-set.js +24 -12
- package/dist-server/service/data-set/data-set.js.map +1 -1
- package/dist-server/service/index.js +6 -2
- package/dist-server/service/index.js.map +1 -1
- package/package.json +14 -14
- package/server/controllers/data-use-case.ts +85 -0
- package/server/controllers/index.ts +1 -0
- package/server/index.ts +1 -0
- package/server/service/data-item/data-item-type.ts +3 -4
- package/server/service/data-item/data-item.ts +1 -1
- package/server/service/data-ooc/data-ooc-mutation.ts +117 -0
- package/server/service/data-ooc/data-ooc-query.ts +45 -0
- package/server/service/data-ooc/data-ooc-type.ts +62 -0
- package/server/service/data-ooc/data-ooc.ts +188 -0
- package/server/service/data-ooc/index.ts +6 -0
- package/server/service/data-sample/data-sample-mutation.ts +30 -95
- package/server/service/data-sample/data-sample-type.ts +3 -31
- package/server/service/data-sample/data-sample.ts +22 -7
- package/server/service/data-set/data-set-mutation.ts +1 -4
- package/server/service/data-set/data-set-type.ts +15 -4
- package/server/service/data-set/data-set.ts +18 -9
- package/server/service/index.ts +6 -2
- package/things-factory.config.js +4 -0
- package/translations/en.json +10 -1
- package/translations/ko.json +10 -1
- package/translations/ms.json +10 -1
- package/translations/zh.json +10 -1
@@ -0,0 +1,188 @@
|
|
1
|
+
import {
|
2
|
+
Column,
|
3
|
+
CreateDateColumn,
|
4
|
+
Entity,
|
5
|
+
Index,
|
6
|
+
JoinColumn,
|
7
|
+
ManyToOne,
|
8
|
+
OneToOne,
|
9
|
+
PrimaryGeneratedColumn,
|
10
|
+
RelationId,
|
11
|
+
UpdateDateColumn
|
12
|
+
} from 'typeorm'
|
13
|
+
import { Domain, ScalarObject } from '@things-factory/shell'
|
14
|
+
import { Field, ID, Int, ObjectType, registerEnumType } from 'type-graphql'
|
15
|
+
|
16
|
+
import { DataSample } from '../data-sample/data-sample'
|
17
|
+
import { DataSet } from '../data-set/data-set'
|
18
|
+
import { User } from '@things-factory/auth-base'
|
19
|
+
import { config } from '@things-factory/env'
|
20
|
+
|
21
|
+
const ORMCONFIG = config.get('ormconfig', {})
|
22
|
+
const DATABASE_TYPE = ORMCONFIG.type
|
23
|
+
|
24
|
+
export enum DataOocStatus {
|
25
|
+
CREATED = 'CREATED',
|
26
|
+
REVIEWED = 'REVIEWED',
|
27
|
+
CORRECTED = 'CORRECTED',
|
28
|
+
SUBMITTED = 'SUBMITTED',
|
29
|
+
APPROVED = 'APPROVED',
|
30
|
+
REJECTED = 'REJECTED'
|
31
|
+
}
|
32
|
+
|
33
|
+
registerEnumType(DataOocStatus, {
|
34
|
+
name: 'DataOocStatus',
|
35
|
+
description: 'Out of control data corrective action process progress status'
|
36
|
+
})
|
37
|
+
|
38
|
+
@Entity()
|
39
|
+
@Index('ix_data_ooc_0', (dataOoc: DataOoc) => [dataOoc.domain, dataOoc.dataSet], { unique: false })
|
40
|
+
@Index('ix_data_ooc_1', (dataOoc: DataOoc) => [dataOoc.domain, dataOoc.dataSample], { unique: true })
|
41
|
+
@Index('ix_data_ooc_2', (dataOoc: DataOoc) => [dataOoc.domain, dataOoc.collectedAt], { unique: false })
|
42
|
+
@ObjectType({ description: 'Entity for Out of control data' })
|
43
|
+
export class DataOoc {
|
44
|
+
@PrimaryGeneratedColumn('uuid')
|
45
|
+
@Field(type => ID)
|
46
|
+
readonly id: string
|
47
|
+
|
48
|
+
@ManyToOne(type => Domain)
|
49
|
+
@Field({ nullable: true })
|
50
|
+
domain?: Domain
|
51
|
+
|
52
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.domain)
|
53
|
+
domainId?: string
|
54
|
+
|
55
|
+
@Column()
|
56
|
+
@Field()
|
57
|
+
name: string
|
58
|
+
|
59
|
+
@Column({
|
60
|
+
nullable: true
|
61
|
+
})
|
62
|
+
@Field({ nullable: true })
|
63
|
+
description?: string
|
64
|
+
|
65
|
+
@ManyToOne(type => DataSet)
|
66
|
+
@Field(type => DataSet, { nullable: true })
|
67
|
+
dataSet?: DataSet
|
68
|
+
|
69
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.dataSet)
|
70
|
+
dataSetId?: string
|
71
|
+
|
72
|
+
@OneToOne(type => DataSample)
|
73
|
+
@JoinColumn()
|
74
|
+
@Field(type => DataSample, { nullable: true })
|
75
|
+
dataSample?: DataSample
|
76
|
+
|
77
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.dataSample)
|
78
|
+
dataSampleId?: string
|
79
|
+
|
80
|
+
@Column({
|
81
|
+
nullable: true
|
82
|
+
})
|
83
|
+
@Field({ nullable: true })
|
84
|
+
ooc?: boolean
|
85
|
+
|
86
|
+
@Column({
|
87
|
+
nullable: true
|
88
|
+
})
|
89
|
+
@Field({ nullable: true })
|
90
|
+
oos?: boolean
|
91
|
+
|
92
|
+
@Column({
|
93
|
+
nullable: true
|
94
|
+
})
|
95
|
+
@Field({ nullable: true })
|
96
|
+
state?: DataOocStatus
|
97
|
+
|
98
|
+
@Column({
|
99
|
+
nullable: true,
|
100
|
+
type:
|
101
|
+
DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
|
102
|
+
? 'longtext'
|
103
|
+
: DATABASE_TYPE == 'oracle'
|
104
|
+
? 'clob'
|
105
|
+
: 'varchar'
|
106
|
+
})
|
107
|
+
@Field({ nullable: true })
|
108
|
+
correctiveAction?: string
|
109
|
+
|
110
|
+
@Column({
|
111
|
+
nullable: true
|
112
|
+
})
|
113
|
+
@Field({ nullable: true })
|
114
|
+
type?: string
|
115
|
+
|
116
|
+
@Column('simple-json', { nullable: true })
|
117
|
+
@Field(type => ScalarObject, { nullable: true })
|
118
|
+
partitionKeys?: ScalarObject
|
119
|
+
|
120
|
+
@Column('simple-json', { nullable: true })
|
121
|
+
@Field(type => ScalarObject, { nullable: true })
|
122
|
+
data?: ScalarObject
|
123
|
+
|
124
|
+
@Column('simple-json', { nullable: true })
|
125
|
+
@Field(type => ScalarObject, { nullable: true })
|
126
|
+
spec?: ScalarObject
|
127
|
+
|
128
|
+
@Column({
|
129
|
+
nullable: true,
|
130
|
+
type:
|
131
|
+
DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
|
132
|
+
? 'longtext'
|
133
|
+
: DATABASE_TYPE == 'oracle'
|
134
|
+
? 'clob'
|
135
|
+
: 'varchar'
|
136
|
+
})
|
137
|
+
@Field({ nullable: true })
|
138
|
+
rawData?: string
|
139
|
+
|
140
|
+
@Column({
|
141
|
+
nullable: true
|
142
|
+
})
|
143
|
+
@Field({ nullable: true })
|
144
|
+
source?: string
|
145
|
+
|
146
|
+
@Column({ nullable: true })
|
147
|
+
@Field({ nullable: true })
|
148
|
+
collectedAt?: Date
|
149
|
+
|
150
|
+
@Column({ nullable: true })
|
151
|
+
@Field({ nullable: true })
|
152
|
+
correctedAt?: Date
|
153
|
+
|
154
|
+
@CreateDateColumn()
|
155
|
+
@Field({ nullable: true })
|
156
|
+
createdAt?: Date
|
157
|
+
|
158
|
+
@UpdateDateColumn()
|
159
|
+
@Field({ nullable: true })
|
160
|
+
updatedAt?: Date
|
161
|
+
|
162
|
+
@ManyToOne(type => User, {
|
163
|
+
nullable: true
|
164
|
+
})
|
165
|
+
@Field({ nullable: true })
|
166
|
+
corrector?: User
|
167
|
+
|
168
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.corrector)
|
169
|
+
correctorId?: string
|
170
|
+
|
171
|
+
@ManyToOne(type => User, {
|
172
|
+
nullable: true
|
173
|
+
})
|
174
|
+
@Field({ nullable: true })
|
175
|
+
creator?: User
|
176
|
+
|
177
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.creator)
|
178
|
+
creatorId?: string
|
179
|
+
|
180
|
+
@ManyToOne(type => User, {
|
181
|
+
nullable: true
|
182
|
+
})
|
183
|
+
@Field({ nullable: true })
|
184
|
+
updater?: User
|
185
|
+
|
186
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.creator)
|
187
|
+
updaterId?: string
|
188
|
+
}
|
@@ -1,12 +1,13 @@
|
|
1
1
|
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
2
|
-
import { In } from 'typeorm'
|
3
2
|
|
4
3
|
import { DataItem } from '../data-item/data-item'
|
5
4
|
import { DataSet } from '../data-set/data-set'
|
6
5
|
import { DataSample } from './data-sample'
|
7
|
-
import {
|
6
|
+
import { NewDataSample } from './data-sample-type'
|
8
7
|
|
9
8
|
import moment from 'moment'
|
9
|
+
import { DataUseCase } from '../../controllers'
|
10
|
+
import { DataOoc, DataOocStatus } from '../data-ooc/data-ooc'
|
10
11
|
|
11
12
|
const debug = require('debug')('things-factory:dataset:data-sample:data-sample-mutation')
|
12
13
|
|
@@ -43,7 +44,9 @@ export class DataSampleMutation {
|
|
43
44
|
async createDataSample(@Arg('dataSample') dataSample: NewDataSample, @Ctx() context: any): Promise<DataSample> {
|
44
45
|
const { domain, user, tx } = context.state
|
45
46
|
|
46
|
-
const dataSet = await tx.getRepository(DataSet).findOne({
|
47
|
+
const dataSet = await tx.getRepository(DataSet).findOne({
|
48
|
+
where: { id: dataSample.dataSet.id }
|
49
|
+
})
|
47
50
|
const dataItems = await tx.getRepository(DataItem).find({
|
48
51
|
where: {
|
49
52
|
domain,
|
@@ -74,113 +77,45 @@ export class DataSampleMutation {
|
|
74
77
|
partitionKeys = formatDate(partitionKeys, moment(collectedAt).utc())
|
75
78
|
partitionKeys = replaceVariables(partitionKeys, {
|
76
79
|
domain: domain.subdomain,
|
77
|
-
dataSetId: dataSample.
|
80
|
+
dataSetId: dataSample.dataSet.id,
|
78
81
|
...dataSample.data
|
79
82
|
})
|
80
83
|
|
81
|
-
|
84
|
+
const { ooc, oos } = DataUseCase.evaluate(dataSet, dataItems, dataSample.data) || {}
|
85
|
+
|
86
|
+
const result = await tx.getRepository(DataSample).save({
|
82
87
|
name: dataSet.name,
|
83
88
|
description: dataSet.description,
|
84
89
|
...dataSample,
|
85
90
|
domain,
|
86
91
|
partitionKeys,
|
87
92
|
spec,
|
93
|
+
ooc,
|
94
|
+
oos,
|
88
95
|
collectedAt,
|
89
96
|
creator: user,
|
90
97
|
updater: user
|
91
98
|
})
|
92
|
-
}
|
93
|
-
|
94
|
-
@Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
|
95
|
-
@Directive('@transaction')
|
96
|
-
@Mutation(returns => DataSample, { description: 'To modify data sample information' })
|
97
|
-
async updateDataSample(
|
98
|
-
@Arg('id') id: string,
|
99
|
-
@Arg('patch') patch: DataSamplePatch,
|
100
|
-
@Ctx() context: any
|
101
|
-
): Promise<DataSample> {
|
102
|
-
const { domain, user, tx } = context.state
|
103
|
-
|
104
|
-
const repository = tx.getRepository(DataSample)
|
105
|
-
const dataSample = await repository.findOne({
|
106
|
-
where: { domain, id }
|
107
|
-
})
|
108
|
-
|
109
|
-
return await repository.save({
|
110
|
-
...dataSample,
|
111
|
-
...patch,
|
112
|
-
updater: user
|
113
|
-
})
|
114
|
-
}
|
115
|
-
|
116
|
-
@Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
|
117
|
-
@Directive('@transaction')
|
118
|
-
@Mutation(returns => [DataSample], { description: "To modify multiple data samples' information" })
|
119
|
-
async updateMultipleDataSample(
|
120
|
-
@Arg('patches', type => [DataSamplePatch]) patches: DataSamplePatch[],
|
121
|
-
@Ctx() context: any
|
122
|
-
): Promise<DataSample[]> {
|
123
|
-
const { domain, user, tx } = context.state
|
124
|
-
|
125
|
-
let results = []
|
126
|
-
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
127
|
-
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
128
|
-
const dataSampleRepo = tx.getRepository(DataSample)
|
129
|
-
|
130
|
-
if (_createRecords.length > 0) {
|
131
|
-
for (let i = 0; i < _createRecords.length; i++) {
|
132
|
-
const newRecord = _createRecords[i]
|
133
|
-
|
134
|
-
const result = await dataSampleRepo.save({
|
135
|
-
...newRecord,
|
136
|
-
domain,
|
137
|
-
creator: user,
|
138
|
-
updater: user
|
139
|
-
})
|
140
99
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
}
|
100
|
+
if (ooc || oos) {
|
101
|
+
await tx.getRepository(DataOoc).save({
|
102
|
+
name: dataSet.name,
|
103
|
+
description: dataSet.description,
|
104
|
+
dataSet,
|
105
|
+
dataSample: result,
|
106
|
+
data: dataSample.data,
|
107
|
+
domain,
|
108
|
+
partitionKeys,
|
109
|
+
spec,
|
110
|
+
ooc,
|
111
|
+
oos,
|
112
|
+
state: DataOocStatus.CREATED,
|
113
|
+
collectedAt,
|
114
|
+
creator: user,
|
115
|
+
updater: user
|
116
|
+
})
|
158
117
|
}
|
159
118
|
|
160
|
-
return
|
161
|
-
}
|
162
|
-
|
163
|
-
@Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
|
164
|
-
@Directive('@transaction')
|
165
|
-
@Mutation(returns => Boolean, { description: 'To delete a data sample' })
|
166
|
-
async deleteDataSample(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
|
167
|
-
const { domain, tx } = context.state
|
168
|
-
|
169
|
-
await tx.getRepository(DataSample).delete({ domain, id })
|
170
|
-
return true
|
171
|
-
}
|
172
|
-
|
173
|
-
@Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
|
174
|
-
@Directive('@transaction')
|
175
|
-
@Mutation(returns => Boolean, { description: 'To delete multiple data samples' })
|
176
|
-
async deleteDataSamples(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
|
177
|
-
const { domain, tx } = context.state
|
178
|
-
|
179
|
-
await tx.getRepository(DataSample).delete({
|
180
|
-
domain,
|
181
|
-
id: In(ids)
|
182
|
-
})
|
183
|
-
|
184
|
-
return true
|
119
|
+
return result
|
185
120
|
}
|
186
121
|
}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
2
|
-
|
3
|
-
import { ScalarObject } from '@things-factory/shell'
|
2
|
+
import { ObjectRef, ScalarObject } from '@things-factory/shell'
|
4
3
|
|
5
4
|
import { DataSample } from './data-sample'
|
6
5
|
|
@@ -12,8 +11,8 @@ export class NewDataSample {
|
|
12
11
|
@Field({ nullable: true })
|
13
12
|
description?: string
|
14
13
|
|
15
|
-
@Field({ nullable: true })
|
16
|
-
|
14
|
+
@Field(type => ObjectRef, { nullable: true })
|
15
|
+
dataSet?: ObjectRef
|
17
16
|
|
18
17
|
@Field(type => ScalarObject, { nullable: true })
|
19
18
|
data?: ScalarObject
|
@@ -28,33 +27,6 @@ export class NewDataSample {
|
|
28
27
|
collectedAt?: Date
|
29
28
|
}
|
30
29
|
|
31
|
-
@InputType()
|
32
|
-
export class DataSamplePatch {
|
33
|
-
@Field(type => ID, { nullable: true })
|
34
|
-
id?: string
|
35
|
-
|
36
|
-
@Field({ nullable: true })
|
37
|
-
name?: string
|
38
|
-
|
39
|
-
@Field({ nullable: true })
|
40
|
-
description?: string
|
41
|
-
|
42
|
-
@Field({ nullable: true })
|
43
|
-
dataSetId?: string
|
44
|
-
|
45
|
-
@Field(type => ScalarObject, { nullable: true })
|
46
|
-
data?: ScalarObject
|
47
|
-
|
48
|
-
@Field({ nullable: true })
|
49
|
-
rawData?: string
|
50
|
-
|
51
|
-
@Field({ nullable: true })
|
52
|
-
source?: string
|
53
|
-
|
54
|
-
@Field()
|
55
|
-
cuFlag: string
|
56
|
-
}
|
57
|
-
|
58
30
|
@ObjectType()
|
59
31
|
export class DataSampleList {
|
60
32
|
@Field(type => [DataSample])
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { Field, ID, ObjectType } from 'type-graphql'
|
2
1
|
import {
|
3
2
|
Column,
|
4
3
|
CreateDateColumn,
|
@@ -9,17 +8,22 @@ import {
|
|
9
8
|
RelationId,
|
10
9
|
UpdateDateColumn
|
11
10
|
} from 'typeorm'
|
12
|
-
|
13
|
-
import { User } from '@things-factory/auth-base'
|
14
|
-
import { config } from '@things-factory/env'
|
15
11
|
import { Domain, ScalarObject } from '@things-factory/shell'
|
12
|
+
import { Field, ID, ObjectType } from 'type-graphql'
|
16
13
|
|
17
14
|
import { DataSet } from '../data-set/data-set'
|
15
|
+
import { User } from '@things-factory/auth-base'
|
16
|
+
import { config } from '@things-factory/env'
|
18
17
|
|
19
18
|
const ORMCONFIG = config.get('ormconfig', {})
|
20
19
|
const DATABASE_TYPE = ORMCONFIG.type
|
21
20
|
@Entity()
|
22
21
|
@Index('ix_data_sample_0', (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet], { unique: false })
|
22
|
+
@Index(
|
23
|
+
'ix_data_sample_2',
|
24
|
+
(dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.collectedAt],
|
25
|
+
{ unique: false }
|
26
|
+
)
|
23
27
|
@ObjectType({ description: 'Entity for DataSample' })
|
24
28
|
export class DataSample {
|
25
29
|
@PrimaryGeneratedColumn('uuid')
|
@@ -53,12 +57,11 @@ export class DataSample {
|
|
53
57
|
@Field(type => ScalarObject, { nullable: true })
|
54
58
|
partitionKeys?: ScalarObject
|
55
59
|
|
56
|
-
@ManyToOne(type => DataSet
|
57
|
-
@Field(type => DataSet, { nullable:
|
60
|
+
@ManyToOne(type => DataSet)
|
61
|
+
@Field(type => DataSet, { nullable: false })
|
58
62
|
dataSet?: DataSet
|
59
63
|
|
60
64
|
@RelationId((dataSample: DataSample) => dataSample.dataSet)
|
61
|
-
@Field({ nullable: true })
|
62
65
|
dataSetId?: string
|
63
66
|
|
64
67
|
@Column('simple-json', { nullable: true })
|
@@ -87,6 +90,18 @@ export class DataSample {
|
|
87
90
|
@Field({ nullable: true })
|
88
91
|
source?: string
|
89
92
|
|
93
|
+
@Column({
|
94
|
+
nullable: true
|
95
|
+
})
|
96
|
+
@Field({ nullable: true })
|
97
|
+
ooc?: boolean
|
98
|
+
|
99
|
+
@Column({
|
100
|
+
nullable: true
|
101
|
+
})
|
102
|
+
@Field({ nullable: true })
|
103
|
+
oos?: boolean
|
104
|
+
|
90
105
|
@Column({ nullable: true })
|
91
106
|
@Field({ nullable: true })
|
92
107
|
collectedAt?: Date
|
@@ -200,10 +200,7 @@ export class DataSetMutation {
|
|
200
200
|
|
201
201
|
return copiedDataSets.map(dataSet => {
|
202
202
|
dataSet.dataItems = copiedDataItems.filter(dataItem => dataItem.dataSet == dataSet.id)
|
203
|
-
return
|
204
|
-
...dataSet,
|
205
|
-
state: 'UNLOADED' // DataSetInstanceStatus.UNLOADED
|
206
|
-
}
|
203
|
+
return dataSet
|
207
204
|
})
|
208
205
|
}
|
209
206
|
}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
2
|
-
|
3
|
-
import { ScalarObject } from '@things-factory/shell'
|
2
|
+
import { ObjectRef, ScalarObject } from '@things-factory/shell'
|
4
3
|
|
5
4
|
import { DataSet } from './data-set'
|
6
5
|
|
@@ -12,11 +11,17 @@ export class NewDataSet {
|
|
12
11
|
@Field({ nullable: true })
|
13
12
|
description?: string
|
14
13
|
|
14
|
+
@Field(type => ObjectRef, { nullable: true })
|
15
|
+
supervisoryRole?: ObjectRef
|
16
|
+
|
15
17
|
@Field({ nullable: true })
|
16
18
|
active?: boolean
|
17
19
|
|
18
20
|
@Field({ nullable: true })
|
19
|
-
type?: string
|
21
|
+
type?: 'manual' | 'automatic' | string
|
22
|
+
|
23
|
+
@Field({ nullable: true })
|
24
|
+
useCase?: string
|
20
25
|
|
21
26
|
@Field(type => ScalarObject, { nullable: true })
|
22
27
|
partitionKeys?: ScalarObject
|
@@ -39,11 +44,17 @@ export class DataSetPatch {
|
|
39
44
|
@Field({ nullable: true })
|
40
45
|
description?: string
|
41
46
|
|
47
|
+
@Field(type => ObjectRef, { nullable: true })
|
48
|
+
supervisoryRole?: ObjectRef
|
49
|
+
|
42
50
|
@Field({ nullable: true })
|
43
51
|
active?: boolean
|
44
52
|
|
45
53
|
@Field({ nullable: true })
|
46
|
-
type?: string
|
54
|
+
type?: 'manual' | 'automatic' | string
|
55
|
+
|
56
|
+
@Field({ nullable: true })
|
57
|
+
useCase?: string
|
47
58
|
|
48
59
|
@Field(type => ScalarObject, { nullable: true })
|
49
60
|
partitionKeys?: ScalarObject
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { Field, ID, ObjectType } from 'type-graphql'
|
2
1
|
import {
|
3
2
|
Column,
|
4
3
|
CreateDateColumn,
|
@@ -10,12 +9,11 @@ import {
|
|
10
9
|
RelationId,
|
11
10
|
UpdateDateColumn
|
12
11
|
} from 'typeorm'
|
13
|
-
|
14
|
-
import { User } from '@things-factory/auth-base'
|
15
12
|
import { Domain, ScalarObject } from '@things-factory/shell'
|
13
|
+
import { Field, ID, ObjectType } from 'type-graphql'
|
14
|
+
import { Role, User } from '@things-factory/auth-base'
|
16
15
|
|
17
16
|
import { DataItem } from '../data-item/data-item'
|
18
|
-
import { DataSample } from '../data-sample/data-sample'
|
19
17
|
|
20
18
|
@Entity()
|
21
19
|
@Index('ix_data_set_0', (dataSet: DataSet) => [dataSet.domain, dataSet.name], { unique: true })
|
@@ -48,11 +46,26 @@ export class DataSet {
|
|
48
46
|
@Field({ nullable: true })
|
49
47
|
active?: boolean
|
50
48
|
|
49
|
+
@ManyToOne(type => Role, {
|
50
|
+
nullable: true
|
51
|
+
})
|
52
|
+
@Field({ nullable: true })
|
53
|
+
supervisoryRole?: Role
|
54
|
+
|
55
|
+
@RelationId((dataSet: DataSet) => dataSet.supervisoryRole)
|
56
|
+
supervisoryRoleId?: string
|
57
|
+
|
51
58
|
@Column({
|
52
59
|
nullable: true
|
53
60
|
})
|
54
61
|
@Field({ nullable: true })
|
55
|
-
type?: string
|
62
|
+
type?: 'manual' | 'automatic' | string
|
63
|
+
|
64
|
+
@Column({
|
65
|
+
nullable: true
|
66
|
+
})
|
67
|
+
@Field({ nullable: true })
|
68
|
+
useCase?: string
|
56
69
|
|
57
70
|
@Column('simple-json', { nullable: true })
|
58
71
|
@Field(type => ScalarObject, { nullable: true })
|
@@ -68,10 +81,6 @@ export class DataSet {
|
|
68
81
|
@Field(type => [DataItem], { nullable: true })
|
69
82
|
dataItems: DataItem[]
|
70
83
|
|
71
|
-
@OneToMany(type => DataSample, dataSample => dataSample.dataSet)
|
72
|
-
@Field(type => [DataSample], { nullable: true })
|
73
|
-
dataSamples: DataSample[]
|
74
|
-
|
75
84
|
@Column({
|
76
85
|
nullable: true
|
77
86
|
})
|
package/server/service/index.ts
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
+
import { entities as DataItemEntities, resolvers as DataItemResolvers } from './data-item'
|
1
2
|
/* IMPORT ENTITIES AND RESOLVERS */
|
2
|
-
import { entities as
|
3
|
+
import { entities as DataOocEntities, resolvers as DataOocResolvers } from './data-ooc'
|
3
4
|
import { entities as DataSampleEntities, resolvers as DataSampleResolvers } from './data-sample'
|
4
|
-
import { entities as
|
5
|
+
import { entities as DataSensorEntities, resolvers as DataSensorResolvers } from './data-sensor'
|
5
6
|
import { entities as DataSetEntities, resolvers as DataSetResolvers } from './data-set'
|
6
7
|
import { entities as DataSpecEntities, resolvers as DataSpecResolvers } from './data-spec'
|
7
8
|
|
8
9
|
/* EXPORT ENTITY TYPES */
|
10
|
+
export * from './data-ooc/data-ooc'
|
9
11
|
export * from './data-sensor/data-sensor'
|
10
12
|
export * from './data-sample/data-sample'
|
11
13
|
export * from './data-item/data-item'
|
@@ -14,6 +16,7 @@ export * from './data-spec/data-spec'
|
|
14
16
|
|
15
17
|
export const entities = [
|
16
18
|
/* ENTITIES */
|
19
|
+
...DataOocEntities,
|
17
20
|
...DataSensorEntities,
|
18
21
|
...DataSampleEntities,
|
19
22
|
...DataItemEntities,
|
@@ -24,6 +27,7 @@ export const entities = [
|
|
24
27
|
export const schema = {
|
25
28
|
resolverClasses: [
|
26
29
|
/* RESOLVER CLASSES */
|
30
|
+
...DataOocResolvers,
|
27
31
|
...DataSensorResolvers,
|
28
32
|
...DataSampleResolvers,
|
29
33
|
...DataItemResolvers,
|
package/things-factory.config.js
CHANGED
package/translations/en.json
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
{
|
2
2
|
"field.appliance": "appliance",
|
3
3
|
"field.collected_at": "collected at",
|
4
|
+
"field.corrective-action": "corrective action",
|
5
|
+
"field.corrector": "corrector",
|
6
|
+
"field.corrected-at": "corrected at",
|
4
7
|
"field.data": "data",
|
5
|
-
"field.
|
8
|
+
"field.data-sample": "data sample",
|
9
|
+
"field.data-set": "data set",
|
6
10
|
"field.device-id": "device id",
|
7
11
|
"field.netmask": "network mask",
|
12
|
+
"field.oos": "out of critical limit",
|
13
|
+
"field.ooc": "out of control limit",
|
8
14
|
"field.options": "options",
|
9
15
|
"field.partition-keys": "partition keys",
|
10
16
|
"field.quota": "sampling #",
|
@@ -12,8 +18,11 @@
|
|
12
18
|
"field.ref-by": "ref. by",
|
13
19
|
"field.serial-no": "serial #",
|
14
20
|
"field.spec": "spec",
|
21
|
+
"field.state": "state",
|
22
|
+
"field.supervisory-role": "supervisory role",
|
15
23
|
"field.tag": "tag name",
|
16
24
|
"field.unit": "unit",
|
25
|
+
"field.use-case": "use case",
|
17
26
|
"text.data sample created successfully": "a data sample created successfully",
|
18
27
|
"title.data-entry-form": "data entry form",
|
19
28
|
"title.data-item list": "data item list",
|