@things-factory/dataset 8.0.0 → 9.0.0-beta.3
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/dist-client/activities/activity-data-review-edit.d.ts +5 -1
- package/dist-client/activities/activity-data-review-edit.js +143 -5
- package/dist-client/activities/activity-data-review-edit.js.map +1 -1
- package/dist-client/pages/data-entry/data-entry-list-page.js +2 -2
- package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/activities/activity-data-review.js +18 -5
- package/dist-server/activities/activity-data-review.js.map +1 -1
- package/dist-server/activities/activity-ooc-review.js +13 -52
- package/dist-server/activities/activity-ooc-review.js.map +1 -1
- package/dist-server/controllers/create-data-ooc.d.ts +4 -0
- package/dist-server/controllers/create-data-ooc.js +65 -0
- package/dist-server/controllers/create-data-ooc.js.map +1 -0
- package/dist-server/controllers/create-data-sample.js +4 -94
- package/dist-server/controllers/create-data-sample.js.map +1 -1
- package/dist-server/controllers/index.d.ts +3 -0
- package/dist-server/controllers/index.js +3 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/issue-ooc-resolve.d.ts +3 -0
- package/dist-server/controllers/issue-ooc-resolve.js +49 -0
- package/dist-server/controllers/issue-ooc-resolve.js.map +1 -0
- package/dist-server/controllers/issue-ooc-review.d.ts +3 -0
- package/dist-server/controllers/issue-ooc-review.js +47 -0
- package/dist-server/controllers/issue-ooc-review.js.map +1 -0
- package/dist-server/service/data-sample/data-sample-query.d.ts +1 -1
- package/dist-server/service/data-sample/data-sample-query.js +3 -3
- package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +26 -26
- package/translations/en.json +3 -0
- package/translations/ja.json +3 -0
- package/translations/ko.json +3 -0
- package/translations/ms.json +3 -0
- package/translations/zh.json +3 -0
- package/client/activities/activity-data-collect-edit.ts +0 -105
- package/client/activities/activity-data-collect-view.ts +0 -91
- package/client/activities/activity-data-review-edit.ts +0 -133
- package/client/activities/activity-data-review-view.ts +0 -145
- package/client/activities/activity-ooc-resolve-edit.ts +0 -195
- package/client/activities/activity-ooc-resolve-view.ts +0 -143
- package/client/activities/activity-ooc-review-edit.ts +0 -173
- package/client/activities/activity-ooc-review-view.ts +0 -129
- package/client/bootstrap.ts +0 -35
- package/client/components/data-entry-form.ts +0 -109
- package/client/index.ts +0 -1
- package/client/pages/data-archive/data-archive-list-page.ts +0 -277
- package/client/pages/data-archive/data-archive-request-popup.ts +0 -177
- package/client/pages/data-entry/data-entry-list-page.ts +0 -464
- package/client/pages/data-key-set/data-key-item-list.ts +0 -183
- package/client/pages/data-key-set/data-key-set-importer.ts +0 -89
- package/client/pages/data-key-set/data-key-set-list-page.ts +0 -413
- package/client/pages/data-ooc/data-ooc-list-page.ts +0 -549
- package/client/pages/data-ooc/data-ooc-page.ts +0 -164
- package/client/pages/data-ooc/data-ooc-view.ts +0 -236
- package/client/pages/data-ooc/data-oocs-page.ts +0 -200
- package/client/pages/data-report/data-report-embed-page.ts +0 -108
- package/client/pages/data-report/data-report-list-page.ts +0 -454
- package/client/pages/data-report/data-report-samples-page.ts +0 -174
- package/client/pages/data-report/jasper-report-oocs-page.ts +0 -110
- package/client/pages/data-report/jasper-report-samples-crosstab-page.ts +0 -110
- package/client/pages/data-report/jasper-report-samples-page.ts +0 -110
- package/client/pages/data-sample/data-sample-list-page.ts +0 -442
- package/client/pages/data-sample/data-sample-page.ts +0 -55
- package/client/pages/data-sample/data-sample-search-page.ts +0 -424
- package/client/pages/data-sample/data-sample-view.ts +0 -292
- package/client/pages/data-sample/data-samples-page.ts +0 -249
- package/client/pages/data-sensor/data-sensor-list-page.ts +0 -456
- package/client/pages/data-set/data-item-list.ts +0 -304
- package/client/pages/data-set/data-set-importer.ts +0 -89
- package/client/pages/data-set/data-set-list-page.ts +0 -1078
- package/client/pages/data-summary/data-summary-list-page.ts +0 -363
- package/client/pages/data-summary/data-summary-period-page.ts +0 -439
- package/client/pages/data-summary/data-summary-search-page.ts +0 -426
- package/client/pages/data-summary/data-summary-view.ts +0 -133
- package/client/route.ts +0 -91
- package/client/tsconfig.json +0 -13
- package/server/activities/activity-data-collect.ts +0 -100
- package/server/activities/activity-data-review.ts +0 -82
- package/server/activities/activity-ooc-resolve.ts +0 -123
- package/server/activities/activity-ooc-review.ts +0 -144
- package/server/activities/index.ts +0 -11
- package/server/controllers/create-data-sample.ts +0 -426
- package/server/controllers/data-use-case.ts +0 -98
- package/server/controllers/finalize-data-collection.ts +0 -388
- package/server/controllers/index.ts +0 -3
- package/server/controllers/issue-data-collection-task.ts +0 -70
- package/server/controllers/jasper-report.ts +0 -186
- package/server/controllers/query-data-summary-by-period.ts +0 -178
- package/server/controllers/shiny-report.ts +0 -54
- package/server/engine/index.ts +0 -1
- package/server/engine/task/create-data-sample.ts +0 -100
- package/server/engine/task/index.ts +0 -2
- package/server/engine/task/issue-collect-data.ts +0 -45
- package/server/index.ts +0 -8
- package/server/routes.ts +0 -188
- package/server/service/data-archive/data-archive-mutation.ts +0 -273
- package/server/service/data-archive/data-archive-query.ts +0 -58
- package/server/service/data-archive/data-archive-type.ts +0 -48
- package/server/service/data-archive/data-archive.ts +0 -69
- package/server/service/data-archive/index.ts +0 -6
- package/server/service/data-key-set/data-key-item-type.ts +0 -31
- package/server/service/data-key-set/data-key-set-mutation.ts +0 -201
- package/server/service/data-key-set/data-key-set-query.ts +0 -68
- package/server/service/data-key-set/data-key-set-type.ts +0 -70
- package/server/service/data-key-set/data-key-set.ts +0 -86
- package/server/service/data-key-set/index.ts +0 -6
- package/server/service/data-ooc/data-ooc-mutation.ts +0 -154
- package/server/service/data-ooc/data-ooc-query.ts +0 -106
- package/server/service/data-ooc/data-ooc-subscription.ts +0 -48
- package/server/service/data-ooc/data-ooc-type.ts +0 -71
- package/server/service/data-ooc/data-ooc.ts +0 -259
- package/server/service/data-ooc/index.ts +0 -7
- package/server/service/data-sample/data-sample-mutation.ts +0 -18
- package/server/service/data-sample/data-sample-query.ts +0 -215
- package/server/service/data-sample/data-sample-type.ts +0 -47
- package/server/service/data-sample/data-sample.ts +0 -193
- package/server/service/data-sample/index.ts +0 -6
- package/server/service/data-sensor/data-sensor-mutation.ts +0 -116
- package/server/service/data-sensor/data-sensor-query.ts +0 -76
- package/server/service/data-sensor/data-sensor-type.ts +0 -104
- package/server/service/data-sensor/data-sensor.ts +0 -126
- package/server/service/data-sensor/index.ts +0 -6
- package/server/service/data-set/data-item-type.ts +0 -155
- package/server/service/data-set/data-set-mutation.ts +0 -552
- package/server/service/data-set/data-set-query.ts +0 -461
- package/server/service/data-set/data-set-type.ts +0 -204
- package/server/service/data-set/data-set.ts +0 -326
- package/server/service/data-set/index.ts +0 -6
- package/server/service/data-set-history/data-set-history-query.ts +0 -126
- package/server/service/data-set-history/data-set-history-type.ts +0 -12
- package/server/service/data-set-history/data-set-history.ts +0 -217
- package/server/service/data-set-history/event-subscriber.ts +0 -17
- package/server/service/data-set-history/index.ts +0 -7
- package/server/service/data-spec/data-spec-manager.ts +0 -21
- package/server/service/data-spec/data-spec-query.ts +0 -21
- package/server/service/data-spec/data-spec.ts +0 -45
- package/server/service/data-spec/index.ts +0 -5
- package/server/service/data-summary/data-summary-mutation.ts +0 -45
- package/server/service/data-summary/data-summary-query.ts +0 -179
- package/server/service/data-summary/data-summary-type.ts +0 -86
- package/server/service/data-summary/data-summary.ts +0 -170
- package/server/service/data-summary/index.ts +0 -7
- package/server/service/index.ts +0 -57
- package/server/tsconfig.json +0 -10
- package/server/utils/config-resolver.ts +0 -29
- package/server/utils/index.ts +0 -1
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import i18next from 'i18next'
|
|
2
|
-
import fetch from 'node-fetch'
|
|
3
|
-
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
|
4
|
-
import { In } from 'typeorm'
|
|
5
|
-
|
|
6
|
-
import { getEndpointUrl } from '../../utils/config-resolver'
|
|
7
|
-
import { DataArchive } from './data-archive'
|
|
8
|
-
import { DataArchivePatch, NewDataArchive } from './data-archive-type'
|
|
9
|
-
|
|
10
|
-
const { config } = require('@things-factory/env')
|
|
11
|
-
const crypto = require('crypto')
|
|
12
|
-
|
|
13
|
-
@Resolver(DataArchive)
|
|
14
|
-
export class DataArchiveMutation {
|
|
15
|
-
/**
|
|
16
|
-
* It may use 'func-[dev]-data-set-download' in https://github.com/operatochef/serverless
|
|
17
|
-
* This function requests athena query and save the result as csv.gz in s3
|
|
18
|
-
*/
|
|
19
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
20
|
-
@Directive('@transaction')
|
|
21
|
-
@Mutation(returns => DataArchive, { description: 'To create new DataArchive' })
|
|
22
|
-
async generatePresignedUrl(
|
|
23
|
-
@Arg('patch') patch: DataArchivePatch,
|
|
24
|
-
@Ctx() context: ResolverContext
|
|
25
|
-
): Promise<DataArchive> {
|
|
26
|
-
const { domain, user, tx, notify, lng } = context.state
|
|
27
|
-
// const dataArchiveRepo = tx.getRepository(DataArchive)
|
|
28
|
-
const t = i18next.getFixedT(lng, 'translations')
|
|
29
|
-
const {
|
|
30
|
-
dataset: {
|
|
31
|
-
endpoint,
|
|
32
|
-
datasource: { database }
|
|
33
|
-
}
|
|
34
|
-
} = config.get('dataArchive')
|
|
35
|
-
|
|
36
|
-
const body = JSON.stringify({
|
|
37
|
-
domain: domain?.subdomain,
|
|
38
|
-
database,
|
|
39
|
-
...patch?.requestParams
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
const url = getEndpointUrl(endpoint)
|
|
43
|
-
|
|
44
|
-
const fetched = await fetch(`${url}`, {
|
|
45
|
-
method: 'POST',
|
|
46
|
-
headers: { 'Content-Type': 'application/json' },
|
|
47
|
-
body
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
const message = {
|
|
51
|
-
receivers: [user.email],
|
|
52
|
-
mode: 'in-app',
|
|
53
|
-
title: '',
|
|
54
|
-
body: '',
|
|
55
|
-
url: ''
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (fetched.ok) {
|
|
59
|
-
const response = await fetched.json()
|
|
60
|
-
patch.downloadUrl = response['presignedUrl']
|
|
61
|
-
patch.status = 'done'
|
|
62
|
-
|
|
63
|
-
message['title'] = t('title.data-archive downloads ready')
|
|
64
|
-
message['url'] = patch.downloadUrl
|
|
65
|
-
} else {
|
|
66
|
-
const error = await fetched.text()
|
|
67
|
-
console.log(error)
|
|
68
|
-
patch.status = 'error'
|
|
69
|
-
|
|
70
|
-
message['title'] = t('title.data-archive request failed')
|
|
71
|
-
// may not user-friendly message
|
|
72
|
-
message['body'] = error
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const result = await this.updateDataArchive(patch.id, patch, context)
|
|
76
|
-
|
|
77
|
-
notify && notify(message)
|
|
78
|
-
|
|
79
|
-
return result
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
83
|
-
@Directive('@transaction')
|
|
84
|
-
@Mutation(returns => DataArchive, { description: 'To create new DataArchive' })
|
|
85
|
-
async createDataArchive(
|
|
86
|
-
@Arg('dataArchive') dataArchive: NewDataArchive,
|
|
87
|
-
@Ctx() context: ResolverContext
|
|
88
|
-
): Promise<DataArchive> {
|
|
89
|
-
const { domain, user, tx } = context.state
|
|
90
|
-
const dataArchiveRepo = tx.getRepository(DataArchive)
|
|
91
|
-
|
|
92
|
-
const result = await dataArchiveRepo.save({
|
|
93
|
-
...dataArchive,
|
|
94
|
-
domain,
|
|
95
|
-
creator: user,
|
|
96
|
-
updater: user
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
return result
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
103
|
-
@Directive('@transaction')
|
|
104
|
-
@Mutation(returns => DataArchive, { description: 'To modify DataArchive information' })
|
|
105
|
-
async updateDataArchive(
|
|
106
|
-
@Arg('id') id: string,
|
|
107
|
-
@Arg('patch') patch: DataArchivePatch,
|
|
108
|
-
@Ctx() context: ResolverContext
|
|
109
|
-
): Promise<DataArchive> {
|
|
110
|
-
const { domain, user, tx } = context.state
|
|
111
|
-
const dataArchiveRepo = tx.getRepository(DataArchive)
|
|
112
|
-
|
|
113
|
-
const dataArchive = await dataArchiveRepo.findOne({
|
|
114
|
-
where: { domain: { id: domain.id }, id },
|
|
115
|
-
relations: ['domain', 'creator', 'updater']
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
const result = await dataArchiveRepo.save({
|
|
119
|
-
...dataArchive,
|
|
120
|
-
...patch,
|
|
121
|
-
updater: user
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
return result
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
128
|
-
@Directive('@transaction')
|
|
129
|
-
@Mutation(returns => [DataArchive], { description: "To modify multiple DataArchives' information" })
|
|
130
|
-
async updateMultipleDataArchive(
|
|
131
|
-
@Arg('patches', type => [DataArchivePatch]) patches: DataArchivePatch[],
|
|
132
|
-
@Ctx() context: any
|
|
133
|
-
): Promise<DataArchive[]> {
|
|
134
|
-
const { domain, user, tx } = context.state
|
|
135
|
-
const dataArchiveRepo = tx.getRepository(DataArchive)
|
|
136
|
-
|
|
137
|
-
let results = []
|
|
138
|
-
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
139
|
-
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
140
|
-
|
|
141
|
-
if (_createRecords.length > 0) {
|
|
142
|
-
const cuFlag = '+'
|
|
143
|
-
for (let i = 0; i < _createRecords.length; i++) {
|
|
144
|
-
const newRecord = _createRecords[i]
|
|
145
|
-
|
|
146
|
-
const result = await dataArchiveRepo.save({
|
|
147
|
-
...newRecord,
|
|
148
|
-
domain,
|
|
149
|
-
creator: user,
|
|
150
|
-
updater: user
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
results.push({
|
|
154
|
-
...result,
|
|
155
|
-
cuFlag
|
|
156
|
-
})
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (_updateRecords.length > 0) {
|
|
161
|
-
const cuFlag = 'M'
|
|
162
|
-
for (let i = 0; i < _updateRecords.length; i++) {
|
|
163
|
-
const newRecord = _updateRecords[i]
|
|
164
|
-
const dataArchive = await dataArchiveRepo.findOne(newRecord.id, {
|
|
165
|
-
relations: ['domain', 'creator', 'updater']
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
const result = await dataArchiveRepo.save({
|
|
169
|
-
...dataArchive,
|
|
170
|
-
...newRecord,
|
|
171
|
-
updater: user
|
|
172
|
-
})
|
|
173
|
-
|
|
174
|
-
results.push({
|
|
175
|
-
...result,
|
|
176
|
-
cuFlag
|
|
177
|
-
})
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return results
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
185
|
-
@Directive('@transaction')
|
|
186
|
-
@Mutation(returns => Boolean, { description: 'To delete DataArchive' })
|
|
187
|
-
async deleteDataArchive(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
|
188
|
-
const { domain, tx } = context.state
|
|
189
|
-
|
|
190
|
-
await tx.getRepository(DataArchive).delete({ domain: { id: domain.id }, id })
|
|
191
|
-
return true
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
195
|
-
@Directive('@transaction')
|
|
196
|
-
@Mutation(returns => Boolean, { description: 'To delete multiple dataArchives' })
|
|
197
|
-
async deleteDataArchives(
|
|
198
|
-
@Arg('ids', type => [String]) ids: string[],
|
|
199
|
-
@Ctx() context: ResolverContext
|
|
200
|
-
): Promise<boolean> {
|
|
201
|
-
const { domain, tx } = context.state
|
|
202
|
-
|
|
203
|
-
await tx.getRepository(DataArchive).delete({
|
|
204
|
-
domain: { id: domain.id },
|
|
205
|
-
id: In(ids)
|
|
206
|
-
})
|
|
207
|
-
|
|
208
|
-
return true
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
212
|
-
@Directive('@transaction')
|
|
213
|
-
@Mutation(returns => Boolean, { description: 'To import multiple data-archives' })
|
|
214
|
-
async importDataArchives(
|
|
215
|
-
@Arg('dataArchives', type => [DataArchivePatch]) dataArchives: DataArchive[],
|
|
216
|
-
@Ctx() context: ResolverContext
|
|
217
|
-
): Promise<boolean> {
|
|
218
|
-
const { domain, tx } = context.state
|
|
219
|
-
const dataArchiveRepo = tx.getRepository(DataArchive)
|
|
220
|
-
|
|
221
|
-
await Promise.all(
|
|
222
|
-
dataArchives.map(async (dataArchive: DataArchive) => {
|
|
223
|
-
const createdDataArchive: DataArchive = await dataArchiveRepo.save({
|
|
224
|
-
domain,
|
|
225
|
-
...dataArchive
|
|
226
|
-
})
|
|
227
|
-
})
|
|
228
|
-
)
|
|
229
|
-
|
|
230
|
-
return true
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
@Directive('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)')
|
|
234
|
-
@Directive('@transaction')
|
|
235
|
-
@Mutation(returns => [DataArchive], { description: 'To copy multiple data-archives' })
|
|
236
|
-
async copyDataArchives(
|
|
237
|
-
@Arg('ids', type => [String]) ids: string[],
|
|
238
|
-
@Ctx() context: ResolverContext
|
|
239
|
-
): Promise<DataArchive[]> {
|
|
240
|
-
const { domain, user, tx } = context.state
|
|
241
|
-
const dataArchiveRepo = tx.getRepository(DataArchive)
|
|
242
|
-
|
|
243
|
-
const originals = await dataArchiveRepo.find({
|
|
244
|
-
where: {
|
|
245
|
-
id: In(ids),
|
|
246
|
-
domain: { id: domain.id }
|
|
247
|
-
},
|
|
248
|
-
relations: ['domain']
|
|
249
|
-
})
|
|
250
|
-
|
|
251
|
-
if (originals.length == 0) {
|
|
252
|
-
return []
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
var newCopys = originals.map(dataArchive => {
|
|
256
|
-
let dataArchiveId = crypto.randomUUID()
|
|
257
|
-
|
|
258
|
-
return {
|
|
259
|
-
...dataArchive,
|
|
260
|
-
id: dataArchiveId,
|
|
261
|
-
domain,
|
|
262
|
-
creator: user,
|
|
263
|
-
updater: user,
|
|
264
|
-
updatedAt: undefined,
|
|
265
|
-
createdAt: undefined
|
|
266
|
-
}
|
|
267
|
-
})
|
|
268
|
-
|
|
269
|
-
var copiedDataArchives = await dataArchiveRepo.save(newCopys)
|
|
270
|
-
|
|
271
|
-
return copiedDataArchives
|
|
272
|
-
}
|
|
273
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
-
|
|
3
|
-
import { Role, User } from '@things-factory/auth-base'
|
|
4
|
-
import { Domain, getQueryBuilderFromListParams, ListParam, getRepository } from '@things-factory/shell'
|
|
5
|
-
|
|
6
|
-
import { DataArchive } from './data-archive'
|
|
7
|
-
import { DataArchiveList } from './data-archive-type'
|
|
8
|
-
|
|
9
|
-
var parser = require('cron-parser')
|
|
10
|
-
|
|
11
|
-
@Resolver(DataArchive)
|
|
12
|
-
export class DataArchiveQuery {
|
|
13
|
-
@Directive('@privilege(category: "data-archive", privilege: "query", domainOwnerGranted: true)')
|
|
14
|
-
@Query(returns => DataArchive, { description: 'To fetch a DataArchive' })
|
|
15
|
-
async dataArchive(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<DataArchive> {
|
|
16
|
-
const { domain } = context.state
|
|
17
|
-
|
|
18
|
-
return await getRepository(DataArchive).findOne({
|
|
19
|
-
where: { domain: { id: domain.id }, id }
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@Directive('@privilege(category: "data-archive", privilege: "query", domainOwnerGranted: true)')
|
|
24
|
-
@Query(returns => DataArchiveList, { description: 'To fetch multiple DataArchives' })
|
|
25
|
-
async dataArchives(
|
|
26
|
-
@Args(type => ListParam) params: ListParam,
|
|
27
|
-
@Ctx() context: ResolverContext
|
|
28
|
-
): Promise<DataArchiveList> {
|
|
29
|
-
const { domain } = context.state
|
|
30
|
-
|
|
31
|
-
const queryBuilder = getQueryBuilderFromListParams({
|
|
32
|
-
repository: getRepository(DataArchive),
|
|
33
|
-
params,
|
|
34
|
-
domain,
|
|
35
|
-
alias: 'dataArchive',
|
|
36
|
-
searchables: []
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
const [items, total] = await queryBuilder.getManyAndCount()
|
|
40
|
-
|
|
41
|
-
return { items, total }
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@FieldResolver(type => Domain)
|
|
45
|
-
async domain(@Root() dataArchive: DataArchive): Promise<Domain> {
|
|
46
|
-
return dataArchive.domainId && (await getRepository(Domain).findOneBy({ id: dataArchive.domainId }))
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
@FieldResolver(type => User)
|
|
50
|
-
async updater(@Root() dataArchive: DataArchive): Promise<User> {
|
|
51
|
-
return dataArchive.updaterId && (await getRepository(User).findOneBy({ id: dataArchive.updaterId }))
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
@FieldResolver(type => User)
|
|
55
|
-
async creator(@Root() dataArchive: DataArchive): Promise<User> {
|
|
56
|
-
return dataArchive.creatorId && (await getRepository(User).findOneBy({ id: dataArchive.creatorId }))
|
|
57
|
-
}
|
|
58
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
|
2
|
-
import { DataArchive } from './data-archive'
|
|
3
|
-
import { ScalarObject } from '@things-factory/shell'
|
|
4
|
-
|
|
5
|
-
@InputType()
|
|
6
|
-
export class NewDataArchive {
|
|
7
|
-
@Field({ nullable: true })
|
|
8
|
-
type?: 'manual' | 'automatic' | string
|
|
9
|
-
|
|
10
|
-
@Field(type => ScalarObject, { nullable: true })
|
|
11
|
-
requestParams?: { [key: string]: any }
|
|
12
|
-
|
|
13
|
-
@Field({ nullable: true })
|
|
14
|
-
downloadUrl?: string
|
|
15
|
-
|
|
16
|
-
@Field({ nullable: true })
|
|
17
|
-
status?: string
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@InputType()
|
|
21
|
-
export class DataArchivePatch {
|
|
22
|
-
@Field(type => ID, { nullable: true })
|
|
23
|
-
id?: string
|
|
24
|
-
|
|
25
|
-
@Field({ nullable: true })
|
|
26
|
-
type?: 'manual' | 'automatic' | string
|
|
27
|
-
|
|
28
|
-
@Field(type => ScalarObject, { nullable: true })
|
|
29
|
-
requestParams?: { [key: string]: any }
|
|
30
|
-
|
|
31
|
-
@Field({ nullable: true })
|
|
32
|
-
downloadUrl?: string
|
|
33
|
-
|
|
34
|
-
@Field({ nullable: true })
|
|
35
|
-
status?: string
|
|
36
|
-
|
|
37
|
-
@Field({ nullable: true })
|
|
38
|
-
cuFlag: string
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@ObjectType()
|
|
42
|
-
export class DataArchiveList {
|
|
43
|
-
@Field(type => [DataArchive])
|
|
44
|
-
items: DataArchive[]
|
|
45
|
-
|
|
46
|
-
@Field(type => Int)
|
|
47
|
-
total: number
|
|
48
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { Field, ID, ObjectType, registerEnumType } from 'type-graphql'
|
|
2
|
-
import {
|
|
3
|
-
Column,
|
|
4
|
-
CreateDateColumn,
|
|
5
|
-
Entity,
|
|
6
|
-
Index,
|
|
7
|
-
ManyToOne,
|
|
8
|
-
PrimaryGeneratedColumn,
|
|
9
|
-
RelationId,
|
|
10
|
-
UpdateDateColumn,
|
|
11
|
-
VersionColumn
|
|
12
|
-
} from 'typeorm'
|
|
13
|
-
|
|
14
|
-
import { Role, User } from '@things-factory/auth-base'
|
|
15
|
-
import { Domain, ScalarObject } from '@things-factory/shell'
|
|
16
|
-
|
|
17
|
-
@Entity()
|
|
18
|
-
@Index('ix_data_archive_0', (dataArchive: DataArchive) => [dataArchive.id], { unique: true })
|
|
19
|
-
@ObjectType({ description: 'Entity for DataArchive' })
|
|
20
|
-
export class DataArchive {
|
|
21
|
-
@PrimaryGeneratedColumn('uuid')
|
|
22
|
-
@Field(type => ID)
|
|
23
|
-
readonly id: string
|
|
24
|
-
|
|
25
|
-
@ManyToOne(type => Domain)
|
|
26
|
-
@Field(type => Domain)
|
|
27
|
-
domain?: Domain
|
|
28
|
-
|
|
29
|
-
@RelationId((dataArchive: DataArchive) => dataArchive.domain)
|
|
30
|
-
domainId?: string
|
|
31
|
-
|
|
32
|
-
@Column({ nullable: true })
|
|
33
|
-
@Field({ nullable: true })
|
|
34
|
-
type?: 'manual' | 'automatic' | string
|
|
35
|
-
|
|
36
|
-
@Column('simple-json', { nullable: true })
|
|
37
|
-
@Field(type => ScalarObject, { nullable: true })
|
|
38
|
-
requestParams?: { [key: string]: any }
|
|
39
|
-
|
|
40
|
-
@Column({ nullable: true })
|
|
41
|
-
@Field({ nullable: true })
|
|
42
|
-
downloadUrl?: string
|
|
43
|
-
|
|
44
|
-
@Column({ nullable: true })
|
|
45
|
-
@Field({ nullable: true })
|
|
46
|
-
status?: string
|
|
47
|
-
|
|
48
|
-
@CreateDateColumn()
|
|
49
|
-
@Field({ nullable: true })
|
|
50
|
-
createdAt?: Date
|
|
51
|
-
|
|
52
|
-
@UpdateDateColumn()
|
|
53
|
-
@Field({ nullable: true })
|
|
54
|
-
updatedAt?: Date
|
|
55
|
-
|
|
56
|
-
@ManyToOne(type => User, { nullable: true })
|
|
57
|
-
@Field(type => User, { nullable: true })
|
|
58
|
-
creator?: User
|
|
59
|
-
|
|
60
|
-
@RelationId((dataArchive: DataArchive) => dataArchive.creator)
|
|
61
|
-
creatorId?: string
|
|
62
|
-
|
|
63
|
-
@ManyToOne(type => User, { nullable: true })
|
|
64
|
-
@Field(type => User, { nullable: true })
|
|
65
|
-
updater?: User
|
|
66
|
-
|
|
67
|
-
@RelationId((dataArchive: DataArchive) => dataArchive.updater)
|
|
68
|
-
updaterId?: string
|
|
69
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { DataArchive } from './data-archive'
|
|
2
|
-
import { DataArchiveMutation } from './data-archive-mutation'
|
|
3
|
-
import { DataArchiveQuery } from './data-archive-query'
|
|
4
|
-
|
|
5
|
-
export const entities = [DataArchive]
|
|
6
|
-
export const resolvers = [DataArchiveQuery, DataArchiveMutation]
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Field, InputType, ObjectType } from 'type-graphql'
|
|
2
|
-
|
|
3
|
-
@ObjectType({ description: 'Entity for DataKeyItem' })
|
|
4
|
-
export class DataKeyItem {
|
|
5
|
-
@Field()
|
|
6
|
-
name: string
|
|
7
|
-
|
|
8
|
-
@Field({ nullable: true })
|
|
9
|
-
description?: string
|
|
10
|
-
|
|
11
|
-
@Field({ nullable: true })
|
|
12
|
-
dataKey: string
|
|
13
|
-
|
|
14
|
-
@Field({ nullable: true })
|
|
15
|
-
tKey?: string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@InputType()
|
|
19
|
-
export class DataKeyItemPatch {
|
|
20
|
-
@Field({ nullable: true })
|
|
21
|
-
name?: string
|
|
22
|
-
|
|
23
|
-
@Field({ nullable: true })
|
|
24
|
-
description?: string
|
|
25
|
-
|
|
26
|
-
@Field({ nullable: true })
|
|
27
|
-
dataKey?: string
|
|
28
|
-
|
|
29
|
-
@Field({ nullable: true })
|
|
30
|
-
tKey?: string
|
|
31
|
-
}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
|
2
|
-
import { In } from 'typeorm'
|
|
3
|
-
|
|
4
|
-
import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
|
|
5
|
-
|
|
6
|
-
import { DataKeySet } from './data-key-set'
|
|
7
|
-
import { DataKeySetPatch, NewDataKeySet } from './data-key-set-type'
|
|
8
|
-
|
|
9
|
-
@Resolver(DataKeySet)
|
|
10
|
-
export class DataKeySetMutation {
|
|
11
|
-
@Directive('@transaction')
|
|
12
|
-
@Mutation(returns => DataKeySet, { description: 'To create new DataKeySet' })
|
|
13
|
-
async createDataKeySet(
|
|
14
|
-
@Arg('dataKeySet') dataKeySet: NewDataKeySet,
|
|
15
|
-
@Ctx() context: ResolverContext
|
|
16
|
-
): Promise<DataKeySet> {
|
|
17
|
-
const { domain, user, tx } = context.state
|
|
18
|
-
|
|
19
|
-
const result = await tx.getRepository(DataKeySet).save({
|
|
20
|
-
...dataKeySet,
|
|
21
|
-
domain,
|
|
22
|
-
creator: user,
|
|
23
|
-
updater: user
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
if (dataKeySet.thumbnail) {
|
|
27
|
-
await createAttachment(
|
|
28
|
-
null,
|
|
29
|
-
{
|
|
30
|
-
attachment: {
|
|
31
|
-
file: dataKeySet.thumbnail,
|
|
32
|
-
refType: DataKeySet.name,
|
|
33
|
-
refBy: result.id
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
context
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return result
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
@Directive('@transaction')
|
|
44
|
-
@Mutation(returns => DataKeySet, { description: 'To modify DataKeySet information' })
|
|
45
|
-
async updateDataKeySet(
|
|
46
|
-
@Arg('id') id: string,
|
|
47
|
-
@Arg('patch') patch: DataKeySetPatch,
|
|
48
|
-
@Ctx() context: ResolverContext
|
|
49
|
-
): Promise<DataKeySet> {
|
|
50
|
-
const { domain, user, tx } = context.state
|
|
51
|
-
|
|
52
|
-
const repository = tx.getRepository(DataKeySet)
|
|
53
|
-
const dataKeySet = await repository.findOne({
|
|
54
|
-
where: { domain: { id: domain.id }, id }
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
const result = await repository.save({
|
|
58
|
-
...dataKeySet,
|
|
59
|
-
...patch,
|
|
60
|
-
updater: user
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
if (patch.thumbnail) {
|
|
64
|
-
await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
|
|
65
|
-
await createAttachment(
|
|
66
|
-
null,
|
|
67
|
-
{
|
|
68
|
-
attachment: {
|
|
69
|
-
file: patch.thumbnail,
|
|
70
|
-
refType: DataKeySet.name,
|
|
71
|
-
refBy: result.id
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
context
|
|
75
|
-
)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return result
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@Directive('@transaction')
|
|
82
|
-
@Mutation(returns => [DataKeySet], { description: "To modify multiple DataKeySets' information" })
|
|
83
|
-
async updateMultipleDataKeySet(
|
|
84
|
-
@Arg('patches', type => [DataKeySetPatch]) patches: DataKeySetPatch[],
|
|
85
|
-
@Ctx() context: ResolverContext
|
|
86
|
-
): Promise<DataKeySet[]> {
|
|
87
|
-
const { domain, user, tx } = context.state
|
|
88
|
-
|
|
89
|
-
let results = []
|
|
90
|
-
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
91
|
-
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
92
|
-
const dataKeySetRepo = tx.getRepository(DataKeySet)
|
|
93
|
-
|
|
94
|
-
if (_createRecords.length > 0) {
|
|
95
|
-
for (let i = 0; i < _createRecords.length; i++) {
|
|
96
|
-
const newRecord = _createRecords[i]
|
|
97
|
-
|
|
98
|
-
const result = await dataKeySetRepo.save({
|
|
99
|
-
...newRecord,
|
|
100
|
-
domain,
|
|
101
|
-
creator: user,
|
|
102
|
-
updater: user
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
if (newRecord.thumbnail) {
|
|
106
|
-
await createAttachment(
|
|
107
|
-
null,
|
|
108
|
-
{
|
|
109
|
-
attachment: {
|
|
110
|
-
file: newRecord.thumbnail,
|
|
111
|
-
refType: DataKeySet.name,
|
|
112
|
-
refBy: result.id
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
context
|
|
116
|
-
)
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
results.push({ ...result, cuFlag: '+' })
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (_updateRecords.length > 0) {
|
|
124
|
-
for (let i = 0; i < _updateRecords.length; i++) {
|
|
125
|
-
const updateRecord = _updateRecords[i]
|
|
126
|
-
const dataKeySet = await dataKeySetRepo.findOneBy({ id: updateRecord.id })
|
|
127
|
-
|
|
128
|
-
const result = await dataKeySetRepo.save({
|
|
129
|
-
...dataKeySet,
|
|
130
|
-
...updateRecord,
|
|
131
|
-
updater: user
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
if (updateRecord.thumbnail) {
|
|
135
|
-
await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
|
|
136
|
-
await createAttachment(
|
|
137
|
-
null,
|
|
138
|
-
{
|
|
139
|
-
attachment: {
|
|
140
|
-
file: updateRecord.thumbnail,
|
|
141
|
-
refType: DataKeySet.name,
|
|
142
|
-
refBy: result.id
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
context
|
|
146
|
-
)
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
results.push({ ...result, cuFlag: 'M' })
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return results
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
@Directive('@transaction')
|
|
157
|
-
@Mutation(returns => Boolean, { description: 'To delete DataKeySet' })
|
|
158
|
-
async deleteDataKeySet(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
|
159
|
-
const { domain, tx } = context.state
|
|
160
|
-
|
|
161
|
-
await tx.getRepository(DataKeySet).delete({ domain: { id: domain.id }, id })
|
|
162
|
-
await deleteAttachmentsByRef(null, { refBys: [id] }, context)
|
|
163
|
-
|
|
164
|
-
return true
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
@Directive('@transaction')
|
|
168
|
-
@Mutation(returns => Boolean, { description: 'To delete multiple DataKeySets' })
|
|
169
|
-
async deleteDataKeySets(
|
|
170
|
-
@Arg('ids', type => [String]) ids: string[],
|
|
171
|
-
@Ctx() context: ResolverContext
|
|
172
|
-
): Promise<boolean> {
|
|
173
|
-
const { domain, tx } = context.state
|
|
174
|
-
|
|
175
|
-
await tx.getRepository(DataKeySet).delete({
|
|
176
|
-
domain: { id: domain.id },
|
|
177
|
-
id: In(ids)
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
await deleteAttachmentsByRef(null, { refBys: ids }, context)
|
|
181
|
-
|
|
182
|
-
return true
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
@Directive('@transaction')
|
|
186
|
-
@Mutation(returns => Boolean, { description: 'To import multiple DataKeySets' })
|
|
187
|
-
async importDataKeySets(
|
|
188
|
-
@Arg('dataKeySets', type => [DataKeySetPatch]) dataKeySets: DataKeySetPatch[],
|
|
189
|
-
@Ctx() context: ResolverContext
|
|
190
|
-
): Promise<boolean> {
|
|
191
|
-
const { domain, tx } = context.state
|
|
192
|
-
|
|
193
|
-
await Promise.all(
|
|
194
|
-
dataKeySets.map(async (dataKeySet: DataKeySetPatch) => {
|
|
195
|
-
const createdDataKeySet: DataKeySet = await tx.getRepository(DataKeySet).save({ domain, ...dataKeySet })
|
|
196
|
-
})
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
return true
|
|
200
|
-
}
|
|
201
|
-
}
|