@things-factory/dataset 8.0.0-beta.0 → 8.0.0-beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. package/package.json +13 -13
  2. package/client/activities/activity-data-collect-edit.ts +0 -105
  3. package/client/activities/activity-data-collect-view.ts +0 -91
  4. package/client/activities/activity-data-review-edit.ts +0 -133
  5. package/client/activities/activity-data-review-view.ts +0 -145
  6. package/client/activities/activity-ooc-resolve-edit.ts +0 -195
  7. package/client/activities/activity-ooc-resolve-view.ts +0 -143
  8. package/client/activities/activity-ooc-review-edit.ts +0 -173
  9. package/client/activities/activity-ooc-review-view.ts +0 -129
  10. package/client/bootstrap.ts +0 -35
  11. package/client/components/data-entry-form.ts +0 -109
  12. package/client/index.ts +0 -1
  13. package/client/pages/data-archive/data-archive-list-page.ts +0 -277
  14. package/client/pages/data-archive/data-archive-request-popup.ts +0 -177
  15. package/client/pages/data-entry/data-entry-list-page.ts +0 -464
  16. package/client/pages/data-key-set/data-key-item-list.ts +0 -183
  17. package/client/pages/data-key-set/data-key-set-importer.ts +0 -89
  18. package/client/pages/data-key-set/data-key-set-list-page.ts +0 -413
  19. package/client/pages/data-ooc/data-ooc-list-page.ts +0 -549
  20. package/client/pages/data-ooc/data-ooc-page.ts +0 -164
  21. package/client/pages/data-ooc/data-ooc-view.ts +0 -236
  22. package/client/pages/data-ooc/data-oocs-page.ts +0 -200
  23. package/client/pages/data-report/data-report-embed-page.ts +0 -108
  24. package/client/pages/data-report/data-report-list-page.ts +0 -454
  25. package/client/pages/data-report/data-report-samples-page.ts +0 -174
  26. package/client/pages/data-report/jasper-report-oocs-page.ts +0 -110
  27. package/client/pages/data-report/jasper-report-samples-crosstab-page.ts +0 -110
  28. package/client/pages/data-report/jasper-report-samples-page.ts +0 -110
  29. package/client/pages/data-sample/data-sample-list-page.ts +0 -442
  30. package/client/pages/data-sample/data-sample-page.ts +0 -55
  31. package/client/pages/data-sample/data-sample-search-page.ts +0 -424
  32. package/client/pages/data-sample/data-sample-view.ts +0 -292
  33. package/client/pages/data-sample/data-samples-page.ts +0 -249
  34. package/client/pages/data-sensor/data-sensor-list-page.ts +0 -456
  35. package/client/pages/data-set/data-item-list.ts +0 -304
  36. package/client/pages/data-set/data-set-importer.ts +0 -89
  37. package/client/pages/data-set/data-set-list-page.ts +0 -1078
  38. package/client/pages/data-summary/data-summary-list-page.ts +0 -363
  39. package/client/pages/data-summary/data-summary-period-page.ts +0 -439
  40. package/client/pages/data-summary/data-summary-search-page.ts +0 -426
  41. package/client/pages/data-summary/data-summary-view.ts +0 -133
  42. package/client/route.ts +0 -91
  43. package/client/tsconfig.json +0 -13
  44. package/server/activities/activity-data-collect.ts +0 -100
  45. package/server/activities/activity-data-review.ts +0 -82
  46. package/server/activities/activity-ooc-resolve.ts +0 -123
  47. package/server/activities/activity-ooc-review.ts +0 -144
  48. package/server/activities/index.ts +0 -11
  49. package/server/controllers/create-data-sample.ts +0 -426
  50. package/server/controllers/data-use-case.ts +0 -98
  51. package/server/controllers/finalize-data-collection.ts +0 -388
  52. package/server/controllers/index.ts +0 -3
  53. package/server/controllers/issue-data-collection-task.ts +0 -70
  54. package/server/controllers/jasper-report.ts +0 -186
  55. package/server/controllers/query-data-summary-by-period.ts +0 -178
  56. package/server/controllers/shiny-report.ts +0 -54
  57. package/server/engine/index.ts +0 -1
  58. package/server/engine/task/create-data-sample.ts +0 -100
  59. package/server/engine/task/index.ts +0 -2
  60. package/server/engine/task/issue-collect-data.ts +0 -45
  61. package/server/index.ts +0 -8
  62. package/server/routes.ts +0 -188
  63. package/server/service/data-archive/data-archive-mutation.ts +0 -273
  64. package/server/service/data-archive/data-archive-query.ts +0 -58
  65. package/server/service/data-archive/data-archive-type.ts +0 -48
  66. package/server/service/data-archive/data-archive.ts +0 -69
  67. package/server/service/data-archive/index.ts +0 -6
  68. package/server/service/data-key-set/data-key-item-type.ts +0 -31
  69. package/server/service/data-key-set/data-key-set-mutation.ts +0 -201
  70. package/server/service/data-key-set/data-key-set-query.ts +0 -68
  71. package/server/service/data-key-set/data-key-set-type.ts +0 -70
  72. package/server/service/data-key-set/data-key-set.ts +0 -86
  73. package/server/service/data-key-set/index.ts +0 -6
  74. package/server/service/data-ooc/data-ooc-mutation.ts +0 -154
  75. package/server/service/data-ooc/data-ooc-query.ts +0 -106
  76. package/server/service/data-ooc/data-ooc-subscription.ts +0 -48
  77. package/server/service/data-ooc/data-ooc-type.ts +0 -71
  78. package/server/service/data-ooc/data-ooc.ts +0 -259
  79. package/server/service/data-ooc/index.ts +0 -7
  80. package/server/service/data-sample/data-sample-mutation.ts +0 -18
  81. package/server/service/data-sample/data-sample-query.ts +0 -215
  82. package/server/service/data-sample/data-sample-type.ts +0 -47
  83. package/server/service/data-sample/data-sample.ts +0 -193
  84. package/server/service/data-sample/index.ts +0 -6
  85. package/server/service/data-sensor/data-sensor-mutation.ts +0 -116
  86. package/server/service/data-sensor/data-sensor-query.ts +0 -76
  87. package/server/service/data-sensor/data-sensor-type.ts +0 -104
  88. package/server/service/data-sensor/data-sensor.ts +0 -126
  89. package/server/service/data-sensor/index.ts +0 -6
  90. package/server/service/data-set/data-item-type.ts +0 -155
  91. package/server/service/data-set/data-set-mutation.ts +0 -552
  92. package/server/service/data-set/data-set-query.ts +0 -461
  93. package/server/service/data-set/data-set-type.ts +0 -204
  94. package/server/service/data-set/data-set.ts +0 -326
  95. package/server/service/data-set/index.ts +0 -6
  96. package/server/service/data-set-history/data-set-history-query.ts +0 -126
  97. package/server/service/data-set-history/data-set-history-type.ts +0 -12
  98. package/server/service/data-set-history/data-set-history.ts +0 -217
  99. package/server/service/data-set-history/event-subscriber.ts +0 -17
  100. package/server/service/data-set-history/index.ts +0 -7
  101. package/server/service/data-spec/data-spec-manager.ts +0 -21
  102. package/server/service/data-spec/data-spec-query.ts +0 -21
  103. package/server/service/data-spec/data-spec.ts +0 -45
  104. package/server/service/data-spec/index.ts +0 -5
  105. package/server/service/data-summary/data-summary-mutation.ts +0 -45
  106. package/server/service/data-summary/data-summary-query.ts +0 -179
  107. package/server/service/data-summary/data-summary-type.ts +0 -86
  108. package/server/service/data-summary/data-summary.ts +0 -170
  109. package/server/service/data-summary/index.ts +0 -7
  110. package/server/service/index.ts +0 -57
  111. package/server/tsconfig.json +0 -10
  112. package/server/utils/config-resolver.ts +0 -29
  113. 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
- }