@things-factory/dataset 5.0.0-alpha.1

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 (79) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +21 -0
  3. package/client/bootstrap.js +3 -0
  4. package/client/index.js +0 -0
  5. package/client/pages/data-item-list.js +280 -0
  6. package/client/pages/data-sample.js +272 -0
  7. package/client/pages/data-set-importer.js +103 -0
  8. package/client/pages/data-set.js +418 -0
  9. package/client/route.js +11 -0
  10. package/dist-server/controllers/index.js +1 -0
  11. package/dist-server/controllers/index.js.map +1 -0
  12. package/dist-server/index.js +21 -0
  13. package/dist-server/index.js.map +1 -0
  14. package/dist-server/middlewares/index.js +8 -0
  15. package/dist-server/middlewares/index.js.map +1 -0
  16. package/dist-server/migrations/index.js +12 -0
  17. package/dist-server/migrations/index.js.map +1 -0
  18. package/dist-server/routes.js +25 -0
  19. package/dist-server/routes.js.map +1 -0
  20. package/dist-server/service/data-item/data-item-mutation.js +69 -0
  21. package/dist-server/service/data-item/data-item-mutation.js.map +1 -0
  22. package/dist-server/service/data-item/data-item-query.js +100 -0
  23. package/dist-server/service/data-item/data-item-query.js.map +1 -0
  24. package/dist-server/service/data-item/data-item-type.js +80 -0
  25. package/dist-server/service/data-item/data-item-type.js.map +1 -0
  26. package/dist-server/service/data-item/data-item.js +136 -0
  27. package/dist-server/service/data-item/data-item.js.map +1 -0
  28. package/dist-server/service/data-item/index.js +9 -0
  29. package/dist-server/service/data-item/index.js.map +1 -0
  30. package/dist-server/service/data-sample/data-sample-mutation.js +142 -0
  31. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -0
  32. package/dist-server/service/data-sample/data-sample-query.js +100 -0
  33. package/dist-server/service/data-sample/data-sample-query.js.map +1 -0
  34. package/dist-server/service/data-sample/data-sample-type.js +82 -0
  35. package/dist-server/service/data-sample/data-sample-type.js.map +1 -0
  36. package/dist-server/service/data-sample/data-sample.js +105 -0
  37. package/dist-server/service/data-sample/data-sample.js.map +1 -0
  38. package/dist-server/service/data-sample/index.js +9 -0
  39. package/dist-server/service/data-sample/index.js.map +1 -0
  40. package/dist-server/service/data-set/data-set-mutation.js +216 -0
  41. package/dist-server/service/data-set/data-set-mutation.js.map +1 -0
  42. package/dist-server/service/data-set/data-set-query.js +102 -0
  43. package/dist-server/service/data-set/data-set-query.js.map +1 -0
  44. package/dist-server/service/data-set/data-set-type.js +89 -0
  45. package/dist-server/service/data-set/data-set-type.js.map +1 -0
  46. package/dist-server/service/data-set/data-set.js +117 -0
  47. package/dist-server/service/data-set/data-set.js.map +1 -0
  48. package/dist-server/service/data-set/index.js +9 -0
  49. package/dist-server/service/data-set/index.js.map +1 -0
  50. package/dist-server/service/index.js +40 -0
  51. package/dist-server/service/index.js.map +1 -0
  52. package/package.json +38 -0
  53. package/server/controllers/index.ts +0 -0
  54. package/server/index.ts +5 -0
  55. package/server/middlewares/index.ts +3 -0
  56. package/server/migrations/index.ts +9 -0
  57. package/server/routes.ts +28 -0
  58. package/server/service/data-item/data-item-mutation.ts +56 -0
  59. package/server/service/data-item/data-item-query.ts +53 -0
  60. package/server/service/data-item/data-item-type.ts +50 -0
  61. package/server/service/data-item/data-item.ts +113 -0
  62. package/server/service/data-item/index.ts +6 -0
  63. package/server/service/data-sample/data-sample-mutation.ts +137 -0
  64. package/server/service/data-sample/data-sample-query.ts +53 -0
  65. package/server/service/data-sample/data-sample-type.ts +50 -0
  66. package/server/service/data-sample/data-sample.ts +84 -0
  67. package/server/service/data-sample/index.ts +6 -0
  68. package/server/service/data-set/data-set-mutation.ts +209 -0
  69. package/server/service/data-set/data-set-query.ts +55 -0
  70. package/server/service/data-set/data-set-type.ts +54 -0
  71. package/server/service/data-set/data-set.ts +96 -0
  72. package/server/service/data-set/index.ts +6 -0
  73. package/server/service/index.ts +25 -0
  74. package/things-factory.config.js +17 -0
  75. package/translations/en.json +8 -0
  76. package/translations/ko.json +8 -0
  77. package/translations/ms.json +8 -0
  78. package/translations/zh.json +8 -0
  79. package/tsconfig.json +9 -0
@@ -0,0 +1,418 @@
1
+ import '@operato/data-grist'
2
+ import './data-item-list'
3
+ import './data-set-importer'
4
+
5
+ import gql from 'graphql-tag'
6
+ import { css, html } from 'lit'
7
+ import moment from 'moment-timezone'
8
+ import { connect } from 'pwa-helpers/connect-mixin'
9
+
10
+ import { client } from '@operato/graphql'
11
+ import { i18next, localize } from '@operato/i18n'
12
+ import { notify, openPopup } from '@operato/layout'
13
+ import { PageView, store } from '@operato/shell'
14
+ import { CommonButtonStyles, ScrollbarStyles } from '@operato/styles'
15
+ import { isMobileDevice } from '@operato/utils'
16
+
17
+ export class DataSet extends connect(store)(localize(i18next)(PageView)) {
18
+ static get properties() {
19
+ return {
20
+ active: String,
21
+ gristConfig: Object
22
+ }
23
+ }
24
+
25
+ static get styles() {
26
+ return [
27
+ ScrollbarStyles,
28
+ css`
29
+ :host {
30
+ display: flex;
31
+ flex-direction: column;
32
+
33
+ overflow: hidden;
34
+ }
35
+
36
+ ox-grist {
37
+ overflow-y: auto;
38
+ flex: 1;
39
+ }
40
+
41
+ #filters {
42
+ display: flex;
43
+ flex-direction: row;
44
+ justify-content: space-between;
45
+
46
+ background-color: white;
47
+ }
48
+
49
+ #filters > * {
50
+ padding: var(--padding-default) var(--padding-wide);
51
+ }
52
+ `
53
+ ]
54
+ }
55
+
56
+ get context() {
57
+ return {
58
+ title: i18next.t('title.data-set list'),
59
+ help: 'integration/ui/data-set',
60
+ actions: [
61
+ {
62
+ title: i18next.t('button.copy'),
63
+ action: this._copyDataSet.bind(this),
64
+ ...CommonButtonStyles.copy
65
+ },
66
+ {
67
+ title: i18next.t('button.save'),
68
+ action: this._updateDataSet.bind(this),
69
+ ...CommonButtonStyles.save
70
+ },
71
+ {
72
+ title: i18next.t('button.delete'),
73
+ action: this._deleteDataSet.bind(this),
74
+ ...CommonButtonStyles.delete
75
+ }
76
+ ],
77
+ exportable: {
78
+ name: i18next.t('title.data-set list'),
79
+ data: this.exportHandler.bind(this)
80
+ },
81
+ importable: {
82
+ handler: this.importHandler.bind(this)
83
+ }
84
+ }
85
+ }
86
+
87
+ render() {
88
+ return html`
89
+ <ox-grist
90
+ .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
91
+ .config=${this.gristConfig}
92
+ .fetchHandler=${this.fetchHandler.bind(this)}
93
+ >
94
+ <div slot="headroom" id="filters">
95
+ <ox-filters-form></ox-filters-form>
96
+ </div>
97
+ </ox-grist>
98
+ `
99
+ }
100
+
101
+ get grist() {
102
+ return this.renderRoot.querySelector('ox-grist')
103
+ }
104
+
105
+ // update with url params value
106
+ _updateSearchConfig(lifecycle) {
107
+ // this.searchConfig = this.searchConfig.map(conf => {
108
+ // if (conf.name in lifecycle.params) {
109
+ // conf.value = lifecycle.params[conf.name]
110
+ // } else {
111
+ // delete conf.value
112
+ // }
113
+ // return conf
114
+ // })
115
+ }
116
+
117
+ // set default field value to record with searchConfig
118
+ _setDefaultFieldsValue(fields) {
119
+ // this.searchConfig.forEach(conf => {
120
+ // if (!fields[conf.name] && conf.value) {
121
+ // fields[conf.name] = conf.value
122
+ // }
123
+ // })
124
+ }
125
+
126
+ async pageInitialized(lifecycle) {
127
+ this._updateSearchConfig(lifecycle)
128
+
129
+ this.gristConfig = {
130
+ list: { fields: ['name', 'description', 'schedule', 'active'] },
131
+ columns: [
132
+ { type: 'gutter', gutterName: 'sequence' },
133
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
134
+ {
135
+ type: 'gutter',
136
+ gutterName: 'button',
137
+ icon: 'reorder',
138
+ handlers: {
139
+ click: (columns, data, column, record, rowIndex) => {
140
+ if (!record.id) return
141
+ openPopup(html` <data-item-list .dataSet=${record}></data-item-list> `, {
142
+ backdrop: true,
143
+ help: 'data-set/ui/data-item-list',
144
+ size: 'large',
145
+ title: i18next.t('title.data-item list')
146
+ })
147
+ }
148
+ }
149
+ },
150
+ {
151
+ type: 'string',
152
+ name: 'name',
153
+ label: true,
154
+ header: i18next.t('field.name'),
155
+ record: {
156
+ editable: true
157
+ },
158
+ filter: 'search',
159
+ sortable: true,
160
+ width: 150
161
+ },
162
+ {
163
+ type: 'string',
164
+ name: 'description',
165
+ label: true,
166
+ header: i18next.t('field.description'),
167
+ record: {
168
+ editable: true
169
+ },
170
+ filter: 'search',
171
+ width: 200
172
+ },
173
+ {
174
+ type: 'checkbox',
175
+ name: 'active',
176
+ label: true,
177
+ header: i18next.t('field.active'),
178
+ record: {
179
+ editable: true
180
+ },
181
+ sortable: true,
182
+ width: 60
183
+ },
184
+ {
185
+ type: 'crontab',
186
+ name: 'schedule',
187
+ label: true,
188
+ header: i18next.t('field.schedule'),
189
+ record: {
190
+ editable: true
191
+ },
192
+ width: 80,
193
+ label: true
194
+ },
195
+ {
196
+ type: 'select',
197
+ name: 'timezone',
198
+ header: i18next.t('field.timezone'),
199
+ record: {
200
+ editable: true,
201
+ options: ['', ...moment.tz.names()]
202
+ },
203
+ width: 120
204
+ },
205
+ {
206
+ type: 'object',
207
+ name: 'updater',
208
+ header: i18next.t('field.updater'),
209
+ record: {
210
+ editable: false
211
+ },
212
+ sortable: true,
213
+ width: 120
214
+ },
215
+ {
216
+ type: 'datetime',
217
+ name: 'updatedAt',
218
+ header: i18next.t('field.updated_at'),
219
+ record: {
220
+ editable: false
221
+ },
222
+ sortable: true,
223
+ width: 180
224
+ }
225
+ ],
226
+ rows: {
227
+ selectable: {
228
+ multiple: true
229
+ }
230
+ },
231
+ sorters: [
232
+ {
233
+ name: 'name'
234
+ }
235
+ ]
236
+ }
237
+
238
+ await this.updateComplete
239
+
240
+ this.grist.fetch()
241
+ }
242
+
243
+ async pageUpdated(changes, lifecycle) {
244
+ if (this.active) {
245
+ // update with url params value
246
+ this._updateSearchConfig(lifecycle)
247
+ await this.updateComplete
248
+
249
+ this.grist.fetch()
250
+ }
251
+ }
252
+
253
+ async fetchHandler({ page, limit, sortings = [], filters = [] }) {
254
+ const response = await client.query({
255
+ query: gql`
256
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
257
+ responses: dataSets(filters: $filters, pagination: $pagination, sortings: $sortings) {
258
+ items {
259
+ id
260
+ name
261
+ description
262
+ active
263
+ schedule
264
+ timezone
265
+ updater {
266
+ id
267
+ name
268
+ }
269
+ updatedAt
270
+ dataItems {
271
+ name
272
+ description
273
+ sequence
274
+ active
275
+ type
276
+ quota
277
+ spec
278
+ }
279
+ }
280
+ total
281
+ }
282
+ }
283
+ `,
284
+ variables: {
285
+ filters,
286
+ pagination: { page, limit },
287
+ sortings
288
+ }
289
+ })
290
+
291
+ return {
292
+ total: response.data.responses.total || 0,
293
+ records: response.data.responses.items || []
294
+ }
295
+ }
296
+
297
+ async _deleteDataSet() {
298
+ if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
299
+ const ids = this.grist.selected.map(record => record.id)
300
+ if (ids && ids.length > 0) {
301
+ const response = await client.mutate({
302
+ mutation: gql`
303
+ mutation ($ids: [String!]!) {
304
+ deleteDataSets(ids: $ids)
305
+ }
306
+ `,
307
+ variables: {
308
+ ids
309
+ }
310
+ })
311
+
312
+ if (!response.errors) {
313
+ this.grist.fetch()
314
+ notify({
315
+ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
316
+ })
317
+ }
318
+ }
319
+ }
320
+ }
321
+
322
+ async stateChanged(state) {
323
+ if (this.active && this._currentPopupName && !state.layout.viewparts[this._currentPopupName]) {
324
+ this.grist.fetch()
325
+ this._currentPopupName = null
326
+ }
327
+ }
328
+
329
+ async _copyDataSet() {
330
+ var selected = this.grist.selected
331
+ if (selected.length == 0) return
332
+
333
+ if (!confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.copy') }))) return
334
+ var response = await client.mutate({
335
+ mutation: gql`
336
+ mutation ($ids: [String!]!) {
337
+ copyDataSets(ids: $ids) {
338
+ id
339
+ }
340
+ }
341
+ `,
342
+ variables: {
343
+ ids: selected.map(r => r.id)
344
+ }
345
+ })
346
+
347
+ if (!response.errors) this.grist.fetch()
348
+ }
349
+
350
+ async _updateDataSet() {
351
+ let patches = this.grist.dirtyRecords
352
+ if (patches && patches.length) {
353
+ patches = patches.map(patch => {
354
+ let patchField = patch.id ? { id: patch.id } : {}
355
+ const dirtyFields = patch.__dirtyfields__
356
+ for (let key in dirtyFields) {
357
+ if (['message', 'step', 'steps', 'progress', 'rounds'].indexOf(key) == -1) {
358
+ patchField[key] = dirtyFields[key].after
359
+ }
360
+ }
361
+ this._setDefaultFieldsValue(patchField)
362
+ patchField.cuFlag = patch.__dirty__
363
+
364
+ return patchField
365
+ })
366
+
367
+ const response = await client.mutate({
368
+ mutation: gql`
369
+ mutation ($patches: [DataSetPatch!]!) {
370
+ updateMultipleDataSet(patches: $patches) {
371
+ name
372
+ }
373
+ }
374
+ `,
375
+ variables: {
376
+ patches
377
+ }
378
+ })
379
+
380
+ if (!response.errors) this.grist.fetch()
381
+ }
382
+ }
383
+
384
+ async exportHandler() {
385
+ const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
386
+ const targetFieldSet = new Set(['id', 'name', 'type', 'description', 'schedule', 'timezone', 'active', 'dataItems'])
387
+
388
+ return exportTargets.map(dataSet => {
389
+ let tempObj = {}
390
+ for (const field of targetFieldSet) {
391
+ tempObj[field] = dataSet[field]
392
+ }
393
+
394
+ return tempObj
395
+ })
396
+ }
397
+
398
+ async importHandler(records) {
399
+ openPopup(
400
+ html`
401
+ <data-set-importer
402
+ .dataSets="${records}"
403
+ @imported="${() => {
404
+ history.back()
405
+ this.grist.fetch()
406
+ }}"
407
+ ></data-set-importer>
408
+ `,
409
+ {
410
+ backdrop: true,
411
+ size: 'large',
412
+ title: i18next.t('title.import data-set')
413
+ }
414
+ )
415
+ }
416
+ }
417
+
418
+ window.customElements.define('data-set-page', DataSet)
@@ -0,0 +1,11 @@
1
+ export default function route(page) {
2
+ switch (page) {
3
+ case 'data-set':
4
+ import('./pages/data-set')
5
+ return page
6
+
7
+ case 'data-sample':
8
+ import('./pages/data-sample')
9
+ return page
10
+ }
11
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/controllers/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ require("./routes");
18
+ __exportStar(require("./migrations"), exports);
19
+ __exportStar(require("./middlewares"), exports);
20
+ __exportStar(require("./service"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oBAAiB;AAEjB,+CAA4B;AAC5B,gDAA6B;AAC7B,4CAAyB"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initMiddlewares = void 0;
4
+ function initMiddlewares(app) {
5
+ /* can add middlewares into app */
6
+ }
7
+ exports.initMiddlewares = initMiddlewares;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/middlewares/index.ts"],"names":[],"mappings":";;;AAAA,SAAgB,eAAe,CAAC,GAAG;IACjC,kCAAkC;AACpC,CAAC;AAFD,0CAEC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.migrations = void 0;
4
+ const glob = require('glob');
5
+ const path = require('path');
6
+ exports.migrations = [];
7
+ glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function (file) {
8
+ if (file.indexOf('index.js') !== -1)
9
+ return;
10
+ exports.migrations = exports.migrations.concat(Object.values(require(path.resolve(file))) || []);
11
+ });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/migrations/index.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjB,QAAA,UAAU,GAAG,EAAE,CAAA;AAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI;IACzE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAE,OAAM;IAC3C,kBAAU,GAAG,kBAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAClF,CAAC,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ const debug = require('debug')('things-factory:dataset:routes');
2
+ process.on('bootstrap-module-global-public-route', (app, globalPublicRouter) => {
3
+ /*
4
+ * can add global public routes to application (auth not required, tenancy not required)
5
+ *
6
+ * ex) routes.get('/path', async(context, next) => {})
7
+ * ex) routes.post('/path', async(context, next) => {})
8
+ */
9
+ });
10
+ process.on('bootstrap-module-global-private-route', (app, globalPrivateRouter) => {
11
+ /*
12
+ * can add global private routes to application (auth required, tenancy not required)
13
+ */
14
+ });
15
+ process.on('bootstrap-module-domain-public-route', (app, domainPublicRouter) => {
16
+ /*
17
+ * can add domain public routes to application (auth not required, tenancy required)
18
+ */
19
+ });
20
+ process.on('bootstrap-module-domain-private-route', (app, domainPrivateRouter) => {
21
+ /*
22
+ * can add domain private routes to application (auth required, tenancy required)
23
+ */
24
+ });
25
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAA;AAE/D,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF;;;;;OAKG;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF;;OAEG;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF;;OAEG;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF;;OAEG;AACL,CAAC,CAAC,CAAA"}
@@ -0,0 +1,69 @@
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.DataItemMutation = void 0;
16
+ const type_graphql_1 = require("type-graphql");
17
+ const typeorm_1 = require("typeorm");
18
+ const data_set_1 = require("../data-set/data-set");
19
+ const data_item_1 = require("./data-item");
20
+ const data_item_type_1 = require("./data-item-type");
21
+ let DataItemMutation = class DataItemMutation {
22
+ async updateMultipleDataItem(dataSetId, patches, context) {
23
+ const { domain, user, tx } = context.state;
24
+ let results = [];
25
+ const dataItemRepo = tx.getRepository(data_item_1.DataItem);
26
+ const dataSet = await tx.getRepository(data_set_1.DataSet).findOne(dataSetId);
27
+ await dataItemRepo.delete({ domain, dataSet: dataSetId });
28
+ for (let i = 0; i < patches.length; i++) {
29
+ const result = await dataItemRepo.save(Object.assign(Object.assign({ quota: 1 }, patches[i]), { sequence: i, dataSet,
30
+ domain, creator: user, updater: user }));
31
+ results.push(Object.assign(Object.assign({}, result), { cuFlag: '+' }));
32
+ }
33
+ return results;
34
+ }
35
+ async deleteDataItems(ids, context) {
36
+ const { domain, tx } = context.state;
37
+ await tx.getRepository(data_item_1.DataItem).delete({
38
+ domain,
39
+ id: (0, typeorm_1.In)(ids)
40
+ });
41
+ return true;
42
+ }
43
+ };
44
+ __decorate([
45
+ (0, type_graphql_1.Directive)('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)'),
46
+ (0, type_graphql_1.Directive)('@transaction'),
47
+ (0, type_graphql_1.Mutation)(returns => [data_item_1.DataItem], { description: "To modify multiple DataItems' information" }),
48
+ __param(0, (0, type_graphql_1.Arg)('dataSetId')),
49
+ __param(1, (0, type_graphql_1.Arg)('patches', type => [data_item_type_1.DataItemPatch])),
50
+ __param(2, (0, type_graphql_1.Ctx)()),
51
+ __metadata("design:type", Function),
52
+ __metadata("design:paramtypes", [String, Array, Object]),
53
+ __metadata("design:returntype", Promise)
54
+ ], DataItemMutation.prototype, "updateMultipleDataItem", null);
55
+ __decorate([
56
+ (0, type_graphql_1.Directive)('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)'),
57
+ (0, type_graphql_1.Directive)('@transaction'),
58
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete multiple dataItems' }),
59
+ __param(0, (0, type_graphql_1.Arg)('ids', type => [String])),
60
+ __param(1, (0, type_graphql_1.Ctx)()),
61
+ __metadata("design:type", Function),
62
+ __metadata("design:paramtypes", [Array, Object]),
63
+ __metadata("design:returntype", Promise)
64
+ ], DataItemMutation.prototype, "deleteDataItems", null);
65
+ DataItemMutation = __decorate([
66
+ (0, type_graphql_1.Resolver)(data_item_1.DataItem)
67
+ ], DataItemMutation);
68
+ exports.DataItemMutation = DataItemMutation;
69
+ //# sourceMappingURL=data-item-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-item-mutation.js","sourceRoot":"","sources":["../../../server/service/data-item/data-item-mutation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+CAAsE;AACtE,qCAA4B;AAE5B,mDAA8C;AAC9C,2CAAsC;AACtC,qDAAgD;AAGhD,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAI3B,KAAK,CAAC,sBAAsB,CACR,SAAiB,EACM,OAAwB,EAC1D,OAAY;QAEnB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,MAAM,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,oBAAQ,CAAC,CAAA;QAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,kBAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAElE,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;QAEzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,+BACpC,KAAK,EAAE,CAAC,IACL,OAAO,CAAC,CAAC,CAAC,KACb,QAAQ,EAAE,CAAC,EACX,OAAO;gBACP,MAAM,EACN,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,IACb,CAAA;YAEF,OAAO,CAAC,IAAI,iCAAM,MAAM,KAAE,MAAM,EAAE,GAAG,IAAG,CAAA;SACzC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAKD,KAAK,CAAC,eAAe,CAA+B,GAAa,EAAS,OAAY;QACpF,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,EAAE,CAAC,aAAa,CAAC,oBAAQ,CAAC,CAAC,MAAM,CAAC;YACtC,MAAM;YACN,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AA3CC;IAHC,IAAA,wBAAS,EAAC,mFAAmF,CAAC;IAC9F,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,oBAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC;IAE3F,WAAA,IAAA,kBAAG,EAAC,WAAW,CAAC,CAAA;IAChB,WAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,8BAAa,CAAC,CAAC,CAAA;IACvC,WAAA,IAAA,kBAAG,GAAE,CAAA;;;;8DAyBP;AAKD;IAHC,IAAA,wBAAS,EAAC,mFAAmF,CAAC;IAC9F,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC;IACvD,WAAA,IAAA,kBAAG,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAAiB,WAAA,IAAA,kBAAG,GAAE,CAAA;;;;uDASxE;AA9CU,gBAAgB;IAD5B,IAAA,uBAAQ,EAAC,oBAAQ,CAAC;GACN,gBAAgB,CA+C5B;AA/CY,4CAAgB"}