@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.
Files changed (37) hide show
  1. package/client/pages/data-entry-form.js +74 -0
  2. package/client/pages/data-item-list.js +38 -9
  3. package/client/pages/data-sample.js +24 -5
  4. package/client/pages/data-sensor.js +1 -1
  5. package/client/pages/data-set.js +35 -5
  6. package/dist-server/index.js +1 -0
  7. package/dist-server/index.js.map +1 -1
  8. package/dist-server/service/data-item/data-item-type.js +6 -2
  9. package/dist-server/service/data-item/data-item-type.js.map +1 -1
  10. package/dist-server/service/data-item/data-item.js +10 -4
  11. package/dist-server/service/data-item/data-item.js.map +1 -1
  12. package/dist-server/service/data-sample/data-sample-mutation.js +40 -6
  13. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  14. package/dist-server/service/data-spec/data-spec-manager.js +20 -0
  15. package/dist-server/service/data-spec/data-spec-manager.js.map +1 -0
  16. package/dist-server/service/data-spec/data-spec-query.js +48 -0
  17. package/dist-server/service/data-spec/data-spec-query.js.map +1 -0
  18. package/dist-server/service/data-spec/data-spec.js +78 -0
  19. package/dist-server/service/data-spec/data-spec.js.map +1 -0
  20. package/dist-server/service/data-spec/index.js +8 -0
  21. package/dist-server/service/data-spec/index.js.map +1 -0
  22. package/dist-server/service/index.js +6 -2
  23. package/dist-server/service/index.js.map +1 -1
  24. package/package.json +13 -12
  25. package/server/index.ts +2 -0
  26. package/server/service/data-item/data-item-type.ts +3 -0
  27. package/server/service/data-item/data-item.ts +6 -1
  28. package/server/service/data-sample/data-sample-mutation.ts +53 -6
  29. package/server/service/data-spec/data-spec-manager.ts +21 -0
  30. package/server/service/data-spec/data-spec-query.ts +21 -0
  31. package/server/service/data-spec/data-spec.ts +44 -0
  32. package/server/service/data-spec/index.ts +5 -0
  33. package/server/service/index.ts +10 -6
  34. package/translations/en.json +5 -3
  35. package/translations/ko.json +6 -4
  36. package/translations/ms.json +5 -3
  37. 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 dataGrist() {
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.dataGrist._data.records
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.dataGrist.fetch()
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.dataGrist.selected.map(record => record.id)
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.dataGrist.fetch()
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: 150
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: 200
135
+ width: 150
136
136
  },
137
137
  {
138
138
  type: 'object',
139
139
  name: 'dataSet',
140
- header: i18next.t('field.data-set'),
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.data-set'),
197
+ header: i18next.t('field.dataSet'),
198
198
  record: {
199
199
  editable: true,
200
200
  options: {
@@ -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.partition-keys'),
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(['id', 'name', 'type', 'description', 'schedule', 'timezone', 'active', 'dataItems'])
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="${records}"
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
  {
@@ -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
@@ -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 (_a = typeof shell_1.ScalarObject !== "undefined" && shell_1.ScalarObject) === "function" ? _a : Object)
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;CAiCzB,CAAA;AA/BC;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,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;AAhCJ,aAAa;IADzB,IAAA,wBAAS,GAAE;GACC,aAAa,CAiCzB;AAjCY,sCAAa;AAoC1B,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"}
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 (_b = typeof shell_1.ScalarObject !== "undefined" && shell_1.ScalarObject) === "function" ? _b : Object)
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 (_c = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _c : Object)
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 (_d = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _d : Object)
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":"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"}
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
- var spec = {};
36
- dataItems.forEach(dataItem => {
37
- spec[dataItem.name] = dataItem.spec;
38
- // TODO 변수형 스펙값은 처리 결과값을 spec의 아이템 value로 반영하여야 한다.
39
- });
40
- return await tx.getRepository(data_sample_1.DataSample).save(Object.assign(Object.assign({ name: dataSet.name, description: dataSet.description, collectedAt: new Date() }, dataSample), { domain, partitionKeys: dataSet.partitionKeys, spec, creator: user, updater: user }));
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":"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"}
1
+ {"version":3,"file":"data-sample-mutation.js","sourceRoot":"","sources":["../../../server/service/data-sample/data-sample-mutation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,+CAAsE;AACtE,qCAA4B;AAE5B,sDAAiD;AACjD,mDAA8C;AAC9C,+CAA0C;AAC1C,yDAAmE;AAEnE,oDAA2B;AAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,yDAAyD,CAAC,CAAA;AAEzF,2CAA2C;AAC3C,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACrC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAC3C,OAAO;YACL,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;KACL;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,oEAAoE;AACpE,sBAAsB;AACtB,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;IACnC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACtC,OAAO;YACL,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAClB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3D,CAAC,CAAC,CAAA;KACL;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAGD,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAI7B,KAAK,CAAC,gBAAgB,CAAoB,UAAyB,EAAS,OAAY;QACtF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,kBAAO,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAA;QACrF,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,oBAAQ,CAAC,CAAC,IAAI,CAAC;YACtD,KAAK,EAAE;gBACL,MAAM;gBACN,OAAO;aACR;YACD,KAAK,EAAE;gBACL,QAAQ,EAAE,MAAM;aACjB;SACF,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,mCACb,QAAQ,CAAC,IAAI,KAChB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,GACvC,CAAA;YAED,OAAO,IAAI,CAAA;QACb,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,IAAI,aAAa,mCACZ,OAAO,CAAC,aAAa,KACxB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,cAAc,GAClC,CAAA;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAA;QACxD,aAAa,GAAG,UAAU,CAAC,aAAa,EAAE,IAAA,gBAAM,EAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QACpE,aAAa,GAAG,gBAAgB,CAAC,aAAa,kBAC5C,SAAS,EAAE,UAAU,CAAC,SAAS,IAC5B,UAAU,CAAC,IAAI,EAClB,CAAA;QAEF,OAAO,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAU,CAAC,CAAC,IAAI,+BAC5C,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,WAAW,EAAE,OAAO,CAAC,WAAW,IAC7B,UAAU,KACb,MAAM;YACN,aAAa;YACb,IAAI;YACJ,WAAW,EACX,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,IACb,CAAA;IACJ,CAAC;IAKD,KAAK,CAAC,gBAAgB,CACT,EAAU,EACP,KAAsB,EAC7B,OAAY;QAEnB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,wBAAU,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SACtB,CAAC,CAAA;QAEF,OAAO,MAAM,UAAU,CAAC,IAAI,+CACvB,UAAU,GACV,KAAK,KACR,OAAO,EAAE,IAAI,IACb,CAAA;IACJ,CAAC;IAKD,KAAK,CAAC,wBAAwB,CACe,OAA0B,EAC9D,OAAY;QAEnB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,cAAc,GAAG,EAAE,CAAC,aAAa,CAAC,wBAAU,CAAC,CAAA;QAEnD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBAEnC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,iCACnC,SAAS,KACZ,MAAM,EACN,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,IACb,CAAA;gBAEF,OAAO,CAAC,IAAI,iCAAM,MAAM,KAAE,MAAM,EAAE,GAAG,IAAG,CAAA;aACzC;SACF;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBAE7D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,+CACnC,UAAU,GACV,SAAS,KACZ,OAAO,EAAE,IAAI,IACb,CAAA;gBAEF,OAAO,CAAC,IAAI,iCAAM,MAAM,KAAE,MAAM,EAAE,GAAG,IAAG,CAAA;aACzC;SACF;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAKD,KAAK,CAAC,gBAAgB,CAAY,EAAU,EAAS,OAAY;QAC/D,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAU,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;QACzD,OAAO,IAAI,CAAA;IACb,CAAC;IAKD,KAAK,CAAC,iBAAiB,CAA+B,GAAa,EAAS,OAAY;QACtF,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAU,CAAC,CAAC,MAAM,CAAC;YACxC,MAAM;YACN,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAhJC;IAHC,IAAA,wBAAS,EAAC,sFAAsF,CAAC;IACjG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,wBAAU,EAAE,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC;IACtD,WAAA,IAAA,kBAAG,EAAC,YAAY,CAAC,CAAA;IAA6B,WAAA,IAAA,kBAAG,GAAE,CAAA;;qCAArB,gCAAa;;0DAkDlE;AAKD;IAHC,IAAA,wBAAS,EAAC,sFAAsF,CAAC;IACjG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,wBAAU,EAAE,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;IAEnF,WAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IACT,WAAA,IAAA,kBAAG,EAAC,OAAO,CAAC,CAAA;IACZ,WAAA,IAAA,kBAAG,GAAE,CAAA;;6CADe,kCAAe;;0DAerC;AAKD;IAHC,IAAA,wBAAS,EAAC,sFAAsF,CAAC;IACjG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,wBAAU,CAAC,EAAE,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;IAEhG,WAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,kCAAe,CAAC,CAAC,CAAA;IACzC,WAAA,IAAA,kBAAG,GAAE,CAAA;;;;kEAwCP;AAKD;IAHC,IAAA,wBAAS,EAAC,sFAAsF,CAAC;IACjG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;IACjD,WAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,kBAAG,GAAE,CAAA;;;;0DAKnD;AAKD;IAHC,IAAA,wBAAS,EAAC,sFAAsF,CAAC;IACjG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;IACxD,WAAA,IAAA,kBAAG,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAAiB,WAAA,IAAA,kBAAG,GAAE,CAAA;;;;2DAS1E;AAnJU,kBAAkB;IAD9B,IAAA,uBAAQ,EAAC,wBAAU,CAAC;GACR,kBAAkB,CAoJ9B;AApJY,gDAAkB"}
@@ -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;AAEvF,yBAAyB;AACzB,4DAAyC;AACzC,4DAAyC;AACzC,wDAAqC;AACrC,sDAAmC;AAEtB,QAAA,QAAQ,GAAG;IACtB,cAAc;IACf,GAAG,sBAAkB;IACrB,GAAG,sBAAkB;IACpB,GAAG,oBAAgB;IACnB,GAAG,mBAAe;CACnB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACxB,GAAG,uBAAmB;QACtB,GAAG,uBAAmB;QACpB,GAAG,qBAAiB;QACpB,GAAG,oBAAgB;KACpB;CACF,CAAA"}
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",
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": "^0.4.3",
28
- "@operato/graphql": "^0.4.3",
29
- "@operato/i18n": "^0.4.3",
30
- "@operato/layout": "^0.4.3",
31
- "@operato/shell": "^0.4.3",
32
- "@operato/styles": "^0.4.3",
33
- "@operato/utils": "^0.4.3",
34
- "@things-factory/auth-base": "^5.0.0-alpha.3",
35
- "@things-factory/env": "^5.0.0-alpha.3",
36
- "@things-factory/shell": "^5.0.0-alpha.3"
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": "0584a36ba889ff0b426cc87c0d9c8f14ffa2f677"
39
+ "gitHead": "77253f86954dc6f5c14356ea85887c323fd2511a"
39
40
  }
package/server/index.ts CHANGED
@@ -3,3 +3,5 @@ import './routes'
3
3
  export * from './migrations'
4
4
  export * from './middlewares'
5
5
  export * from './service'
6
+
7
+ export * from './service/data-spec/data-spec-manager'
@@ -27,6 +27,9 @@ export class DataItemPatch {
27
27
  @Field(type => DataItemType, { nullable: true })
28
28
  type?: DataItemType
29
29
 
30
+ @Field(type => ScalarObject, { nullable: true })
31
+ options?: ScalarObject
32
+
30
33
  @Field(type => Int, { nullable: true })
31
34
  quota?: number
32
35
 
@@ -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
- var spec = {} as any
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
- dataItems.forEach(dataItem => {
31
- spec[dataItem.name] = dataItem.spec
32
- // TODO 변수형 스펙값은 처리 결과값을 spec의 아이템 value로 반영하여야 한다.
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: dataSet.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
+ }
@@ -0,0 +1,5 @@
1
+ import { DataSpec } from './data-spec'
2
+ import { DataSpecQuery } from './data-spec-query'
3
+
4
+ export const entities = [DataSpec]
5
+ export const resolvers = [DataSpecQuery]
@@ -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
- ...DataSensorEntities,
16
- ...DataSampleEntities,
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
- ...DataSensorResolvers,
25
- ...DataSampleResolvers,
27
+ ...DataSensorResolvers,
28
+ ...DataSampleResolvers,
26
29
  ...DataItemResolvers,
27
- ...DataSetResolvers
30
+ ...DataSetResolvers,
31
+ ...DataSpecResolvers
28
32
  ]
29
33
  }
@@ -2,18 +2,20 @@
2
2
  "field.appliance": "appliance",
3
3
  "field.collected_at": "collected at",
4
4
  "field.data": "data",
5
- "field.data-set": "data set",
5
+ "field.dataSet": "data set",
6
6
  "field.device-id": "device id",
7
7
  "field.netmask": "network mask",
8
- "field.partition-keys": "partition keys",
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
+ }
@@ -2,18 +2,20 @@
2
2
  "field.appliance": "어플라이언스",
3
3
  "field.collected_at": "수집일시",
4
4
  "field.data": "데이타",
5
- "field.data-set": "데이타셋",
5
+ "field.dataSet": "데이타셋",
6
6
  "field.device-id": "디바이스 아이디",
7
7
  "field.netmask": "네트워크마스크",
8
- "field.partition-keys": "파티션 키",
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
+ }
@@ -2,18 +2,20 @@
2
2
  "field.appliance": "appliance",
3
3
  "field.collected_at": "collected at",
4
4
  "field.data": "data",
5
- "field.data-set": "data set",
5
+ "field.dataSet": "data set",
6
6
  "field.device-id": "device id",
7
7
  "field.netmask": "network mask",
8
- "field.partition-keys": "partition keys",
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
+ }
@@ -2,18 +2,20 @@
2
2
  "field.appliance": "appliance",
3
3
  "field.collected_at": "collected at",
4
4
  "field.data": "data",
5
- "field.data-set": "data set",
5
+ "field.dataSet": "data set",
6
6
  "field.device-id": "device id",
7
7
  "field.netmask": "network mask",
8
- "field.partition-keys": "partition keys",
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
+ }