@things-factory/dataset 5.0.0-alpha.3 → 5.0.0-alpha.4
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 +74 -0
- package/client/pages/data-item-list.js +38 -9
- package/client/pages/data-sample.js +24 -5
- package/client/pages/data-sensor.js +1 -1
- package/client/pages/data-set.js +35 -5
- 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 -2
- package/dist-server/service/data-item/data-item-type.js.map +1 -1
- package/dist-server/service/data-item/data-item.js +10 -4
- package/dist-server/service/data-item/data-item.js.map +1 -1
- package/dist-server/service/data-sample/data-sample-mutation.js +40 -6
- package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
- package/dist-server/service/data-spec/data-spec-manager.js +20 -0
- package/dist-server/service/data-spec/data-spec-manager.js.map +1 -0
- package/dist-server/service/data-spec/data-spec-query.js +48 -0
- package/dist-server/service/data-spec/data-spec-query.js.map +1 -0
- package/dist-server/service/data-spec/data-spec.js +78 -0
- package/dist-server/service/data-spec/data-spec.js.map +1 -0
- package/dist-server/service/data-spec/index.js +8 -0
- package/dist-server/service/data-spec/index.js.map +1 -0
- package/dist-server/service/index.js +6 -2
- package/dist-server/service/index.js.map +1 -1
- package/package.json +13 -12
- package/server/index.ts +2 -0
- package/server/service/data-item/data-item-type.ts +3 -0
- package/server/service/data-item/data-item.ts +6 -1
- package/server/service/data-sample/data-sample-mutation.ts +53 -6
- package/server/service/data-spec/data-spec-manager.ts +21 -0
- package/server/service/data-spec/data-spec-query.ts +21 -0
- package/server/service/data-spec/data-spec.ts +44 -0
- package/server/service/data-spec/index.ts +5 -0
- package/server/service/index.ts +10 -6
- package/translations/en.json +5 -3
- package/translations/ko.json +6 -4
- package/translations/ms.json +5 -3
- package/translations/zh.json +5 -3
@@ -0,0 +1,74 @@
|
|
1
|
+
import gql from 'graphql-tag'
|
2
|
+
import { css, html, LitElement } from 'lit'
|
3
|
+
|
4
|
+
import { client } from '@operato/graphql'
|
5
|
+
import { i18next, localize } from '@operato/i18n'
|
6
|
+
import '@operato/dataset/ox-data-entry-form.js'
|
7
|
+
|
8
|
+
class DataEntryForm extends localize(i18next)(LitElement) {
|
9
|
+
static get properties() {
|
10
|
+
return {
|
11
|
+
dataSet: Object
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
static get styles() {
|
16
|
+
return [
|
17
|
+
css`
|
18
|
+
:host {
|
19
|
+
display: flex;
|
20
|
+
flex-direction: column;
|
21
|
+
|
22
|
+
background-color: #fff;
|
23
|
+
}
|
24
|
+
|
25
|
+
ox-data-entry-form {
|
26
|
+
flex: 1;
|
27
|
+
}
|
28
|
+
|
29
|
+
.button-container {
|
30
|
+
display: flex;
|
31
|
+
margin-left: auto;
|
32
|
+
padding: var(--padding-default);
|
33
|
+
}
|
34
|
+
`
|
35
|
+
]
|
36
|
+
}
|
37
|
+
|
38
|
+
get entryForm() {
|
39
|
+
return this.renderRoot.querySelector('ox-data-entry-form')
|
40
|
+
}
|
41
|
+
|
42
|
+
render() {
|
43
|
+
return html`
|
44
|
+
<ox-data-entry-form .dataSet=${this.dataSet}></ox-data-entry-form>
|
45
|
+
<div class="button-container">
|
46
|
+
<mwc-button raised @click=${this._updateDataItems.bind(this)}>${i18next.t('button.save')}</mwc-button>
|
47
|
+
</div>
|
48
|
+
`
|
49
|
+
}
|
50
|
+
|
51
|
+
async _updateDataItems() {
|
52
|
+
const data = this.entryForm.buildValue()
|
53
|
+
const dataSample = {
|
54
|
+
dataSetId: this.dataSet.id,
|
55
|
+
data
|
56
|
+
}
|
57
|
+
|
58
|
+
const response = await client.mutate({
|
59
|
+
mutation: gql`
|
60
|
+
mutation ($dataSample: NewDataSample!) {
|
61
|
+
createDataSample(dataSample: $dataSample) {
|
62
|
+
id
|
63
|
+
collectedAt
|
64
|
+
}
|
65
|
+
}
|
66
|
+
`,
|
67
|
+
variables: {
|
68
|
+
dataSample
|
69
|
+
}
|
70
|
+
})
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
window.customElements.define('data-entry-form', DataEntryForm)
|
@@ -33,9 +33,6 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
33
33
|
padding: var(--padding-default);
|
34
34
|
}
|
35
35
|
|
36
|
-
form {
|
37
|
-
position: relative;
|
38
|
-
}
|
39
36
|
[danger] {
|
40
37
|
--mdc-theme-primary: var(--mdc-danger-button-primary-color);
|
41
38
|
}
|
@@ -46,7 +43,7 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
46
43
|
]
|
47
44
|
}
|
48
45
|
|
49
|
-
get
|
46
|
+
get grist() {
|
50
47
|
return this.renderRoot.querySelector('ox-grist')
|
51
48
|
}
|
52
49
|
|
@@ -149,11 +146,41 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
149
146
|
name: 'type',
|
150
147
|
header: i18next.t('field.type'),
|
151
148
|
record: {
|
152
|
-
options: ['number', 'text', 'select', 'boolean'],
|
149
|
+
options: ['', 'number', 'text', 'select', 'boolean', 'file'],
|
153
150
|
editable: true
|
154
151
|
},
|
155
152
|
width: 120
|
156
153
|
},
|
154
|
+
{
|
155
|
+
type: 'parameters',
|
156
|
+
name: 'options',
|
157
|
+
header: i18next.t('field.options'),
|
158
|
+
record: {
|
159
|
+
editable: true,
|
160
|
+
renderer: (value, column, record, rowIndex, field) => {
|
161
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
162
|
+
},
|
163
|
+
options: async (value, column, record, row, field) => {
|
164
|
+
return {
|
165
|
+
name: record.type,
|
166
|
+
help: '',
|
167
|
+
spec:
|
168
|
+
record.type === 'select'
|
169
|
+
? [
|
170
|
+
{
|
171
|
+
type: 'options',
|
172
|
+
name: 'options',
|
173
|
+
label: 'options'
|
174
|
+
}
|
175
|
+
]
|
176
|
+
: [],
|
177
|
+
context: this.grist,
|
178
|
+
objectified: true
|
179
|
+
}
|
180
|
+
}
|
181
|
+
},
|
182
|
+
width: 120
|
183
|
+
},
|
157
184
|
{
|
158
185
|
type: 'number',
|
159
186
|
name: 'quota',
|
@@ -207,7 +234,9 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
207
234
|
description
|
208
235
|
sequence
|
209
236
|
active
|
237
|
+
tag
|
210
238
|
type
|
239
|
+
options
|
211
240
|
quota
|
212
241
|
spec
|
213
242
|
}
|
@@ -224,7 +253,7 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
224
253
|
}
|
225
254
|
|
226
255
|
async _updateDataItems() {
|
227
|
-
let patches = this.
|
256
|
+
let patches = this.grist._data.records
|
228
257
|
if (patches && patches.length) {
|
229
258
|
patches = patches.map(patch => {
|
230
259
|
var patchField = {}
|
@@ -250,14 +279,14 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
250
279
|
}
|
251
280
|
})
|
252
281
|
|
253
|
-
if (!response.errors) this.
|
282
|
+
if (!response.errors) this.grist.fetch()
|
254
283
|
}
|
255
284
|
}
|
256
285
|
|
257
286
|
async _deleteDataItems() {
|
258
287
|
if (!confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) return
|
259
288
|
|
260
|
-
const ids = this.
|
289
|
+
const ids = this.grist.selected.map(record => record.id)
|
261
290
|
if (!(ids && ids.length > 0)) return
|
262
291
|
|
263
292
|
const response = await client.mutate({
|
@@ -273,7 +302,7 @@ class DataItemList extends localize(i18next)(LitElement) {
|
|
273
302
|
|
274
303
|
if (response.errors) return
|
275
304
|
|
276
|
-
this.
|
305
|
+
this.grist.fetch()
|
277
306
|
await document.dispatchEvent(
|
278
307
|
new CustomEvent('notify', {
|
279
308
|
detail: {
|
@@ -121,7 +121,7 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
121
121
|
},
|
122
122
|
filter: 'search',
|
123
123
|
sortable: true,
|
124
|
-
width:
|
124
|
+
width: 120
|
125
125
|
},
|
126
126
|
{
|
127
127
|
type: 'string',
|
@@ -132,24 +132,39 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
132
132
|
editable: true
|
133
133
|
},
|
134
134
|
filter: 'search',
|
135
|
-
width:
|
135
|
+
width: 150
|
136
136
|
},
|
137
137
|
{
|
138
138
|
type: 'object',
|
139
139
|
name: 'dataSet',
|
140
|
-
header: i18next.t('field.
|
140
|
+
header: i18next.t('field.dataSet'),
|
141
141
|
record: {
|
142
142
|
editable: false
|
143
143
|
},
|
144
144
|
sortable: true,
|
145
145
|
width: 120
|
146
146
|
},
|
147
|
+
{
|
148
|
+
type: 'json',
|
149
|
+
name: 'partitionKeys',
|
150
|
+
header: i18next.t('field.partitionKeys'),
|
151
|
+
record: {
|
152
|
+
editable: false,
|
153
|
+
renderer: (value, column, record, rowIndex, field) => {
|
154
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
155
|
+
}
|
156
|
+
},
|
157
|
+
width: 200
|
158
|
+
},
|
147
159
|
{
|
148
160
|
type: 'json',
|
149
161
|
name: 'data',
|
150
162
|
header: i18next.t('field.data'),
|
151
163
|
record: {
|
152
|
-
editable: false
|
164
|
+
editable: false,
|
165
|
+
renderer: (value, column, record, rowIndex, field) => {
|
166
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
167
|
+
}
|
153
168
|
},
|
154
169
|
width: 200
|
155
170
|
},
|
@@ -158,7 +173,10 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
158
173
|
name: 'spec',
|
159
174
|
header: i18next.t('field.spec'),
|
160
175
|
record: {
|
161
|
-
editable: false
|
176
|
+
editable: false,
|
177
|
+
renderer: (value, column, record, rowIndex, field) => {
|
178
|
+
return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
|
179
|
+
}
|
162
180
|
},
|
163
181
|
width: 200
|
164
182
|
},
|
@@ -235,6 +253,7 @@ export class DataSample extends connect(store)(localize(i18next)(PageView)) {
|
|
235
253
|
name
|
236
254
|
description
|
237
255
|
}
|
256
|
+
partitionKeys
|
238
257
|
data
|
239
258
|
spec
|
240
259
|
updater {
|
@@ -194,7 +194,7 @@ export class DataSensor extends connect(store)(localize(i18next)(PageView)) {
|
|
194
194
|
{
|
195
195
|
type: 'object',
|
196
196
|
name: 'dataSet',
|
197
|
-
header: i18next.t('field.
|
197
|
+
header: i18next.t('field.dataSet'),
|
198
198
|
record: {
|
199
199
|
editable: true,
|
200
200
|
options: {
|
package/client/pages/data-set.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import '@operato/data-grist'
|
2
2
|
import './data-item-list'
|
3
3
|
import './data-set-importer'
|
4
|
+
import './data-entry-form'
|
4
5
|
|
5
6
|
import gql from 'graphql-tag'
|
6
7
|
import { css, html } from 'lit'
|
@@ -147,6 +148,23 @@ export class DataSet extends connect(store)(localize(i18next)(PageView)) {
|
|
147
148
|
}
|
148
149
|
}
|
149
150
|
},
|
151
|
+
{
|
152
|
+
type: 'gutter',
|
153
|
+
gutterName: 'button',
|
154
|
+
icon: 'fact_check',
|
155
|
+
handlers: {
|
156
|
+
click: (columns, data, column, record, rowIndex) => {
|
157
|
+
openPopup(
|
158
|
+
html` <data-entry-form .dataSet=${record} style="background-color: white;"></data-entry-form> `,
|
159
|
+
{
|
160
|
+
backdrop: true,
|
161
|
+
size: 'large',
|
162
|
+
title: i18next.t('title.data-entry-form')
|
163
|
+
}
|
164
|
+
)
|
165
|
+
}
|
166
|
+
}
|
167
|
+
},
|
150
168
|
{
|
151
169
|
type: 'string',
|
152
170
|
name: 'name',
|
@@ -184,7 +202,7 @@ export class DataSet extends connect(store)(localize(i18next)(PageView)) {
|
|
184
202
|
{
|
185
203
|
type: 'json',
|
186
204
|
name: 'partitionKeys',
|
187
|
-
header: i18next.t('field.
|
205
|
+
header: i18next.t('field.partitionKeys'),
|
188
206
|
record: {
|
189
207
|
editable: true
|
190
208
|
},
|
@@ -283,7 +301,9 @@ export class DataSet extends connect(store)(localize(i18next)(PageView)) {
|
|
283
301
|
description
|
284
302
|
sequence
|
285
303
|
active
|
304
|
+
tag
|
286
305
|
type
|
306
|
+
options
|
287
307
|
quota
|
288
308
|
spec
|
289
309
|
}
|
@@ -392,7 +412,17 @@ export class DataSet extends connect(store)(localize(i18next)(PageView)) {
|
|
392
412
|
|
393
413
|
async exportHandler() {
|
394
414
|
const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
|
395
|
-
const targetFieldSet = new Set([
|
415
|
+
const targetFieldSet = new Set([
|
416
|
+
'id',
|
417
|
+
'name',
|
418
|
+
'type',
|
419
|
+
'description',
|
420
|
+
'tag',
|
421
|
+
'schedule',
|
422
|
+
'timezone',
|
423
|
+
'active',
|
424
|
+
'dataItems'
|
425
|
+
])
|
396
426
|
|
397
427
|
return exportTargets.map(dataSet => {
|
398
428
|
let tempObj = {}
|
@@ -408,11 +438,11 @@ export class DataSet extends connect(store)(localize(i18next)(PageView)) {
|
|
408
438
|
openPopup(
|
409
439
|
html`
|
410
440
|
<data-set-importer
|
411
|
-
.dataSets
|
412
|
-
@imported
|
441
|
+
.dataSets=${records}
|
442
|
+
@imported=${() => {
|
413
443
|
history.back()
|
414
444
|
this.grist.fetch()
|
415
|
-
}}
|
445
|
+
}}
|
416
446
|
></data-set-importer>
|
417
447
|
`,
|
418
448
|
{
|
package/dist-server/index.js
CHANGED
@@ -18,4 +18,5 @@ require("./routes");
|
|
18
18
|
__exportStar(require("./migrations"), exports);
|
19
19
|
__exportStar(require("./middlewares"), exports);
|
20
20
|
__exportStar(require("./service"), exports);
|
21
|
+
__exportStar(require("./service/data-spec/data-spec-manager"), exports);
|
21
22
|
//# sourceMappingURL=index.js.map
|
package/dist-server/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oBAAiB;AAEjB,+CAA4B;AAC5B,gDAA6B;AAC7B,4CAAyB"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oBAAiB;AAEjB,+CAA4B;AAC5B,gDAA6B;AAC7B,4CAAyB;AAEzB,wEAAqD"}
|
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
10
10
|
};
|
11
|
-
var _a;
|
11
|
+
var _a, _b;
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
13
13
|
exports.DataItemList = exports.DataItemPatch = void 0;
|
14
14
|
const type_graphql_1 = require("type-graphql");
|
@@ -44,6 +44,10 @@ __decorate([
|
|
44
44
|
(0, type_graphql_1.Field)(type => data_item_1.DataItemType, { nullable: true }),
|
45
45
|
__metadata("design:type", String)
|
46
46
|
], DataItemPatch.prototype, "type", void 0);
|
47
|
+
__decorate([
|
48
|
+
(0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
|
49
|
+
__metadata("design:type", typeof (_a = typeof shell_1.ScalarObject !== "undefined" && shell_1.ScalarObject) === "function" ? _a : Object)
|
50
|
+
], DataItemPatch.prototype, "options", void 0);
|
47
51
|
__decorate([
|
48
52
|
(0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true }),
|
49
53
|
__metadata("design:type", Number)
|
@@ -54,7 +58,7 @@ __decorate([
|
|
54
58
|
], DataItemPatch.prototype, "active", void 0);
|
55
59
|
__decorate([
|
56
60
|
(0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
|
57
|
-
__metadata("design:type", typeof (
|
61
|
+
__metadata("design:type", typeof (_b = typeof shell_1.ScalarObject !== "undefined" && shell_1.ScalarObject) === "function" ? _b : Object)
|
58
62
|
], DataItemPatch.prototype, "spec", void 0);
|
59
63
|
__decorate([
|
60
64
|
(0, type_graphql_1.Field)({ nullable: true }),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-item-type.js","sourceRoot":"","sources":["../../../server/service/data-item/data-item-type.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAAoE;AAEpE,iDAAoD;AAEpD,2CAAoD;AAGpD,IAAa,aAAa,GAA1B,MAAa,aAAa;
|
1
|
+
{"version":3,"file":"data-item-type.js","sourceRoot":"","sources":["../../../server/service/data-item/data-item-type.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAAoE;AAEpE,iDAAoD;AAEpD,2CAAoD;AAGpD,IAAa,aAAa,GAA1B,MAAa,aAAa;CAoCzB,CAAA;AAlCC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCAC3B;AAGX;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACR;AAGlB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACtB;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACd;AAGZ;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,wBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CAC7B;AAGnB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACtC,oBAAY,oBAAZ,oBAAY;8CAAA;AAGtB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACzB;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACV;AAGhB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACzC,oBAAY,oBAAZ,oBAAY;2CAAA;AAGnB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACX;AAnCJ,aAAa;IADzB,IAAA,wBAAS,GAAE;GACC,aAAa,CAoCzB;AApCY,sCAAa;AAuC1B,IAAa,YAAY,GAAzB,MAAa,YAAY;CAMxB,CAAA;AAJC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oBAAQ,CAAC,CAAC;;2CACT;AAGjB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;2CACN;AALF,YAAY;IADxB,IAAA,yBAAU,GAAE;GACA,YAAY,CAMxB;AANY,oCAAY"}
|
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
10
10
|
};
|
11
|
-
var _a, _b, _c, _d;
|
11
|
+
var _a, _b, _c, _d, _e;
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
13
13
|
exports.DataItem = exports.DataItemType = void 0;
|
14
14
|
const type_graphql_1 = require("type-graphql");
|
@@ -22,6 +22,7 @@ var DataItemType;
|
|
22
22
|
DataItemType["text"] = "text";
|
23
23
|
DataItemType["boolean"] = "boolean";
|
24
24
|
DataItemType["select"] = "select";
|
25
|
+
DataItemType["file"] = "file";
|
25
26
|
})(DataItemType = exports.DataItemType || (exports.DataItemType = {}));
|
26
27
|
(0, type_graphql_1.registerEnumType)(DataItemType, {
|
27
28
|
name: 'DataItemType',
|
@@ -90,6 +91,11 @@ __decorate([
|
|
90
91
|
(0, type_graphql_1.Field)({ nullable: true }),
|
91
92
|
__metadata("design:type", String)
|
92
93
|
], DataItem.prototype, "type", void 0);
|
94
|
+
__decorate([
|
95
|
+
(0, typeorm_1.Column)('simple-json', { nullable: true }),
|
96
|
+
(0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
|
97
|
+
__metadata("design:type", typeof (_b = typeof shell_1.ScalarObject !== "undefined" && shell_1.ScalarObject) === "function" ? _b : Object)
|
98
|
+
], DataItem.prototype, "options", void 0);
|
93
99
|
__decorate([
|
94
100
|
(0, typeorm_1.Column)({
|
95
101
|
nullable: true
|
@@ -100,7 +106,7 @@ __decorate([
|
|
100
106
|
__decorate([
|
101
107
|
(0, typeorm_1.Column)('simple-json', { nullable: true }),
|
102
108
|
(0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
|
103
|
-
__metadata("design:type", typeof (
|
109
|
+
__metadata("design:type", typeof (_c = typeof shell_1.ScalarObject !== "undefined" && shell_1.ScalarObject) === "function" ? _c : Object)
|
104
110
|
], DataItem.prototype, "spec", void 0);
|
105
111
|
__decorate([
|
106
112
|
(0, typeorm_1.CreateDateColumn)(),
|
@@ -117,7 +123,7 @@ __decorate([
|
|
117
123
|
nullable: true
|
118
124
|
}),
|
119
125
|
(0, type_graphql_1.Field)({ nullable: true }),
|
120
|
-
__metadata("design:type", typeof (
|
126
|
+
__metadata("design:type", typeof (_d = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _d : Object)
|
121
127
|
], DataItem.prototype, "creator", void 0);
|
122
128
|
__decorate([
|
123
129
|
(0, typeorm_1.RelationId)((dataItem) => dataItem.creator),
|
@@ -128,7 +134,7 @@ __decorate([
|
|
128
134
|
nullable: true
|
129
135
|
}),
|
130
136
|
(0, type_graphql_1.Field)({ nullable: true }),
|
131
|
-
__metadata("design:type", typeof (
|
137
|
+
__metadata("design:type", typeof (_e = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _e : Object)
|
132
138
|
], DataItem.prototype, "updater", void 0);
|
133
139
|
__decorate([
|
134
140
|
(0, typeorm_1.RelationId)((dataItem) => dataItem.creator),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-item.js","sourceRoot":"","sources":["../../../server/service/data-item/data-item.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAA2E;AAC3E,qCASgB;AAEhB,yDAAgD;AAChD,iDAA4D;AAE5D,mDAA8C;AAE9C,IAAY,
|
1
|
+
{"version":3,"file":"data-item.js","sourceRoot":"","sources":["../../../server/service/data-item/data-item.ts"],"names":[],"mappings":"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"}
|
@@ -11,6 +11,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
13
13
|
};
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
16
|
+
};
|
14
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
18
|
exports.DataSampleMutation = void 0;
|
16
19
|
const type_graphql_1 = require("type-graphql");
|
@@ -19,6 +22,31 @@ const data_item_1 = require("../data-item/data-item");
|
|
19
22
|
const data_set_1 = require("../data-set/data-set");
|
20
23
|
const data_sample_1 = require("./data-sample");
|
21
24
|
const data_sample_type_1 = require("./data-sample-type");
|
25
|
+
const moment_1 = __importDefault(require("moment"));
|
26
|
+
const debug = require('debug')('things-factory:dataset:data-sample:data-sample-mutation');
|
27
|
+
// parse variable javascript string pattern
|
28
|
+
const replaceVariables = (keys, dic) => {
|
29
|
+
for (const k in keys) {
|
30
|
+
const matches = keys[k].match(/\$\{\w*\}/g);
|
31
|
+
matches &&
|
32
|
+
matches.forEach(m => {
|
33
|
+
keys[k] = keys[k].replace(m, dic[m.slice(2, -1)]);
|
34
|
+
});
|
35
|
+
}
|
36
|
+
return keys;
|
37
|
+
};
|
38
|
+
// It is required UTC date for Partitioning File System like AWS S3.
|
39
|
+
// ex) %YYYY, %MM, %DD
|
40
|
+
const formatDate = (keys, _moment) => {
|
41
|
+
for (const k in keys) {
|
42
|
+
const matches = keys[k].match(/%\w*/g);
|
43
|
+
matches &&
|
44
|
+
matches.forEach(m => {
|
45
|
+
keys[k] = keys[k].replace(m, _moment.format(m.substr(1)));
|
46
|
+
});
|
47
|
+
}
|
48
|
+
return keys;
|
49
|
+
};
|
22
50
|
let DataSampleMutation = class DataSampleMutation {
|
23
51
|
async createDataSample(dataSample, context) {
|
24
52
|
const { domain, user, tx } = context.state;
|
@@ -32,12 +60,18 @@ let DataSampleMutation = class DataSampleMutation {
|
|
32
60
|
sequence: 'DESC'
|
33
61
|
}
|
34
62
|
});
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
});
|
40
|
-
|
63
|
+
const spec = dataItems.reduce((spec, dataItem) => {
|
64
|
+
spec[dataItem.tag] = Object.assign(Object.assign({}, dataItem.spec), { name: dataItem.name /* do we need ? */ });
|
65
|
+
return spec;
|
66
|
+
}, {});
|
67
|
+
var partitionKeys = Object.assign(Object.assign({}, dataSet.partitionKeys), { year: '%YYYY', month: '%MM', date: '%DD', variableX: '${x}', variableDataSetId: '${dataSetId}' });
|
68
|
+
const collectedAt = dataSample.collectedAt || new Date();
|
69
|
+
partitionKeys = formatDate(partitionKeys, (0, moment_1.default)(collectedAt).utc());
|
70
|
+
partitionKeys = replaceVariables(partitionKeys, Object.assign({ dataSetId: dataSample.dataSetId }, dataSample.data));
|
71
|
+
return await tx.getRepository(data_sample_1.DataSample).save(Object.assign(Object.assign({ name: dataSet.name, description: dataSet.description }, dataSample), { domain,
|
72
|
+
partitionKeys,
|
73
|
+
spec,
|
74
|
+
collectedAt, creator: user, updater: user }));
|
41
75
|
}
|
42
76
|
async updateDataSample(id, patch, context) {
|
43
77
|
const { domain, user, tx } = context.state;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-sample-mutation.js","sourceRoot":"","sources":["../../../server/service/data-sample/data-sample-mutation.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"data-sample-mutation.js","sourceRoot":"","sources":["../../../server/service/data-sample/data-sample-mutation.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DataSpecManager = void 0;
|
4
|
+
class DataSpecManager {
|
5
|
+
static getDataSpec(type) {
|
6
|
+
return DataSpecManager.specRegistry[type];
|
7
|
+
}
|
8
|
+
static registerDataSpec(type, dataSpec) {
|
9
|
+
DataSpecManager.specRegistry[type] = dataSpec;
|
10
|
+
}
|
11
|
+
static unregisterDataSpec(type) {
|
12
|
+
delete DataSpecManager.specRegistry[type];
|
13
|
+
}
|
14
|
+
static getDataSpecs() {
|
15
|
+
return Object.values(DataSpecManager.specRegistry);
|
16
|
+
}
|
17
|
+
}
|
18
|
+
exports.DataSpecManager = DataSpecManager;
|
19
|
+
DataSpecManager.specRegistry = {};
|
20
|
+
//# sourceMappingURL=data-spec-manager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"data-spec-manager.js","sourceRoot":"","sources":["../../../server/service/data-spec/data-spec-manager.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAG1B,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,OAAO,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,IAAY,EAAE,QAAkB;QACtD,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA;IAC/C,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,IAAY;QACpC,OAAO,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,YAAY;QACjB,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;IACpD,CAAC;;AAjBH,0CAkBC;AAjBQ,4BAAY,GAAiC,EAAE,CAAA"}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
7
|
+
};
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
10
|
+
};
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.DataSpecQuery = void 0;
|
16
|
+
const type_graphql_1 = require("type-graphql");
|
17
|
+
const data_spec_1 = require("./data-spec");
|
18
|
+
const data_spec_manager_1 = require("./data-spec-manager");
|
19
|
+
let DataSpecQuery = class DataSpecQuery {
|
20
|
+
dataSpec(name) {
|
21
|
+
return data_spec_manager_1.DataSpecManager.getDataSpec(name);
|
22
|
+
}
|
23
|
+
dataSpecs() {
|
24
|
+
const items = data_spec_manager_1.DataSpecManager.getDataSpecs();
|
25
|
+
return {
|
26
|
+
items,
|
27
|
+
total: items.length
|
28
|
+
};
|
29
|
+
}
|
30
|
+
};
|
31
|
+
__decorate([
|
32
|
+
(0, type_graphql_1.Query)(returns => data_spec_1.DataSpec, { description: 'To fetch a data-spec' }),
|
33
|
+
__param(0, (0, type_graphql_1.Arg)('name')),
|
34
|
+
__metadata("design:type", Function),
|
35
|
+
__metadata("design:paramtypes", [String]),
|
36
|
+
__metadata("design:returntype", data_spec_1.DataSpec)
|
37
|
+
], DataSpecQuery.prototype, "dataSpec", null);
|
38
|
+
__decorate([
|
39
|
+
(0, type_graphql_1.Query)(returns => data_spec_1.DataSpecList, { description: 'To fetch all data-specs' }),
|
40
|
+
__metadata("design:type", Function),
|
41
|
+
__metadata("design:paramtypes", []),
|
42
|
+
__metadata("design:returntype", data_spec_1.DataSpecList)
|
43
|
+
], DataSpecQuery.prototype, "dataSpecs", null);
|
44
|
+
DataSpecQuery = __decorate([
|
45
|
+
(0, type_graphql_1.Resolver)(data_spec_1.DataSpec)
|
46
|
+
], DataSpecQuery);
|
47
|
+
exports.DataSpecQuery = DataSpecQuery;
|
48
|
+
//# sourceMappingURL=data-spec-query.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"data-spec-query.js","sourceRoot":"","sources":["../../../server/service/data-spec/data-spec-query.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+CAAmD;AACnD,2CAAoD;AACpD,2DAAqD;AAGrD,IAAa,aAAa,GAA1B,MAAa,aAAa;IAExB,QAAQ,CAAc,IAAY;QAChC,OAAO,mCAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAGD,SAAS;QACP,MAAM,KAAK,GAAG,mCAAe,CAAC,YAAY,EAAE,CAAA;QAE5C,OAAO;YACL,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,MAAM;SACpB,CAAA;IACH,CAAC;CACF,CAAA;AAbC;IADC,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,oBAAQ,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC;IAC1D,WAAA,IAAA,kBAAG,EAAC,MAAM,CAAC,CAAA;;;oCAAgB,oBAAQ;6CAE5C;AAGD;IADC,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,wBAAY,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;;;oCAC9D,wBAAY;8CAOxB;AAdU,aAAa;IADzB,IAAA,uBAAQ,EAAC,oBAAQ,CAAC;GACN,aAAa,CAezB;AAfY,sCAAa"}
|
@@ -0,0 +1,78 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
7
|
+
};
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
10
|
+
};
|
11
|
+
var _a;
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
13
|
+
exports.DataSpecList = exports.DataSpec = exports.DataSpecItem = void 0;
|
14
|
+
const type_graphql_1 = require("type-graphql");
|
15
|
+
const shell_1 = require("@things-factory/shell");
|
16
|
+
let DataSpecItem = class DataSpecItem {
|
17
|
+
};
|
18
|
+
__decorate([
|
19
|
+
(0, type_graphql_1.Field)(),
|
20
|
+
__metadata("design:type", String)
|
21
|
+
], DataSpecItem.prototype, "type", void 0);
|
22
|
+
__decorate([
|
23
|
+
(0, type_graphql_1.Field)(),
|
24
|
+
__metadata("design:type", String)
|
25
|
+
], DataSpecItem.prototype, "label", void 0);
|
26
|
+
__decorate([
|
27
|
+
(0, type_graphql_1.Field)(),
|
28
|
+
__metadata("design:type", String)
|
29
|
+
], DataSpecItem.prototype, "name", void 0);
|
30
|
+
__decorate([
|
31
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
32
|
+
__metadata("design:type", String)
|
33
|
+
], DataSpecItem.prototype, "placeholder", void 0);
|
34
|
+
__decorate([
|
35
|
+
(0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
|
36
|
+
__metadata("design:type", typeof (_a = typeof shell_1.ScalarObject !== "undefined" && shell_1.ScalarObject) === "function" ? _a : Object)
|
37
|
+
], DataSpecItem.prototype, "property", void 0);
|
38
|
+
DataSpecItem = __decorate([
|
39
|
+
(0, type_graphql_1.ObjectType)()
|
40
|
+
], DataSpecItem);
|
41
|
+
exports.DataSpecItem = DataSpecItem;
|
42
|
+
let DataSpec = class DataSpec {
|
43
|
+
};
|
44
|
+
__decorate([
|
45
|
+
(0, type_graphql_1.Field)(),
|
46
|
+
__metadata("design:type", String)
|
47
|
+
], DataSpec.prototype, "name", void 0);
|
48
|
+
__decorate([
|
49
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
50
|
+
__metadata("design:type", String)
|
51
|
+
], DataSpec.prototype, "description", void 0);
|
52
|
+
__decorate([
|
53
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
54
|
+
__metadata("design:type", String)
|
55
|
+
], DataSpec.prototype, "help", void 0);
|
56
|
+
__decorate([
|
57
|
+
(0, type_graphql_1.Field)(type => [DataSpecItem], { nullable: true }),
|
58
|
+
__metadata("design:type", Array)
|
59
|
+
], DataSpec.prototype, "specItems", void 0);
|
60
|
+
DataSpec = __decorate([
|
61
|
+
(0, type_graphql_1.ObjectType)()
|
62
|
+
], DataSpec);
|
63
|
+
exports.DataSpec = DataSpec;
|
64
|
+
let DataSpecList = class DataSpecList {
|
65
|
+
};
|
66
|
+
__decorate([
|
67
|
+
(0, type_graphql_1.Field)(type => [DataSpec]),
|
68
|
+
__metadata("design:type", Array)
|
69
|
+
], DataSpecList.prototype, "items", void 0);
|
70
|
+
__decorate([
|
71
|
+
(0, type_graphql_1.Field)(type => type_graphql_1.Int),
|
72
|
+
__metadata("design:type", Number)
|
73
|
+
], DataSpecList.prototype, "total", void 0);
|
74
|
+
DataSpecList = __decorate([
|
75
|
+
(0, type_graphql_1.ObjectType)()
|
76
|
+
], DataSpecList);
|
77
|
+
exports.DataSpecList = DataSpecList;
|
78
|
+
//# sourceMappingURL=data-spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"data-spec.js","sourceRoot":"","sources":["../../../server/service/data-spec/data-spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAAqD;AACrD,iDAAoD;AAGpD,IAAa,YAAY,GAAzB,MAAa,YAAY;CAexB,CAAA;AAbC;IADC,IAAA,oBAAK,GAAE;;0CACI;AAGZ;IADC,IAAA,oBAAK,GAAE;;2CACK;AAGb;IADC,IAAA,oBAAK,GAAE;;0CACI;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACrC,oBAAY,oBAAZ,oBAAY;8CAAA;AAdZ,YAAY;IADxB,IAAA,yBAAU,GAAE;GACA,YAAY,CAexB;AAfY,oCAAY;AAkBzB,IAAa,QAAQ,GAArB,MAAa,QAAQ;CAYpB,CAAA;AAVC;IADC,IAAA,oBAAK,GAAE;;sCACI;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACP;AAGnB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACd;AAGZ;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACzB;AAXd,QAAQ;IADpB,IAAA,yBAAU,GAAE;GACA,QAAQ,CAYpB;AAZY,4BAAQ;AAerB,IAAa,YAAY,GAAzB,MAAa,YAAY;CAMxB,CAAA;AAJC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;;2CACT;AAGjB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;2CACN;AALF,YAAY;IADxB,IAAA,yBAAU,GAAE;GACA,YAAY,CAMxB;AANY,oCAAY"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.resolvers = exports.entities = void 0;
|
4
|
+
const data_spec_1 = require("./data-spec");
|
5
|
+
const data_spec_query_1 = require("./data-spec-query");
|
6
|
+
exports.entities = [data_spec_1.DataSpec];
|
7
|
+
exports.resolvers = [data_spec_query_1.DataSpecQuery];
|
8
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/data-spec/index.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AACtC,uDAAiD;AAEpC,QAAA,QAAQ,GAAG,CAAC,oBAAQ,CAAC,CAAA;AACrB,QAAA,SAAS,GAAG,CAAC,+BAAa,CAAC,CAAA"}
|
@@ -20,17 +20,20 @@ const data_sensor_1 = require("./data-sensor");
|
|
20
20
|
const data_sample_1 = require("./data-sample");
|
21
21
|
const data_item_1 = require("./data-item");
|
22
22
|
const data_set_1 = require("./data-set");
|
23
|
+
const data_spec_1 = require("./data-spec");
|
23
24
|
/* EXPORT ENTITY TYPES */
|
24
25
|
__exportStar(require("./data-sensor/data-sensor"), exports);
|
25
26
|
__exportStar(require("./data-sample/data-sample"), exports);
|
26
27
|
__exportStar(require("./data-item/data-item"), exports);
|
27
28
|
__exportStar(require("./data-set/data-set"), exports);
|
29
|
+
__exportStar(require("./data-spec/data-spec"), exports);
|
28
30
|
exports.entities = [
|
29
31
|
/* ENTITIES */
|
30
32
|
...data_sensor_1.entities,
|
31
33
|
...data_sample_1.entities,
|
32
34
|
...data_item_1.entities,
|
33
|
-
...data_set_1.entities
|
35
|
+
...data_set_1.entities,
|
36
|
+
...data_spec_1.entities
|
34
37
|
];
|
35
38
|
exports.schema = {
|
36
39
|
resolverClasses: [
|
@@ -38,7 +41,8 @@ exports.schema = {
|
|
38
41
|
...data_sensor_1.resolvers,
|
39
42
|
...data_sample_1.resolvers,
|
40
43
|
...data_item_1.resolvers,
|
41
|
-
...data_set_1.resolvers
|
44
|
+
...data_set_1.resolvers,
|
45
|
+
...data_spec_1.resolvers
|
42
46
|
]
|
43
47
|
};
|
44
48
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,+CAAgG;AAChG,+CAAgG;AAChG,2CAA0F;AAC1F,yCAAuF;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,+CAAgG;AAChG,+CAAgG;AAChG,2CAA0F;AAC1F,yCAAuF;AACvF,2CAA0F;AAE1F,yBAAyB;AACzB,4DAAyC;AACzC,4DAAyC;AACzC,wDAAqC;AACrC,sDAAmC;AACnC,wDAAqC;AAExB,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,sBAAkB;IACrB,GAAG,sBAAkB;IACrB,GAAG,oBAAgB;IACnB,GAAG,mBAAe;IAClB,GAAG,oBAAgB;CACpB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,uBAAmB;QACtB,GAAG,uBAAmB;QACtB,GAAG,qBAAiB;QACpB,GAAG,oBAAgB;QACnB,GAAG,qBAAiB;KACrB;CACF,CAAA"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/dataset",
|
3
|
-
"version": "5.0.0-alpha.
|
3
|
+
"version": "5.0.0-alpha.4",
|
4
4
|
"main": "dist-server/index.js",
|
5
5
|
"browser": "client/index.js",
|
6
6
|
"things-factory": true,
|
@@ -24,16 +24,17 @@
|
|
24
24
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
25
25
|
},
|
26
26
|
"dependencies": {
|
27
|
-
"@operato/data-grist": "
|
28
|
-
"@operato/
|
29
|
-
"@operato/
|
30
|
-
"@operato/
|
31
|
-
"@operato/
|
32
|
-
"@operato/
|
33
|
-
"@operato/
|
34
|
-
"@
|
35
|
-
"@things-factory/
|
36
|
-
"@things-factory/
|
27
|
+
"@operato/data-grist": "1.0.0-alpha.4",
|
28
|
+
"@operato/dataset": "1.0.0-alpha.4",
|
29
|
+
"@operato/graphql": "1.0.0-alpha.4",
|
30
|
+
"@operato/i18n": "1.0.0-alpha.4",
|
31
|
+
"@operato/layout": "1.0.0-alpha.4",
|
32
|
+
"@operato/shell": "1.0.0-alpha.4",
|
33
|
+
"@operato/styles": "1.0.0-alpha.4",
|
34
|
+
"@operato/utils": "1.0.0-alpha.4",
|
35
|
+
"@things-factory/auth-base": "^5.0.0-alpha.4",
|
36
|
+
"@things-factory/env": "^5.0.0-alpha.4",
|
37
|
+
"@things-factory/shell": "^5.0.0-alpha.4"
|
37
38
|
},
|
38
|
-
"gitHead": "
|
39
|
+
"gitHead": "77253f86954dc6f5c14356ea85887c323fd2511a"
|
39
40
|
}
|
package/server/index.ts
CHANGED
@@ -19,7 +19,8 @@ export enum DataItemType {
|
|
19
19
|
number = 'number',
|
20
20
|
text = 'text',
|
21
21
|
boolean = 'boolean',
|
22
|
-
select = 'select'
|
22
|
+
select = 'select',
|
23
|
+
file = 'file'
|
23
24
|
}
|
24
25
|
|
25
26
|
registerEnumType(DataItemType, {
|
@@ -81,6 +82,10 @@ export class DataItem {
|
|
81
82
|
@Field({ nullable: true })
|
82
83
|
type?: DataItemType
|
83
84
|
|
85
|
+
@Column('simple-json', { nullable: true })
|
86
|
+
@Field(type => ScalarObject, { nullable: true })
|
87
|
+
options?: ScalarObject
|
88
|
+
|
84
89
|
@Column({
|
85
90
|
nullable: true
|
86
91
|
})
|
@@ -6,6 +6,35 @@ import { DataSet } from '../data-set/data-set'
|
|
6
6
|
import { DataSample } from './data-sample'
|
7
7
|
import { DataSamplePatch, NewDataSample } from './data-sample-type'
|
8
8
|
|
9
|
+
import moment from 'moment'
|
10
|
+
|
11
|
+
const debug = require('debug')('things-factory:dataset:data-sample:data-sample-mutation')
|
12
|
+
|
13
|
+
// parse variable javascript string pattern
|
14
|
+
const replaceVariables = (keys, dic) => {
|
15
|
+
for (const k in keys) {
|
16
|
+
const matches = keys[k].match(/\$\{\w*\}/g)
|
17
|
+
matches &&
|
18
|
+
matches.forEach(m => {
|
19
|
+
keys[k] = keys[k].replace(m, dic[m.slice(2, -1)])
|
20
|
+
})
|
21
|
+
}
|
22
|
+
return keys
|
23
|
+
}
|
24
|
+
|
25
|
+
// It is required UTC date for Partitioning File System like AWS S3.
|
26
|
+
// ex) %YYYY, %MM, %DD
|
27
|
+
const formatDate = (keys, _moment) => {
|
28
|
+
for (const k in keys) {
|
29
|
+
const matches = keys[k].match(/%\w*/g)
|
30
|
+
matches &&
|
31
|
+
matches.forEach(m => {
|
32
|
+
keys[k] = keys[k].replace(m, _moment.format(m.substr(1)))
|
33
|
+
})
|
34
|
+
}
|
35
|
+
return keys
|
36
|
+
}
|
37
|
+
|
9
38
|
@Resolver(DataSample)
|
10
39
|
export class DataSampleMutation {
|
11
40
|
@Directive('@privilege(category: "data-sample", privilege: "mutation", domainOwnerGranted: true)')
|
@@ -25,21 +54,39 @@ export class DataSampleMutation {
|
|
25
54
|
}
|
26
55
|
})
|
27
56
|
|
28
|
-
|
57
|
+
const spec = dataItems.reduce((spec, dataItem) => {
|
58
|
+
spec[dataItem.tag] = {
|
59
|
+
...dataItem.spec,
|
60
|
+
name: dataItem.name /* do we need ? */
|
61
|
+
}
|
62
|
+
|
63
|
+
return spec
|
64
|
+
}, {})
|
65
|
+
|
66
|
+
var partitionKeys = {
|
67
|
+
...dataSet.partitionKeys,
|
68
|
+
year: '%YYYY',
|
69
|
+
month: '%MM',
|
70
|
+
date: '%DD',
|
71
|
+
variableX: '${x}',
|
72
|
+
variableDataSetId: '${dataSetId}'
|
73
|
+
}
|
29
74
|
|
30
|
-
|
31
|
-
|
32
|
-
|
75
|
+
const collectedAt = dataSample.collectedAt || new Date()
|
76
|
+
partitionKeys = formatDate(partitionKeys, moment(collectedAt).utc())
|
77
|
+
partitionKeys = replaceVariables(partitionKeys, {
|
78
|
+
dataSetId: dataSample.dataSetId,
|
79
|
+
...dataSample.data
|
33
80
|
})
|
34
81
|
|
35
82
|
return await tx.getRepository(DataSample).save({
|
36
83
|
name: dataSet.name,
|
37
84
|
description: dataSet.description,
|
38
|
-
collectedAt: new Date(),
|
39
85
|
...dataSample,
|
40
86
|
domain,
|
41
|
-
partitionKeys
|
87
|
+
partitionKeys,
|
42
88
|
spec,
|
89
|
+
collectedAt,
|
43
90
|
creator: user,
|
44
91
|
updater: user
|
45
92
|
})
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { DataSpec } from './data-spec'
|
2
|
+
|
3
|
+
export class DataSpecManager {
|
4
|
+
static specRegistry: { [type: string]: DataSpec } = {}
|
5
|
+
|
6
|
+
static getDataSpec(type: string): DataSpec {
|
7
|
+
return DataSpecManager.specRegistry[type]
|
8
|
+
}
|
9
|
+
|
10
|
+
static registerDataSpec(type: string, dataSpec: DataSpec) {
|
11
|
+
DataSpecManager.specRegistry[type] = dataSpec
|
12
|
+
}
|
13
|
+
|
14
|
+
static unregisterDataSpec(type: string) {
|
15
|
+
delete DataSpecManager.specRegistry[type]
|
16
|
+
}
|
17
|
+
|
18
|
+
static getDataSpecs(): DataSpec[] {
|
19
|
+
return Object.values(DataSpecManager.specRegistry)
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { Resolver, Query, Arg } from 'type-graphql'
|
2
|
+
import { DataSpec, DataSpecList } from './data-spec'
|
3
|
+
import { DataSpecManager } from './data-spec-manager'
|
4
|
+
|
5
|
+
@Resolver(DataSpec)
|
6
|
+
export class DataSpecQuery {
|
7
|
+
@Query(returns => DataSpec, { description: 'To fetch a data-spec' })
|
8
|
+
dataSpec(@Arg('name') name: string): DataSpec {
|
9
|
+
return DataSpecManager.getDataSpec(name)
|
10
|
+
}
|
11
|
+
|
12
|
+
@Query(returns => DataSpecList, { description: 'To fetch all data-specs' })
|
13
|
+
dataSpecs(): DataSpecList {
|
14
|
+
const items = DataSpecManager.getDataSpecs()
|
15
|
+
|
16
|
+
return {
|
17
|
+
items,
|
18
|
+
total: items.length
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { ObjectType, Field, Int } from 'type-graphql'
|
2
|
+
import { ScalarObject } from '@things-factory/shell'
|
3
|
+
|
4
|
+
@ObjectType()
|
5
|
+
export class DataSpecItem {
|
6
|
+
@Field()
|
7
|
+
type: string
|
8
|
+
|
9
|
+
@Field()
|
10
|
+
label: string
|
11
|
+
|
12
|
+
@Field()
|
13
|
+
name: string
|
14
|
+
|
15
|
+
@Field({ nullable: true })
|
16
|
+
placeholder?: string
|
17
|
+
|
18
|
+
@Field(type => ScalarObject, { nullable: true })
|
19
|
+
property?: ScalarObject
|
20
|
+
}
|
21
|
+
|
22
|
+
@ObjectType()
|
23
|
+
export class DataSpec {
|
24
|
+
@Field()
|
25
|
+
name: string
|
26
|
+
|
27
|
+
@Field({ nullable: true })
|
28
|
+
description: string
|
29
|
+
|
30
|
+
@Field({ nullable: true })
|
31
|
+
help: string
|
32
|
+
|
33
|
+
@Field(type => [DataSpecItem], { nullable: true })
|
34
|
+
specItems: DataSpecItem[]
|
35
|
+
}
|
36
|
+
|
37
|
+
@ObjectType()
|
38
|
+
export class DataSpecList {
|
39
|
+
@Field(type => [DataSpec])
|
40
|
+
items: DataSpec[]
|
41
|
+
|
42
|
+
@Field(type => Int)
|
43
|
+
total: number
|
44
|
+
}
|
package/server/service/index.ts
CHANGED
@@ -3,27 +3,31 @@ import { entities as DataSensorEntities, resolvers as DataSensorResolvers } from
|
|
3
3
|
import { entities as DataSampleEntities, resolvers as DataSampleResolvers } from './data-sample'
|
4
4
|
import { entities as DataItemEntities, resolvers as DataItemResolvers } from './data-item'
|
5
5
|
import { entities as DataSetEntities, resolvers as DataSetResolvers } from './data-set'
|
6
|
+
import { entities as DataSpecEntities, resolvers as DataSpecResolvers } from './data-spec'
|
6
7
|
|
7
8
|
/* EXPORT ENTITY TYPES */
|
8
9
|
export * from './data-sensor/data-sensor'
|
9
10
|
export * from './data-sample/data-sample'
|
10
11
|
export * from './data-item/data-item'
|
11
12
|
export * from './data-set/data-set'
|
13
|
+
export * from './data-spec/data-spec'
|
12
14
|
|
13
15
|
export const entities = [
|
14
16
|
/* ENTITIES */
|
15
|
-
|
16
|
-
|
17
|
+
...DataSensorEntities,
|
18
|
+
...DataSampleEntities,
|
17
19
|
...DataItemEntities,
|
18
|
-
...DataSetEntities
|
20
|
+
...DataSetEntities,
|
21
|
+
...DataSpecEntities
|
19
22
|
]
|
20
23
|
|
21
24
|
export const schema = {
|
22
25
|
resolverClasses: [
|
23
26
|
/* RESOLVER CLASSES */
|
24
|
-
|
25
|
-
|
27
|
+
...DataSensorResolvers,
|
28
|
+
...DataSampleResolvers,
|
26
29
|
...DataItemResolvers,
|
27
|
-
...DataSetResolvers
|
30
|
+
...DataSetResolvers,
|
31
|
+
...DataSpecResolvers
|
28
32
|
]
|
29
33
|
}
|
package/translations/en.json
CHANGED
@@ -2,18 +2,20 @@
|
|
2
2
|
"field.appliance": "appliance",
|
3
3
|
"field.collected_at": "collected at",
|
4
4
|
"field.data": "data",
|
5
|
-
"field.
|
5
|
+
"field.dataSet": "data set",
|
6
6
|
"field.device-id": "device id",
|
7
7
|
"field.netmask": "network mask",
|
8
|
-
"field.
|
8
|
+
"field.options": "options",
|
9
|
+
"field.partitionKeys": "partition keys",
|
9
10
|
"field.quota": "sampling #",
|
10
11
|
"field.raw-data": "raw data",
|
11
12
|
"field.ref-by": "ref. by",
|
12
13
|
"field.serial-no": "serial #",
|
13
14
|
"field.spec": "spec",
|
14
15
|
"field.tag": "tag name",
|
16
|
+
"title.data-entry-form": "data entry form",
|
15
17
|
"title.data-item list": "data item list",
|
16
18
|
"title.data-sample list": "data sample list",
|
17
19
|
"title.data-sensor list": "data sensor list",
|
18
20
|
"title.data-set list": "data set list"
|
19
|
-
}
|
21
|
+
}
|
package/translations/ko.json
CHANGED
@@ -2,18 +2,20 @@
|
|
2
2
|
"field.appliance": "어플라이언스",
|
3
3
|
"field.collected_at": "수집일시",
|
4
4
|
"field.data": "데이타",
|
5
|
-
"field.
|
5
|
+
"field.dataSet": "데이타셋",
|
6
6
|
"field.device-id": "디바이스 아이디",
|
7
7
|
"field.netmask": "네트워크마스크",
|
8
|
-
"field.
|
8
|
+
"field.options": "선택옵션",
|
9
|
+
"field.partitionKeys": "파티션 키",
|
9
10
|
"field.quota": "샘플수",
|
10
11
|
"field.raw-data": "데이타 원본",
|
11
12
|
"field.ref-by": "참조아이템",
|
12
13
|
"field.serial-no": "시리얼번호",
|
13
14
|
"field.spec": "명세",
|
14
|
-
"field.tag": "
|
15
|
+
"field.tag": "태그이름",
|
16
|
+
"title.data-entry-form": "데이타 입력",
|
15
17
|
"title.data-item list": "데이타 아이템 조회",
|
16
18
|
"title.data-sample list": "데이타 샘플 조회",
|
17
19
|
"title.data-sensor list": "데이타 센서 조회",
|
18
20
|
"title.data-set list": "데이타 셋 조회"
|
19
|
-
}
|
21
|
+
}
|
package/translations/ms.json
CHANGED
@@ -2,18 +2,20 @@
|
|
2
2
|
"field.appliance": "appliance",
|
3
3
|
"field.collected_at": "collected at",
|
4
4
|
"field.data": "data",
|
5
|
-
"field.
|
5
|
+
"field.dataSet": "data set",
|
6
6
|
"field.device-id": "device id",
|
7
7
|
"field.netmask": "network mask",
|
8
|
-
"field.
|
8
|
+
"field.options": "options",
|
9
|
+
"field.partitionKeys": "partition keys",
|
9
10
|
"field.quota": "sampling #",
|
10
11
|
"field.raw-data": "raw data",
|
11
12
|
"field.ref-by": "ref. by",
|
12
13
|
"field.serial-no": "serial #",
|
13
14
|
"field.spec": "spec",
|
14
15
|
"field.tag": "tag name",
|
16
|
+
"title.data-entry-form": "data entry form",
|
15
17
|
"title.data-item list": "data item list",
|
16
18
|
"title.data-sample list": "data sample list",
|
17
19
|
"title.data-sensor list": "data sensor list",
|
18
20
|
"title.data-set list": "data set list"
|
19
|
-
}
|
21
|
+
}
|
package/translations/zh.json
CHANGED
@@ -2,18 +2,20 @@
|
|
2
2
|
"field.appliance": "appliance",
|
3
3
|
"field.collected_at": "collected at",
|
4
4
|
"field.data": "data",
|
5
|
-
"field.
|
5
|
+
"field.dataSet": "data set",
|
6
6
|
"field.device-id": "device id",
|
7
7
|
"field.netmask": "network mask",
|
8
|
-
"field.
|
8
|
+
"field.options": "options",
|
9
|
+
"field.partitionKeys": "partition keys",
|
9
10
|
"field.quota": "sampling #",
|
10
11
|
"field.raw-data": "raw data",
|
11
12
|
"field.ref-by": "ref. by",
|
12
13
|
"field.serial-no": "serial #",
|
13
14
|
"field.spec": "spec",
|
14
15
|
"field.tag": "tag name",
|
16
|
+
"title.data-entry-form": "data entry form",
|
15
17
|
"title.data-item list": "data item list",
|
16
18
|
"title.data-sample list": "data sample list",
|
17
19
|
"title.data-sensor list": "data sensor list",
|
18
20
|
"title.data-set list": "data set list"
|
19
|
-
}
|
21
|
+
}
|