@things-factory/dataset 7.0.0-alpha.5 → 7.0.0-alpha.7
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/activities/activity-data-collect-view.ts +7 -0
- package/client/activities/activity-data-review-edit.ts +66 -4
- package/client/activities/activity-data-review-view.ts +78 -4
- package/client/activities/activity-ooc-resolve-view.ts +12 -0
- package/client/activities/activity-ooc-review-view.ts +12 -0
- package/client/pages/data-entry/data-entry-list-page.ts +8 -23
- package/client/pages/data-ooc/data-ooc-list-page.ts +63 -19
- package/client/pages/data-ooc/{data-ooc-view-page.ts → data-ooc-page.ts} +43 -1
- package/client/pages/data-ooc/data-ooc-view.ts +198 -41
- package/client/pages/data-ooc/data-oocs-page.ts +198 -0
- package/client/pages/data-sample/data-sample-list-page.ts +48 -26
- package/client/pages/data-sample/{data-sample-view-page.ts → data-sample-page.ts} +8 -1
- package/client/pages/data-sample/data-sample-search-page.ts +25 -20
- package/client/pages/data-sample/data-sample-view.ts +191 -21
- package/client/pages/data-sample/data-samples-page.ts +247 -0
- package/client/pages/data-sensor/data-sensor-list-page.ts +28 -6
- package/client/pages/data-set/data-item-list.ts +2 -2
- package/client/route.ts +10 -2
- package/dist-client/activities/activity-data-collect-view.js +7 -0
- package/dist-client/activities/activity-data-collect-view.js.map +1 -1
- package/dist-client/activities/activity-data-review-edit.d.ts +1 -1
- package/dist-client/activities/activity-data-review-edit.js +63 -5
- package/dist-client/activities/activity-data-review-edit.js.map +1 -1
- package/dist-client/activities/activity-data-review-view.d.ts +1 -1
- package/dist-client/activities/activity-data-review-view.js +75 -5
- package/dist-client/activities/activity-data-review-view.js.map +1 -1
- package/dist-client/activities/activity-ooc-resolve-view.js +12 -0
- package/dist-client/activities/activity-ooc-resolve-view.js.map +1 -1
- package/dist-client/activities/activity-ooc-review-view.js +12 -0
- package/dist-client/activities/activity-ooc-review-view.js.map +1 -1
- package/dist-client/pages/data-entry/data-entry-list-page.js +3 -15
- package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
- package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +6 -0
- package/dist-client/pages/data-ooc/data-ooc-list-page.js +55 -12
- package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +1 -1
- package/dist-client/pages/data-ooc/{data-ooc-view-page.js → data-ooc-page.js} +44 -2
- package/dist-client/pages/data-ooc/data-ooc-page.js.map +1 -0
- package/dist-client/pages/data-ooc/data-ooc-view.d.ts +11 -4
- package/dist-client/pages/data-ooc/data-ooc-view.js +193 -48
- package/dist-client/pages/data-ooc/data-ooc-view.js.map +1 -1
- package/dist-client/pages/data-ooc/data-oocs-page.d.ts +18 -0
- package/dist-client/pages/data-ooc/data-oocs-page.js +198 -0
- package/dist-client/pages/data-ooc/data-oocs-page.js.map +1 -0
- package/dist-client/pages/data-sample/data-sample-list-page.d.ts +6 -1
- package/dist-client/pages/data-sample/data-sample-list-page.js +42 -19
- package/dist-client/pages/data-sample/data-sample-list-page.js.map +1 -1
- package/dist-client/pages/data-sample/{data-sample-view-page.js → data-sample-page.js} +9 -2
- package/dist-client/pages/data-sample/data-sample-page.js.map +1 -0
- package/dist-client/pages/data-sample/data-sample-search-page.d.ts +6 -1
- package/dist-client/pages/data-sample/data-sample-search-page.js +19 -13
- package/dist-client/pages/data-sample/data-sample-search-page.js.map +1 -1
- package/dist-client/pages/data-sample/data-sample-view.d.ts +18 -0
- package/dist-client/pages/data-sample/data-sample-view.js +185 -19
- package/dist-client/pages/data-sample/data-sample-view.js.map +1 -1
- package/dist-client/pages/data-sample/data-samples-page.d.ts +21 -0
- package/dist-client/pages/data-sample/data-samples-page.js +247 -0
- package/dist-client/pages/data-sample/data-samples-page.js.map +1 -0
- package/dist-client/pages/data-sensor/data-sensor-list-page.js +28 -6
- package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +1 -1
- package/dist-client/pages/data-set/data-item-list.js +2 -2
- package/dist-client/pages/data-set/data-item-list.js.map +1 -1
- package/dist-client/route.js +8 -2
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/activities/activity-data-review.js.map +1 -1
- package/dist-server/activities/activity-ooc-review.js +2 -1
- package/dist-server/activities/activity-ooc-review.js.map +1 -1
- package/dist-server/controllers/create-data-sample.js +27 -29
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/engine/index.js +4 -0
- package/dist-server/engine/index.js.map +1 -0
- package/dist-server/engine/task/create-data-sample.js +80 -0
- package/dist-server/engine/task/create-data-sample.js.map +1 -0
- package/dist-server/engine/task/index.js +4 -0
- package/dist-server/engine/task/index.js.map +1 -0
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/routes.js +35 -27
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/data-ooc/data-ooc-query.js +32 -0
- package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -1
- package/dist-server/service/data-ooc/data-ooc.js +44 -37
- package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-query.js +24 -0
- package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
- package/dist-server/service/data-sample/data-sample.js +30 -31
- package/dist-server/service/data-sample/data-sample.js.map +1 -1
- package/dist-server/service/data-sensor/data-sensor-query.js +16 -1
- package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -1
- package/dist-server/service/data-sensor/data-sensor-type.js +8 -0
- package/dist-server/service/data-sensor/data-sensor-type.js.map +1 -1
- package/dist-server/service/data-sensor/data-sensor.js +15 -1
- package/dist-server/service/data-sensor/data-sensor.js.map +1 -1
- package/dist-server/service/data-set/data-item-type.js +1 -0
- package/dist-server/service/data-set/data-item-type.js.map +1 -1
- package/dist-server/service/data-set/data-set-query.js +2 -2
- package/dist-server/service/data-set/data-set-query.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/dataset/task/create-data-sample.ja.md +28 -0
- package/helps/dataset/task/create-data-sample.ko.md +28 -0
- package/helps/dataset/task/create-data-sample.md +28 -0
- package/helps/dataset/task/create-data-sample.ms.md +30 -0
- package/helps/dataset/task/create-data-sample.zh.md +28 -0
- package/package.json +14 -11
- package/server/activities/activity-data-review.ts +1 -5
- package/server/activities/activity-ooc-review.ts +5 -15
- package/server/controllers/create-data-sample.ts +31 -38
- package/server/engine/index.ts +1 -0
- package/server/engine/task/create-data-sample.ts +92 -0
- package/server/engine/task/index.ts +1 -0
- package/server/index.ts +1 -0
- package/server/routes.ts +47 -31
- package/server/service/data-ooc/data-ooc-query.ts +17 -0
- package/server/service/data-ooc/data-ooc.ts +39 -51
- package/server/service/data-sample/data-sample-query.ts +17 -17
- package/server/service/data-sample/data-sample.ts +29 -52
- package/server/service/data-sensor/data-sensor-query.ts +13 -1
- package/server/service/data-sensor/data-sensor-type.ts +6 -0
- package/server/service/data-sensor/data-sensor.ts +13 -11
- package/server/service/data-set/data-item-type.ts +1 -0
- package/server/service/data-set/data-set-query.ts +7 -7
- package/things-factory.config.js +10 -2
- package/translations/en.json +15 -2
- package/translations/ja.json +12 -1
- package/translations/ko.json +14 -1
- package/translations/ms.json +11 -0
- package/translations/zh.json +12 -1
- package/dist-client/pages/data-ooc/data-ooc-view-page.js.map +0 -1
- package/dist-client/pages/data-sample/data-sample-view-page.js.map +0 -1
- /package/dist-client/pages/data-ooc/{data-ooc-view-page.d.ts → data-ooc-page.d.ts} +0 -0
- /package/dist-client/pages/data-sample/{data-sample-view-page.d.ts → data-sample-page.d.ts} +0 -0
package/server/routes.ts
CHANGED
@@ -4,6 +4,7 @@ import { Domain, getDataSource } from '@things-factory/shell'
|
|
4
4
|
import { User } from '@things-factory/auth-base'
|
5
5
|
import { Activity } from '@things-factory/worklist'
|
6
6
|
import { issue } from '@things-factory/worklist/dist-server/controllers/activity-instance/issue'
|
7
|
+
import { runScenario } from '@things-factory/integration-base'
|
7
8
|
import { ScheduleRegisterRequest } from '@things-factory/scheduler-client'
|
8
9
|
|
9
10
|
import { createDataSample } from './controllers/create-data-sample'
|
@@ -23,8 +24,8 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
23
24
|
globalPublicRouter.post('/sensor-data', async (context, next) => {
|
24
25
|
// 데이타 검증
|
25
26
|
const { deviceId, data, rawData, timestamp = Date.now() } = context.request.body
|
26
|
-
if (!deviceId
|
27
|
-
throw new Error(`deviceId(${deviceId})
|
27
|
+
if (!deviceId) {
|
28
|
+
throw new Error(`The deviceId(${deviceId}) property are mandatory`)
|
28
29
|
}
|
29
30
|
|
30
31
|
// make new data-sample
|
@@ -32,7 +33,7 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
32
33
|
// find sensor through deviceId
|
33
34
|
const sensor = await tx.getRepository(DataSensor).findOne({
|
34
35
|
where: { deviceId },
|
35
|
-
relations: ['domain', 'appliance', 'dataSet']
|
36
|
+
relations: ['domain', 'appliance', 'dataSet', 'decoder']
|
36
37
|
})
|
37
38
|
|
38
39
|
if (!sensor) {
|
@@ -47,18 +48,18 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
47
48
|
throw new Error(`Appliance of the sensor given deviceId(${deviceId}) is not set up`)
|
48
49
|
}
|
49
50
|
|
50
|
-
if (!sensor.dataSet) {
|
51
|
-
|
52
|
-
}
|
51
|
+
// if (!sensor.dataSet) {
|
52
|
+
// throw new Error(`DataSet of the sensor given deviceId(${deviceId}) is not set up`)
|
53
|
+
// }
|
53
54
|
|
54
55
|
const domain = sensor.domain
|
55
56
|
const dataSet = sensor.dataSet
|
56
|
-
const user: User = await tx.getRepository(User).findOne({
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
})
|
57
|
+
// const user: User = await tx.getRepository(User).findOne({
|
58
|
+
// where: {
|
59
|
+
// reference: sensor.appliance.id,
|
60
|
+
// userType: 'appliance'
|
61
|
+
// }
|
62
|
+
// })
|
62
63
|
|
63
64
|
context.state = {
|
64
65
|
...context.state,
|
@@ -66,19 +67,40 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
66
67
|
tx
|
67
68
|
}
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
|
70
|
+
var decoded
|
71
|
+
if (sensor.decoder) {
|
72
|
+
const { name: scenarioName } = sensor.decoder
|
73
|
+
const variables = {
|
74
|
+
dataSensor: sensor,
|
75
|
+
source: deviceId,
|
72
76
|
data,
|
73
77
|
rawData,
|
74
|
-
|
75
|
-
|
76
|
-
},
|
77
|
-
context
|
78
|
-
)
|
79
|
-
})
|
78
|
+
timestamp
|
79
|
+
}
|
80
80
|
|
81
|
-
|
81
|
+
decoded = (await runScenario(null, scenarioName, variables, context))?.result
|
82
|
+
}
|
83
|
+
|
84
|
+
if (dataSet) {
|
85
|
+
await createDataSample(
|
86
|
+
{
|
87
|
+
dataSet,
|
88
|
+
data,
|
89
|
+
rawData,
|
90
|
+
source: deviceId,
|
91
|
+
collectedAt: new Date(timestamp),
|
92
|
+
...decoded
|
93
|
+
},
|
94
|
+
context
|
95
|
+
)
|
96
|
+
}
|
97
|
+
|
98
|
+
context.status = 200
|
99
|
+
context.body = {
|
100
|
+
data,
|
101
|
+
...decoded
|
102
|
+
}
|
103
|
+
})
|
82
104
|
})
|
83
105
|
|
84
106
|
/* When a callback occurs from the scheduler when a scheduled dataset is on schedule, data collection task for the dataset should be issued. */
|
@@ -102,9 +124,7 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
102
124
|
throw new Error(`domain(${domainId}) not found`)
|
103
125
|
}
|
104
126
|
|
105
|
-
const dataSet = await tx
|
106
|
-
.getRepository(DataSet)
|
107
|
-
.findOne({ where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId } })
|
127
|
+
const dataSet = await tx.getRepository(DataSet).findOne({ where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId } })
|
108
128
|
|
109
129
|
const activity = (await tx.getRepository(Activity).findOneBy({
|
110
130
|
domain: { id: domainId },
|
@@ -136,9 +156,7 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
136
156
|
|
137
157
|
await issue(activityInstance, context)
|
138
158
|
} else {
|
139
|
-
throw new Error(
|
140
|
-
`Assignees not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`
|
141
|
-
)
|
159
|
+
throw new Error(`Assignees not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`)
|
142
160
|
}
|
143
161
|
} else {
|
144
162
|
throw new Error(`Data Collect Activity is not installed.`)
|
@@ -169,9 +187,7 @@ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRout
|
|
169
187
|
throw new Error(`domain(${domainId}) not found`)
|
170
188
|
}
|
171
189
|
|
172
|
-
const dataSet = await tx
|
173
|
-
.getRepository(DataSet)
|
174
|
-
.findOne({ where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId } })
|
190
|
+
const dataSet = await tx.getRepository(DataSet).findOne({ where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId } })
|
175
191
|
|
176
192
|
// do what you gotta do
|
177
193
|
})
|
@@ -2,10 +2,12 @@ import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from
|
|
2
2
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
4
4
|
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
5
|
+
import { ActivityInstance } from '@things-factory/worklist'
|
5
6
|
|
6
7
|
import { DataSetHistory } from '../data-set-history/data-set-history'
|
7
8
|
import { DataItem } from '../data-set/data-item-type'
|
8
9
|
import { DataSet } from '../data-set/data-set'
|
10
|
+
import { DataSample } from '../data-sample/data-sample'
|
9
11
|
import { DataOoc } from './data-ooc'
|
10
12
|
import { DataOocList } from './data-ooc-type'
|
11
13
|
|
@@ -51,11 +53,26 @@ export class DataOocQuery {
|
|
51
53
|
return dataSetHistory?.dataItems || []
|
52
54
|
}
|
53
55
|
|
56
|
+
@FieldResolver(type => DataSample)
|
57
|
+
async dataSample(@Root() dataOoc: DataOoc): Promise<DataSample> {
|
58
|
+
return dataOoc.dataSampleId && (await getRepository(DataSample).findOneBy({ id: dataOoc.dataSampleId }))
|
59
|
+
}
|
60
|
+
|
54
61
|
@FieldResolver(type => DataSet)
|
55
62
|
async dataSet(@Root() dataOoc: DataOoc): Promise<DataSet> {
|
56
63
|
return dataOoc.dataSetId && (await getRepository(DataSet).findOneBy({ id: dataOoc.dataSetId }))
|
57
64
|
}
|
58
65
|
|
66
|
+
@FieldResolver(type => ActivityInstance)
|
67
|
+
async reviewActivityInstance(@Root() dataOoc: DataOoc): Promise<ActivityInstance> {
|
68
|
+
return dataOoc.reviewActivityInstanceId && (await getRepository(ActivityInstance).findOneBy({ id: dataOoc.reviewActivityInstanceId }))
|
69
|
+
}
|
70
|
+
|
71
|
+
@FieldResolver(type => ActivityInstance)
|
72
|
+
async resolveActivityInstance(@Root() dataOoc: DataOoc): Promise<ActivityInstance> {
|
73
|
+
return dataOoc.resolveActivityInstanceId && (await getRepository(ActivityInstance).findOneBy({ id: dataOoc.resolveActivityInstanceId }))
|
74
|
+
}
|
75
|
+
|
59
76
|
@FieldResolver(type => User)
|
60
77
|
async corrector(@Root() dataOoc: DataOoc): Promise<User> {
|
61
78
|
return dataOoc.correctorId && (await getRepository(User).findOneBy({ id: dataOoc.correctorId }))
|
@@ -1,21 +1,14 @@
|
|
1
1
|
import { Field, ID, ObjectType, registerEnumType } from 'type-graphql'
|
2
|
-
import {
|
3
|
-
Column,
|
4
|
-
CreateDateColumn,
|
5
|
-
Entity,
|
6
|
-
Index,
|
7
|
-
ManyToOne,
|
8
|
-
PrimaryGeneratedColumn,
|
9
|
-
RelationId,
|
10
|
-
UpdateDateColumn
|
11
|
-
} from 'typeorm'
|
2
|
+
import { Column, CreateDateColumn, Entity, Index, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, RelationId, UpdateDateColumn } from 'typeorm'
|
12
3
|
|
13
4
|
import { User } from '@things-factory/auth-base'
|
14
5
|
import { config } from '@things-factory/env'
|
15
6
|
import { Domain, ScalarObject } from '@things-factory/shell'
|
7
|
+
import { ActivityInstance } from '@things-factory/worklist'
|
16
8
|
|
17
9
|
import { DataItem } from '../data-set/data-item-type'
|
18
10
|
import { DataSet } from '../data-set/data-set'
|
11
|
+
import { DataSample } from '../data-sample/data-sample'
|
19
12
|
|
20
13
|
const ORMCONFIG = config.get('ormconfig', {})
|
21
14
|
const DATABASE_TYPE = ORMCONFIG.type
|
@@ -47,12 +40,10 @@ export class DataOoc {
|
|
47
40
|
domainId?: string
|
48
41
|
|
49
42
|
@Column()
|
50
|
-
@Field()
|
51
|
-
name
|
43
|
+
@Field({ nullable: true })
|
44
|
+
name?: string
|
52
45
|
|
53
|
-
@Column({
|
54
|
-
nullable: true
|
55
|
-
})
|
46
|
+
@Column({ nullable: true })
|
56
47
|
@Field({ nullable: true })
|
57
48
|
description?: string
|
58
49
|
|
@@ -67,57 +58,37 @@ export class DataOoc {
|
|
67
58
|
@Field({ nullable: true })
|
68
59
|
dataSetVersion?: number
|
69
60
|
|
70
|
-
@Column({
|
71
|
-
nullable: true
|
72
|
-
})
|
61
|
+
@Column({ nullable: true })
|
73
62
|
@Field({ nullable: true })
|
74
63
|
ooc?: boolean
|
75
64
|
|
76
|
-
@Column({
|
77
|
-
nullable: true
|
78
|
-
})
|
65
|
+
@Column({ nullable: true })
|
79
66
|
@Field({ nullable: true })
|
80
67
|
oos?: boolean
|
81
68
|
|
82
|
-
@Column({
|
83
|
-
nullable: true
|
84
|
-
})
|
69
|
+
@Column({ nullable: true })
|
85
70
|
@Field({ nullable: true })
|
86
71
|
state?: DataOocStatus
|
87
72
|
|
88
73
|
@Column({
|
89
74
|
nullable: true,
|
90
|
-
type:
|
91
|
-
DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
|
92
|
-
? 'longtext'
|
93
|
-
: DATABASE_TYPE == 'oracle'
|
94
|
-
? 'clob'
|
95
|
-
: 'varchar'
|
75
|
+
type: DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? 'longtext' : DATABASE_TYPE == 'oracle' ? 'clob' : 'varchar'
|
96
76
|
})
|
97
77
|
@Field({ nullable: true })
|
98
78
|
correctiveInstruction?: string
|
99
79
|
|
100
80
|
@Column({
|
101
81
|
nullable: true,
|
102
|
-
type:
|
103
|
-
DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
|
104
|
-
? 'longtext'
|
105
|
-
: DATABASE_TYPE == 'oracle'
|
106
|
-
? 'clob'
|
107
|
-
: 'varchar'
|
82
|
+
type: DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? 'longtext' : DATABASE_TYPE == 'oracle' ? 'clob' : 'varchar'
|
108
83
|
})
|
109
84
|
@Field({ nullable: true })
|
110
85
|
correctiveAction?: string
|
111
86
|
|
112
|
-
@Column({
|
113
|
-
nullable: true
|
114
|
-
})
|
87
|
+
@Column({ nullable: true })
|
115
88
|
@Field({ nullable: true })
|
116
89
|
type?: string
|
117
90
|
|
118
|
-
@Column({
|
119
|
-
nullable: true
|
120
|
-
})
|
91
|
+
@Column({ nullable: true })
|
121
92
|
@Field({ nullable: true })
|
122
93
|
useCase?: string
|
123
94
|
|
@@ -162,22 +133,39 @@ export class DataOoc {
|
|
162
133
|
|
163
134
|
@Column({
|
164
135
|
nullable: true,
|
165
|
-
type:
|
166
|
-
DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
|
167
|
-
? 'longtext'
|
168
|
-
: DATABASE_TYPE == 'oracle'
|
169
|
-
? 'clob'
|
170
|
-
: 'varchar'
|
136
|
+
type: DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? 'longtext' : DATABASE_TYPE == 'oracle' ? 'clob' : 'varchar'
|
171
137
|
})
|
172
138
|
@Field({ nullable: true })
|
173
139
|
rawData?: string
|
174
140
|
|
175
|
-
@Column({
|
176
|
-
nullable: true
|
177
|
-
})
|
141
|
+
@Column({ nullable: true })
|
178
142
|
@Field({ nullable: true })
|
179
143
|
source?: string
|
180
144
|
|
145
|
+
@OneToOne(type => DataSample, { nullable: true })
|
146
|
+
@JoinColumn()
|
147
|
+
@Field(type => DataSample, { nullable: true })
|
148
|
+
dataSample?: DataSample
|
149
|
+
|
150
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.dataSample)
|
151
|
+
dataSampleId?: string
|
152
|
+
|
153
|
+
@OneToOne(type => ActivityInstance, { nullable: true })
|
154
|
+
@JoinColumn()
|
155
|
+
@Field({ nullable: true })
|
156
|
+
reviewActivityInstance?: ActivityInstance
|
157
|
+
|
158
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.reviewActivityInstance)
|
159
|
+
reviewActivityInstanceId?: string
|
160
|
+
|
161
|
+
@OneToOne(type => ActivityInstance, { nullable: true })
|
162
|
+
@JoinColumn()
|
163
|
+
@Field({ nullable: true })
|
164
|
+
resolveActivityInstance?: ActivityInstance
|
165
|
+
|
166
|
+
@RelationId((dataOoc: DataOoc) => dataOoc.resolveActivityInstance)
|
167
|
+
resolveActivityInstanceId?: string
|
168
|
+
|
181
169
|
@Column({ nullable: true })
|
182
170
|
@Field({ nullable: true })
|
183
171
|
workDate?: string
|
@@ -2,18 +2,14 @@ import { In } from 'typeorm'
|
|
2
2
|
import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
3
3
|
|
4
4
|
import { User } from '@things-factory/auth-base'
|
5
|
-
import {
|
6
|
-
|
7
|
-
getQueryBuilderFromListParams,
|
8
|
-
getRepository,
|
9
|
-
getISOStringsForPeriod,
|
10
|
-
ListParam
|
11
|
-
} from '@things-factory/shell'
|
5
|
+
import { Domain, getQueryBuilderFromListParams, getRepository, getISOStringsForPeriod, ListParam } from '@things-factory/shell'
|
6
|
+
import { ActivityInstance } from '@things-factory/worklist'
|
12
7
|
|
13
8
|
import { DataKeySet } from '../data-key-set/data-key-set'
|
14
9
|
import { DataSetHistory } from '../data-set-history/data-set-history'
|
15
10
|
import { DataItem } from '../data-set/data-item-type'
|
16
11
|
import { DataSet } from '../data-set/data-set'
|
12
|
+
import { DataOoc } from '../data-ooc/data-ooc'
|
17
13
|
import { DataSample } from './data-sample'
|
18
14
|
import { DataSampleList } from './data-sample-type'
|
19
15
|
|
@@ -48,11 +44,7 @@ export class DataSampleQuery {
|
|
48
44
|
|
49
45
|
@Directive('@privilege(category: "data-sample", privilege: "query", domainOwnerGranted: true)')
|
50
46
|
@Query(returns => DataSampleList, { description: 'To fetch multiple data samples by data set' })
|
51
|
-
async dataSamplesByDataSet(
|
52
|
-
@Arg('dataSetId') dataSetId: string,
|
53
|
-
@Args() params: ListParam,
|
54
|
-
@Ctx() context: ResolverContext
|
55
|
-
): Promise<DataSampleList> {
|
47
|
+
async dataSamplesByDataSet(@Arg('dataSetId') dataSetId: string, @Args() params: ListParam, @Ctx() context: ResolverContext): Promise<DataSampleList> {
|
56
48
|
const { domain } = context.state
|
57
49
|
|
58
50
|
const dataSet = await getRepository(DataSet).findOne({
|
@@ -84,11 +76,7 @@ export class DataSampleQuery {
|
|
84
76
|
|
85
77
|
@Directive('@privilege(category: "data-sample", privilege: "query", domainOwnerGranted: true)')
|
86
78
|
@Query(returns => DataSampleList, { description: 'To fetch multiple data samples by data key set' })
|
87
|
-
async dataSamplesByDataKeySet(
|
88
|
-
@Arg('dataKeySetId') dataKeySetId: string,
|
89
|
-
@Args() params: ListParam,
|
90
|
-
@Ctx() context: ResolverContext
|
91
|
-
): Promise<DataSampleList> {
|
79
|
+
async dataSamplesByDataKeySet(@Arg('dataKeySetId') dataKeySetId: string, @Args() params: ListParam, @Ctx() context: ResolverContext): Promise<DataSampleList> {
|
92
80
|
const { domain } = context.state
|
93
81
|
|
94
82
|
const dataKeySet = await getRepository(DataKeySet).findOneBy({ id: dataKeySetId })
|
@@ -178,6 +166,18 @@ export class DataSampleQuery {
|
|
178
166
|
return dataSample.dataSetId && (await getRepository(DataSet).findOneBy({ id: dataSample.dataSetId }))
|
179
167
|
}
|
180
168
|
|
169
|
+
@FieldResolver(type => DataOoc)
|
170
|
+
async dataOoc(@Root() dataSample: DataSample): Promise<DataOoc> {
|
171
|
+
if (dataSample.ooc || dataSample.oos) {
|
172
|
+
return await getRepository(DataOoc).findOneBy({ dataSample: { id: dataSample.id } })
|
173
|
+
}
|
174
|
+
}
|
175
|
+
|
176
|
+
@FieldResolver(type => ActivityInstance)
|
177
|
+
async reviewActivityInstance(@Root() dataSample: DataSample): Promise<ActivityInstance> {
|
178
|
+
return dataSample.reviewActivityInstanceId && (await getRepository(ActivityInstance).findOneBy({ id: dataSample.reviewActivityInstanceId }))
|
179
|
+
}
|
180
|
+
|
181
181
|
@FieldResolver(type => Domain)
|
182
182
|
async domain(@Root() dataSample: DataSample): Promise<Domain> {
|
183
183
|
return dataSample.domainId && (await getRepository(Domain).findOneBy({ id: dataSample.domainId }))
|
@@ -1,41 +1,22 @@
|
|
1
1
|
import { Field, ID, ObjectType } from 'type-graphql'
|
2
|
-
import {
|
3
|
-
Column,
|
4
|
-
CreateDateColumn,
|
5
|
-
Entity,
|
6
|
-
Index,
|
7
|
-
ManyToOne,
|
8
|
-
PrimaryGeneratedColumn,
|
9
|
-
RelationId,
|
10
|
-
UpdateDateColumn
|
11
|
-
} from 'typeorm'
|
2
|
+
import { Column, CreateDateColumn, Entity, Index, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, RelationId, UpdateDateColumn } from 'typeorm'
|
12
3
|
|
13
4
|
import { User } from '@things-factory/auth-base'
|
14
5
|
import { config } from '@things-factory/env'
|
15
|
-
import { Domain, ScalarObject } from '@things-factory/shell'
|
6
|
+
import { Domain, ScalarObject, json5Transformer } from '@things-factory/shell'
|
7
|
+
import { ActivityInstance } from '@things-factory/worklist'
|
16
8
|
|
17
9
|
import { DataItem } from '../data-set/data-item-type'
|
18
10
|
import { DataSet } from '../data-set/data-set'
|
11
|
+
import { DataOoc } from '../data-ooc/data-ooc'
|
19
12
|
|
20
13
|
const ORMCONFIG = config.get('ormconfig', {})
|
21
14
|
const DATABASE_TYPE = ORMCONFIG.type
|
22
15
|
@Entity()
|
23
|
-
@Index(
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
dataSample.dataSet,
|
28
|
-
dataSample.workDate,
|
29
|
-
dataSample.workShift,
|
30
|
-
dataSample.collectedAt
|
31
|
-
],
|
32
|
-
{ unique: false }
|
33
|
-
)
|
34
|
-
@Index(
|
35
|
-
'ix_data_sample_1',
|
36
|
-
(dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.collectedAt],
|
37
|
-
{ unique: false }
|
38
|
-
)
|
16
|
+
@Index('ix_data_sample_0', (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.workDate, dataSample.workShift, dataSample.collectedAt], {
|
17
|
+
unique: false
|
18
|
+
})
|
19
|
+
@Index('ix_data_sample_1', (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.collectedAt], { unique: false })
|
39
20
|
@ObjectType({ description: 'Entity for DataSample' })
|
40
21
|
export class DataSample {
|
41
22
|
@PrimaryGeneratedColumn('uuid')
|
@@ -50,24 +31,18 @@ export class DataSample {
|
|
50
31
|
domainId?: string
|
51
32
|
|
52
33
|
@Column()
|
53
|
-
@Field()
|
34
|
+
@Field({ nullable: true })
|
54
35
|
name: string
|
55
36
|
|
56
|
-
@Column({
|
57
|
-
nullable: true
|
58
|
-
})
|
37
|
+
@Column({ nullable: true })
|
59
38
|
@Field({ nullable: true })
|
60
39
|
description?: string
|
61
40
|
|
62
|
-
@Column({
|
63
|
-
nullable: true
|
64
|
-
})
|
41
|
+
@Column({ nullable: true })
|
65
42
|
@Field({ nullable: true })
|
66
43
|
type?: string
|
67
44
|
|
68
|
-
@Column({
|
69
|
-
nullable: true
|
70
|
-
})
|
45
|
+
@Column({ nullable: true })
|
71
46
|
@Field({ nullable: true })
|
72
47
|
useCase?: string
|
73
48
|
|
@@ -99,31 +74,21 @@ export class DataSample {
|
|
99
74
|
|
100
75
|
@Column({
|
101
76
|
nullable: true,
|
102
|
-
type:
|
103
|
-
|
104
|
-
? 'longtext'
|
105
|
-
: DATABASE_TYPE == 'oracle'
|
106
|
-
? 'clob'
|
107
|
-
: 'varchar'
|
77
|
+
type: DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? 'longtext' : DATABASE_TYPE == 'oracle' ? 'clob' : 'varchar',
|
78
|
+
transformer: json5Transformer
|
108
79
|
})
|
109
80
|
@Field({ nullable: true })
|
110
81
|
rawData?: string
|
111
82
|
|
112
|
-
@Column({
|
113
|
-
nullable: true
|
114
|
-
})
|
83
|
+
@Column({ nullable: true })
|
115
84
|
@Field({ nullable: true })
|
116
85
|
source?: string
|
117
86
|
|
118
|
-
@Column({
|
119
|
-
nullable: true
|
120
|
-
})
|
87
|
+
@Column({ nullable: true })
|
121
88
|
@Field({ nullable: true })
|
122
89
|
ooc?: boolean
|
123
90
|
|
124
|
-
@Column({
|
125
|
-
nullable: true
|
126
|
-
})
|
91
|
+
@Column({ nullable: true })
|
127
92
|
@Field({ nullable: true })
|
128
93
|
oos?: boolean
|
129
94
|
|
@@ -155,6 +120,18 @@ export class DataSample {
|
|
155
120
|
@Field({ nullable: true })
|
156
121
|
workShift?: string
|
157
122
|
|
123
|
+
@OneToOne(type => ActivityInstance, { nullable: true })
|
124
|
+
@JoinColumn()
|
125
|
+
@Field({ nullable: true })
|
126
|
+
reviewActivityInstance?: ActivityInstance
|
127
|
+
|
128
|
+
@RelationId((dataSample: DataSample) => dataSample.reviewActivityInstance)
|
129
|
+
reviewActivityInstanceId?: string
|
130
|
+
|
131
|
+
@OneToOne(type => DataOoc, dataOoc => dataOoc.dataSample, { nullable: true })
|
132
|
+
@Field(type => DataOoc, { nullable: true })
|
133
|
+
dataOoc?: DataOoc
|
134
|
+
|
158
135
|
@Column({ nullable: true })
|
159
136
|
@Field({ nullable: true })
|
160
137
|
collectedAt?: Date
|
@@ -2,6 +2,7 @@ import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graph
|
|
2
2
|
|
3
3
|
import { Appliance, User } from '@things-factory/auth-base'
|
4
4
|
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
5
|
+
import { Scenario } from '@things-factory/integration-base'
|
5
6
|
|
6
7
|
import { DataSet } from '../data-set/data-set'
|
7
8
|
import { DataSensor } from './data-sensor'
|
@@ -39,11 +40,22 @@ export class DataSensorQuery {
|
|
39
40
|
return dataSensor.applianceId && (await getRepository(Appliance).findOneBy({ id: dataSensor.applianceId }))
|
40
41
|
}
|
41
42
|
|
42
|
-
@FieldResolver(type =>
|
43
|
+
@FieldResolver(type => DataSet)
|
43
44
|
async dataSet(@Root() dataSensor: DataSensor): Promise<DataSet> {
|
44
45
|
return dataSensor.dataSetId && (await getRepository(DataSet).findOneBy({ id: dataSensor.dataSetId }))
|
45
46
|
}
|
46
47
|
|
48
|
+
@FieldResolver(type => Scenario)
|
49
|
+
async decoder(@Root() dataSensor: DataSensor): Promise<Scenario> {
|
50
|
+
return (
|
51
|
+
dataSensor.decoder ||
|
52
|
+
(dataSensor.decoderId &&
|
53
|
+
(await getRepository(Scenario).findOneBy({
|
54
|
+
id: dataSensor.decoderId
|
55
|
+
})))
|
56
|
+
)
|
57
|
+
}
|
58
|
+
|
47
59
|
@FieldResolver(type => Domain)
|
48
60
|
async domain(@Root() dataSensor: DataSensor): Promise<Domain> {
|
49
61
|
return dataSensor.domainId && (await getRepository(Domain).findOneBy({ id: dataSensor.domainId }))
|
@@ -41,6 +41,9 @@ export class NewDataSensor {
|
|
41
41
|
|
42
42
|
@Field(type => ObjectRef, { nullable: true })
|
43
43
|
dataSet?: ObjectRef
|
44
|
+
|
45
|
+
@Field(type => ObjectRef, { nullable: true })
|
46
|
+
decoder?: ObjectRef
|
44
47
|
}
|
45
48
|
|
46
49
|
@InputType()
|
@@ -84,6 +87,9 @@ export class DataSensorPatch {
|
|
84
87
|
@Field(type => ObjectRef, { nullable: true })
|
85
88
|
dataSet?: ObjectRef
|
86
89
|
|
90
|
+
@Field(type => ObjectRef, { nullable: true })
|
91
|
+
decoder?: ObjectRef
|
92
|
+
|
87
93
|
@Field()
|
88
94
|
cuFlag: string
|
89
95
|
}
|
@@ -1,17 +1,9 @@
|
|
1
1
|
import { Field, ID, ObjectType } from 'type-graphql'
|
2
|
-
import {
|
3
|
-
Column,
|
4
|
-
CreateDateColumn,
|
5
|
-
Entity,
|
6
|
-
Index,
|
7
|
-
ManyToOne,
|
8
|
-
PrimaryGeneratedColumn,
|
9
|
-
RelationId,
|
10
|
-
UpdateDateColumn
|
11
|
-
} from 'typeorm'
|
2
|
+
import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId, UpdateDateColumn } from 'typeorm'
|
12
3
|
|
13
|
-
import { Appliance, User } from '@things-factory/auth-base'
|
14
4
|
import { Domain } from '@things-factory/shell'
|
5
|
+
import { Appliance, User } from '@things-factory/auth-base'
|
6
|
+
import { Scenario } from '@things-factory/integration-base'
|
15
7
|
|
16
8
|
import { DataSet } from '../data-set/data-set'
|
17
9
|
|
@@ -91,6 +83,16 @@ export class DataSensor {
|
|
91
83
|
@RelationId((dataSensor: DataSensor) => dataSensor.dataSet)
|
92
84
|
dataSetId?: string
|
93
85
|
|
86
|
+
@ManyToOne(type => Scenario, { nullable: true })
|
87
|
+
@Field(type => Scenario, {
|
88
|
+
nullable: true,
|
89
|
+
description: 'The decoder scenario that automatically executes based on the trigger of raw data collection'
|
90
|
+
})
|
91
|
+
decoder?: Scenario
|
92
|
+
|
93
|
+
@RelationId((dataSensor: DataSensor) => dataSensor.decoder)
|
94
|
+
decoderId?: string
|
95
|
+
|
94
96
|
@CreateDateColumn()
|
95
97
|
@Field({ nullable: true })
|
96
98
|
createdAt?: Date
|
@@ -243,21 +243,21 @@ export class DataSetQuery {
|
|
243
243
|
}
|
244
244
|
|
245
245
|
@FieldResolver(type => Board, { nullable: true })
|
246
|
-
async entryBoard(@Root() dataSet: DataSet) {
|
246
|
+
async entryBoard(@Root() dataSet: DataSet): Promise<Board> {
|
247
247
|
if (dataSet.entryType == 'board' && dataSet.entryView) {
|
248
248
|
return await getRepository(Board).findOneBy({ id: dataSet.entryView })
|
249
249
|
}
|
250
250
|
}
|
251
251
|
|
252
252
|
@FieldResolver(type => Board, { nullable: true })
|
253
|
-
async monitorBoard(@Root() dataSet: DataSet) {
|
253
|
+
async monitorBoard(@Root() dataSet: DataSet): Promise<Board> {
|
254
254
|
if (dataSet.monitorType == 'board' && dataSet.monitorView) {
|
255
255
|
return await getRepository(Board).findOneBy({ id: dataSet.monitorView })
|
256
256
|
}
|
257
257
|
}
|
258
258
|
|
259
259
|
@FieldResolver(type => DataKeySet, { nullable: true })
|
260
|
-
async dataKeySet(@Root() dataSet: DataSet) {
|
260
|
+
async dataKeySet(@Root() dataSet: DataSet): Promise<DataKeySet> {
|
261
261
|
return (
|
262
262
|
dataSet.dataKeySet ||
|
263
263
|
(dataSet.dataKeySetId &&
|
@@ -267,8 +267,8 @@ export class DataSetQuery {
|
|
267
267
|
)
|
268
268
|
}
|
269
269
|
|
270
|
-
@FieldResolver(type =>
|
271
|
-
async normalScenario(@Root() dataSet: DataSet): Promise<
|
270
|
+
@FieldResolver(type => Scenario)
|
271
|
+
async normalScenario(@Root() dataSet: DataSet): Promise<Scenario> {
|
272
272
|
return (
|
273
273
|
dataSet.normalScenario ||
|
274
274
|
(dataSet.normalScenarioId &&
|
@@ -278,8 +278,8 @@ export class DataSetQuery {
|
|
278
278
|
)
|
279
279
|
}
|
280
280
|
|
281
|
-
@FieldResolver(type =>
|
282
|
-
async outlierScenario(@Root() dataSet: DataSet): Promise<
|
281
|
+
@FieldResolver(type => Scenario)
|
282
|
+
async outlierScenario(@Root() dataSet: DataSet): Promise<Scenario> {
|
283
283
|
return (
|
284
284
|
dataSet.outlierScenario ||
|
285
285
|
(dataSet.outlierScenarioId &&
|