@things-factory/dataset 5.0.0-zeta.7 → 5.0.0

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 (94) hide show
  1. package/client/bootstrap.js +2 -3
  2. package/client/{pages/data-entry → components}/data-entry-form.js +1 -1
  3. package/client/index.js +1 -0
  4. package/client/pages/data-entry/data-entry-list-page.js +2 -3
  5. package/client/pages/data-ooc/data-ooc-list-page.js +13 -18
  6. package/client/pages/data-ooc/data-ooc-view.js +19 -14
  7. package/client/pages/data-report/data-report-list-page.js +1 -2
  8. package/client/pages/data-sample/data-sample-list-page.js +12 -13
  9. package/client/pages/data-sample/data-sample-view.js +3 -2
  10. package/client/pages/data-sensor/data-sensor-list-page.js +1 -1
  11. package/client/pages/data-set/data-item-list.js +32 -98
  12. package/client/pages/data-set/data-set-list-page.js +3 -3
  13. package/config/config.development.js +1 -1
  14. package/config/config.production.js +13 -1
  15. package/dist-server/controllers/create-data-sample.js +10 -44
  16. package/dist-server/controllers/create-data-sample.js.map +1 -1
  17. package/dist-server/controllers/data-use-case.js +11 -5
  18. package/dist-server/controllers/data-use-case.js.map +1 -1
  19. package/dist-server/controllers/index.js +1 -1
  20. package/dist-server/controllers/index.js.map +1 -1
  21. package/dist-server/controllers/jasper-report.js +14 -9
  22. package/dist-server/controllers/jasper-report.js.map +1 -1
  23. package/dist-server/service/data-item/index.js +1 -4
  24. package/dist-server/service/data-item/index.js.map +1 -1
  25. package/dist-server/service/data-ooc/data-ooc-query.js +15 -10
  26. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -1
  27. package/dist-server/service/data-ooc/data-ooc-type.js +4 -0
  28. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -1
  29. package/dist-server/service/data-ooc/data-ooc.js +11 -14
  30. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  31. package/dist-server/service/data-sample/data-sample-query.js +18 -0
  32. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  33. package/dist-server/service/data-sample/data-sample-type.js +4 -0
  34. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  35. package/dist-server/service/data-sample/data-sample.js +12 -3
  36. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  37. package/dist-server/service/{data-item → data-set}/data-item-type.js +60 -33
  38. package/dist-server/service/data-set/data-item-type.js.map +1 -0
  39. package/dist-server/service/data-set/data-set-mutation.js +21 -61
  40. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  41. package/dist-server/service/data-set/data-set-query.js +4 -0
  42. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  43. package/dist-server/service/data-set/data-set-type.js +21 -9
  44. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  45. package/dist-server/service/data-set/data-set.js +11 -3
  46. package/dist-server/service/data-set/data-set.js.map +1 -1
  47. package/dist-server/service/data-set-history/data-set-history-query.js +173 -0
  48. package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -0
  49. package/dist-server/service/data-set-history/data-set-history-type.js +29 -0
  50. package/dist-server/service/data-set-history/data-set-history-type.js.map +1 -0
  51. package/dist-server/service/data-set-history/data-set-history.js +196 -0
  52. package/dist-server/service/data-set-history/data-set-history.js.map +1 -0
  53. package/dist-server/service/data-set-history/event-subscriber.js +26 -0
  54. package/dist-server/service/data-set-history/event-subscriber.js.map +1 -0
  55. package/dist-server/service/data-set-history/index.js +10 -0
  56. package/dist-server/service/data-set-history/index.js.map +1 -0
  57. package/dist-server/service/index.js +11 -4
  58. package/dist-server/service/index.js.map +1 -1
  59. package/package.json +18 -17
  60. package/server/controllers/create-data-sample.ts +13 -50
  61. package/server/controllers/data-use-case.ts +19 -7
  62. package/server/controllers/index.ts +1 -1
  63. package/server/controllers/jasper-report.ts +58 -48
  64. package/server/service/data-item/index.ts +0 -3
  65. package/server/service/data-ooc/data-ooc-query.ts +13 -8
  66. package/server/service/data-ooc/data-ooc-type.ts +3 -0
  67. package/server/service/data-ooc/data-ooc.ts +9 -14
  68. package/server/service/data-sample/data-sample-query.ts +14 -1
  69. package/server/service/data-sample/data-sample-type.ts +3 -0
  70. package/server/service/data-sample/data-sample.ts +10 -3
  71. package/server/service/data-set/data-item-type.ts +82 -0
  72. package/server/service/data-set/data-set-mutation.ts +33 -60
  73. package/server/service/data-set/data-set-query.ts +5 -0
  74. package/server/service/data-set/data-set-type.ts +9 -1
  75. package/server/service/data-set/data-set.ts +8 -4
  76. package/server/service/data-set-history/data-set-history-query.ts +110 -0
  77. package/server/service/data-set-history/data-set-history-type.ts +12 -0
  78. package/server/service/data-set-history/data-set-history.ts +161 -0
  79. package/server/service/data-set-history/event-subscriber.ts +17 -0
  80. package/server/service/data-set-history/index.ts +7 -0
  81. package/server/service/index.ts +16 -4
  82. package/translations/en.json +5 -5
  83. package/translations/ko.json +10 -10
  84. package/translations/ms.json +5 -5
  85. package/translations/zh.json +5 -5
  86. package/dist-server/service/data-item/data-item-mutation.js +0 -73
  87. package/dist-server/service/data-item/data-item-mutation.js.map +0 -1
  88. package/dist-server/service/data-item/data-item-query.js +0 -104
  89. package/dist-server/service/data-item/data-item-query.js.map +0 -1
  90. package/dist-server/service/data-item/data-item-type.js.map +0 -1
  91. package/server/service/data-item/data-item-mutation.ts +0 -61
  92. package/server/service/data-item/data-item-query.ts +0 -58
  93. package/server/service/data-item/data-item-type.ts +0 -57
  94. package/yarn-error.log +0 -23244
@@ -1,10 +1,8 @@
1
1
  import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { EntityManager, In } from 'typeorm'
2
+ import { In } from 'typeorm'
3
3
 
4
4
  import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
5
- import { Domain } from '@things-factory/shell'
6
5
 
7
- import { DataItem } from '../data-item/data-item'
8
6
  import { DataSet } from './data-set'
9
7
  import { DataSetPatch, NewDataSet } from './data-set-type'
10
8
 
@@ -17,9 +15,11 @@ export class DataSetMutation {
17
15
  @Mutation(returns => DataSet, { description: 'To create new DataSet' })
18
16
  async createDataSet(@Arg('dataSet') dataSet: NewDataSet, @Ctx() context: any): Promise<DataSet> {
19
17
  const { domain, user, tx } = context.state
18
+ const dataSetRepo = tx.getRepository(DataSet)
20
19
 
21
- const result = await tx.getRepository(DataSet).save({
20
+ const result = await dataSetRepo.save({
22
21
  ...dataSet,
22
+ version: 1,
23
23
  domain,
24
24
  creator: user,
25
25
  updater: user
@@ -35,13 +35,13 @@ export class DataSetMutation {
35
35
  @Mutation(returns => DataSet, { description: 'To modify DataSet information' })
36
36
  async updateDataSet(@Arg('id') id: string, @Arg('patch') patch: DataSetPatch, @Ctx() context: any): Promise<DataSet> {
37
37
  const { domain, user, tx } = context.state
38
+ const dataSetRepo = tx.getRepository(DataSet)
38
39
 
39
- const repository = tx.getRepository(DataSet)
40
- const dataSet = await repository.findOne({
40
+ const dataSet = await dataSetRepo.findOne({
41
41
  where: { domain, id }
42
42
  })
43
43
 
44
- const result = await repository.save({
44
+ const result = await dataSetRepo.save({
45
45
  ...dataSet,
46
46
  ...patch,
47
47
  updater: user
@@ -60,11 +60,11 @@ export class DataSetMutation {
60
60
  @Ctx() context: any
61
61
  ): Promise<DataSet[]> {
62
62
  const { domain, user, tx } = context.state
63
+ const dataSetRepo = tx.getRepository(DataSet)
63
64
 
64
65
  let results = []
65
66
  const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
66
67
  const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
67
- const dataSetRepo = tx.getRepository(DataSet)
68
68
 
69
69
  if (_createRecords.length > 0) {
70
70
  const cuFlag = '+'
@@ -80,7 +80,12 @@ export class DataSetMutation {
80
80
 
81
81
  await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
82
82
 
83
- results.push({ ...result, cuFlag })
83
+ results.push({
84
+ ...(await dataSetRepo.findOne(result.id, {
85
+ relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
86
+ })),
87
+ cuFlag
88
+ })
84
89
  }
85
90
  }
86
91
 
@@ -98,7 +103,12 @@ export class DataSetMutation {
98
103
 
99
104
  await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
100
105
 
101
- results.push({ ...result, cuFlag })
106
+ results.push({
107
+ ...(await dataSetRepo.findOne(result.id, {
108
+ relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
109
+ })),
110
+ cuFlag
111
+ })
102
112
  }
103
113
  }
104
114
 
@@ -139,20 +149,15 @@ export class DataSetMutation {
139
149
  @Arg('dataSets', type => [DataSetPatch]) dataSets: DataSet[],
140
150
  @Ctx() context: any
141
151
  ): Promise<boolean> {
142
- const tx: EntityManager = context.state.tx
143
- const domain: Domain = context.state.domain
152
+ const { domain, tx } = context.state
153
+ const dataSetRepo = tx.getRepository(DataSet)
154
+
144
155
  await Promise.all(
145
156
  dataSets.map(async (dataSet: DataSet) => {
146
- const createdDataSet: DataSet = await tx.getRepository(DataSet).save({ domain, ...dataSet })
147
- if (dataSet.dataItems?.length) {
148
- await tx.getRepository(DataItem).save(
149
- dataSet.dataItems.map((dataItem: DataItem) => {
150
- dataItem.domain = domain
151
- dataItem.dataSet = createdDataSet
152
- return dataItem
153
- })
154
- )
155
- }
157
+ const createdDataSet: DataSet = await dataSetRepo.save({
158
+ domain,
159
+ ...dataSet
160
+ })
156
161
  })
157
162
  )
158
163
 
@@ -164,69 +169,37 @@ export class DataSetMutation {
164
169
  @Mutation(returns => [DataSet], { description: 'To copy multiple data-sets' })
165
170
  async copyDataSets(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<DataSet[]> {
166
171
  const { domain, user, tx } = context.state
172
+ const dataSetRepo = tx.getRepository(DataSet)
167
173
 
168
- const originals = await tx.getRepository(DataSet).find({
174
+ const originals = await dataSetRepo.find({
169
175
  where: {
170
176
  id: In(ids),
171
177
  domain
172
178
  },
173
- relations: ['domain', 'dataItems']
179
+ relations: ['domain', 'supervisoryRole', 'entryRole']
174
180
  })
175
181
 
176
182
  if (originals.length == 0) {
177
183
  return []
178
184
  }
179
185
 
180
- var newDataItems = []
181
-
182
186
  var newCopys = originals.map(dataSet => {
183
187
  let dataSetId = crypto.randomUUID()
184
- newDataItems.push(
185
- ...dataSet.dataItems.map(dataItem => {
186
- return {
187
- dataSet: dataSetId,
188
- name: dataItem.name,
189
- description: dataItem.description,
190
- sequence: dataItem.sequence,
191
- tag: dataItem.tag,
192
- active: dataItem.active,
193
- type: dataItem.type,
194
- quota: dataItem.quota,
195
- spec: dataItem.spec,
196
- unit: dataItem.unit,
197
- options: dataItem.options,
198
- hidden: dataItem.hidden,
199
- // connection: dataItem.connection,
200
- // params: dataItem.params,
201
- domain,
202
- creator: user,
203
- updater: user
204
- }
205
- })
206
- )
207
188
 
208
189
  return {
190
+ ...dataSet,
209
191
  id: dataSetId,
210
192
  name: dataSet.name + ' (' + dataSetId + ')',
211
- type: dataSet.type,
212
- description: dataSet.description,
213
193
  active: false,
214
- schedule: dataSet.schedule,
215
- timezone: dataSet.timezone,
216
-
217
194
  domain,
218
195
  creator: user,
219
196
  updater: user
220
197
  }
221
198
  })
222
199
 
223
- var copiedDataSets = await tx.getRepository(DataSet).save(newCopys)
224
- var copiedDataItems = await tx.getRepository(DataItem).save(newDataItems)
200
+ var copiedDataSets = await dataSetRepo.save(newCopys)
225
201
 
226
- return copiedDataSets.map(dataSet => {
227
- dataSet.dataItems = copiedDataItems.filter(dataItem => dataItem.dataSet == dataSet.id)
228
- return dataSet
229
- })
202
+ return copiedDataSets
230
203
  }
231
204
 
232
205
  async _createAttachment(context, attachment, { refId, cuFlag }) {
@@ -103,6 +103,11 @@ export class DataSetQuery {
103
103
 
104
104
  @FieldResolver(type => [DataItem])
105
105
  async dataItems(@Root() dataSet: DataSet): Promise<DataItem[]> {
106
+ /* TODO this fieldResolver should be removed. This is only for migration temporarily */
107
+ if (dataSet.dataItems) {
108
+ return dataSet.dataItems as DataItem[]
109
+ }
110
+
106
111
  return await getRepository(DataItem).find({
107
112
  dataSet
108
113
  })
@@ -1,8 +1,10 @@
1
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
+ import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
1
3
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
- import { FileUpload, GraphQLUpload } from 'graphql-upload'
3
4
 
4
5
  import { ObjectRef, ScalarObject } from '@things-factory/shell'
5
6
 
7
+ import { DataItemPatch } from './data-item-type'
6
8
  import { DataSet, DataSetEntryType, DataSetMonitorType, DataSetReportType } from './data-set'
7
9
 
8
10
  @InputType()
@@ -31,6 +33,9 @@ export class NewDataSet {
31
33
  @Field(type => ScalarObject, { nullable: true })
32
34
  partitionKeys?: ScalarObject
33
35
 
36
+ @Field(type => [DataItemPatch], { nullable: true })
37
+ dataItems?: DataItemPatch[]
38
+
34
39
  @Field({ nullable: true })
35
40
  schedule?: string
36
41
 
@@ -88,6 +93,9 @@ export class DataSetPatch {
88
93
  @Field(type => ScalarObject, { nullable: true })
89
94
  partitionKeys?: ScalarObject
90
95
 
96
+ @Field(type => [DataItemPatch], { nullable: true })
97
+ dataItems?: DataItemPatch[]
98
+
91
99
  @Field({ nullable: true })
92
100
  schedule?: string
93
101
 
@@ -5,16 +5,16 @@ import {
5
5
  Entity,
6
6
  Index,
7
7
  ManyToOne,
8
- OneToMany,
9
8
  PrimaryGeneratedColumn,
10
9
  RelationId,
11
- UpdateDateColumn
10
+ UpdateDateColumn,
11
+ VersionColumn
12
12
  } from 'typeorm'
13
13
 
14
14
  import { Role, User } from '@things-factory/auth-base'
15
15
  import { Domain, ScalarObject } from '@things-factory/shell'
16
16
 
17
- import { DataItem } from '../data-item/data-item'
17
+ import { DataItem } from './data-item-type'
18
18
 
19
19
  export enum DataSetEntryType {
20
20
  Generated = 'generated',
@@ -77,6 +77,10 @@ export class DataSet {
77
77
  @Field({ nullable: true })
78
78
  description?: string
79
79
 
80
+ @VersionColumn({ nullable: true, default: 1 })
81
+ @Field({ nullable: true })
82
+ version?: number = 1
83
+
80
84
  @Column({
81
85
  nullable: true
82
86
  })
@@ -156,7 +160,7 @@ export class DataSet {
156
160
  @Field(type => ScalarObject, { nullable: true })
157
161
  partitionKeys?: ScalarObject
158
162
 
159
- @OneToMany(type => DataItem, dataItem => dataItem.dataSet)
163
+ @Column('simple-json', { nullable: true })
160
164
  @Field(type => [DataItem], { nullable: true })
161
165
  dataItems: DataItem[]
162
166
 
@@ -0,0 +1,110 @@
1
+ import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
+ import { getRepository } from 'typeorm'
3
+
4
+ import { Attachment } from '@things-factory/attachment-base'
5
+ import { Role, User } from '@things-factory/auth-base'
6
+ import { Board } from '@things-factory/board-service'
7
+ import { Domain, getQueryBuilderFromListParams, ListParam, ScalarDate } from '@things-factory/shell'
8
+
9
+ import { DataSetHistory } from './data-set-history'
10
+ import { DataSetHistoryList } from './data-set-history-type'
11
+
12
+ @Resolver(DataSetHistory)
13
+ export class DataSetHistoryQuery {
14
+ @Directive('@privilege(category: "data-set-history", privilege: "query", domainOwnerGranted: true)')
15
+ @Query(returns => DataSetHistory, { description: 'To fetch a DataSetHistory' })
16
+ async dataSetHistory(
17
+ @Arg('id') id: string,
18
+ @Arg('timestamp', type => ScalarDate) timestamp: ScalarDate,
19
+ @Ctx() context: any
20
+ ): Promise<DataSetHistory> {
21
+ const { domain } = context.state
22
+
23
+ return await getRepository(DataSetHistory).findOne({
24
+ where: { domain, originalId: id, updatedAt: timestamp }
25
+ })
26
+ }
27
+
28
+ @Directive('@privilege(category: "data-set-history", privilege: "query", domainOwnerGranted: true)')
29
+ @Query(returns => DataSetHistoryList, { description: 'To fetch multiple DataSetHistories' })
30
+ async dataSetHistories(@Args() params: ListParam, @Ctx() context: any): Promise<DataSetHistoryList> {
31
+ const { domain } = context.state
32
+
33
+ const queryBuilder = getQueryBuilderFromListParams({
34
+ repository: getRepository(DataSetHistory),
35
+ params,
36
+ domain,
37
+ searchables: ['name', 'description', 'supervisoryRole']
38
+ })
39
+
40
+ const [items, total] = await queryBuilder.getManyAndCount()
41
+
42
+ return { items, total }
43
+ }
44
+
45
+ @FieldResolver(type => Role)
46
+ async entryRole(@Root() dataSetHistory: DataSetHistory): Promise<Role> {
47
+ return (
48
+ dataSetHistory.entryRole ||
49
+ (await getRepository(Role).findOne({
50
+ id: dataSetHistory.entryRoleId
51
+ }))
52
+ )
53
+ }
54
+
55
+ @FieldResolver(type => Role)
56
+ async supervisoryRole(@Root() dataSetHistory: DataSetHistory): Promise<Role> {
57
+ return (
58
+ dataSetHistory.supervisoryRole ||
59
+ (await getRepository(Role).findOne({
60
+ id: dataSetHistory.supervisoryRoleId
61
+ }))
62
+ )
63
+ }
64
+
65
+ @FieldResolver(type => Board, { nullable: true })
66
+ async entryBoard(@Root() dataSetHistory: DataSetHistory) {
67
+ if (dataSetHistory.entryType == 'board' && dataSetHistory.entryView) {
68
+ return await getRepository(Board).findOne({ id: dataSetHistory.entryView })
69
+ }
70
+ }
71
+
72
+ @FieldResolver(type => Board, { nullable: true })
73
+ async monitorBoard(@Root() dataSetHistory: DataSetHistory) {
74
+ if (dataSetHistory.monitorType == 'board' && dataSetHistory.monitorView) {
75
+ return await getRepository(Board).findOne({ id: dataSetHistory.monitorView })
76
+ }
77
+ }
78
+
79
+ @FieldResolver(type => User)
80
+ async timestamp(@Root() dataSetHistory: DataSetHistory): Promise<User> {
81
+ return dataSetHistory.updatedAt
82
+ }
83
+
84
+ @FieldResolver(type => Domain)
85
+ async domain(@Root() dataSetHistory: DataSetHistory): Promise<Domain> {
86
+ return await getRepository(Domain).findOne(dataSetHistory.domainId)
87
+ }
88
+
89
+ @FieldResolver(type => User)
90
+ async updater(@Root() dataSetHistory: DataSetHistory): Promise<User> {
91
+ return await getRepository(User).findOne(dataSetHistory.updaterId)
92
+ }
93
+
94
+ @FieldResolver(type => User)
95
+ async creator(@Root() dataSetHistory: DataSetHistory): Promise<User> {
96
+ return await getRepository(User).findOne(dataSetHistory.creatorId)
97
+ }
98
+
99
+ @FieldResolver(type => String)
100
+ async reportTemplate(@Root() dataSetHistory: DataSetHistory): Promise<string | undefined> {
101
+ const attachment: Attachment = await getRepository(Attachment).findOne({
102
+ where: {
103
+ domain: dataSetHistory.domainId,
104
+ refBy: `report-${dataSetHistory.originalId}`
105
+ }
106
+ })
107
+
108
+ return attachment?.path
109
+ }
110
+ }
@@ -0,0 +1,12 @@
1
+ import { Field, Int, ObjectType } from 'type-graphql'
2
+
3
+ import { DataSetHistory } from '../data-set-history/data-set-history'
4
+
5
+ @ObjectType()
6
+ export class DataSetHistoryList {
7
+ @Field(type => [DataSetHistory])
8
+ items: DataSetHistory[]
9
+
10
+ @Field(type => Int)
11
+ total: number
12
+ }
@@ -0,0 +1,161 @@
1
+ import { Field, ID, ObjectType } from 'type-graphql'
2
+ import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
3
+
4
+ import {
5
+ HistoryActionColumn,
6
+ HistoryActionType,
7
+ HistoryEntityInterface,
8
+ HistoryOriginalIdColumn
9
+ } from '@anchan828/typeorm-history'
10
+ import { Role, User } from '@things-factory/auth-base'
11
+ import { config } from '@things-factory/env'
12
+ import { Domain, ScalarObject } from '@things-factory/shell'
13
+
14
+ import { DataItem } from '../data-set/data-item-type'
15
+ import { DataSet, DataSetEntryType, DataSetMonitorType, DataSetReportType } from '../data-set/data-set'
16
+
17
+ const ORMCONFIG = config.get('ormconfig', {})
18
+ const DATABASE_TYPE = ORMCONFIG.type
19
+
20
+ @Entity()
21
+ @Index(
22
+ 'ix_data_set_history_0',
23
+ (dataSetHistory: DataSetHistory) => [dataSetHistory.originalId, dataSetHistory.version],
24
+ { unique: true }
25
+ )
26
+ @Index(
27
+ 'ix_data_set_history_1',
28
+ (dataSetHistory: DataSetHistory) => [dataSetHistory.domain, dataSetHistory.originalId, dataSetHistory.version],
29
+ { unique: true }
30
+ )
31
+ @ObjectType({ description: 'Entity for DataSetHistory' })
32
+ export class DataSetHistory implements HistoryEntityInterface<DataSet> {
33
+ @PrimaryGeneratedColumn('uuid')
34
+ @Field(type => ID)
35
+ readonly id: string
36
+
37
+ @Column({ default: 1 })
38
+ @Field({ nullable: true })
39
+ readonly version: number = 1
40
+
41
+ @ManyToOne(type => Domain)
42
+ @Field({ nullable: true })
43
+ domain?: Domain
44
+
45
+ @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.domain)
46
+ domainId?: string
47
+
48
+ @Column()
49
+ @Field()
50
+ name: string
51
+
52
+ @Column({ nullable: true })
53
+ @Field({ nullable: true })
54
+ description?: string
55
+
56
+ @Column({ nullable: true })
57
+ @Field({ nullable: true })
58
+ active?: boolean
59
+
60
+ @ManyToOne(type => Role, { nullable: true })
61
+ @Field(type => Role, { nullable: true })
62
+ entryRole?: Role
63
+
64
+ @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.entryRole)
65
+ entryRoleId?: string
66
+
67
+ @ManyToOne(type => Role, { nullable: true })
68
+ @Field(type => Role, { nullable: true })
69
+ supervisoryRole?: Role
70
+
71
+ @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.supervisoryRole)
72
+ supervisoryRoleId?: string
73
+
74
+ @Column({ nullable: true })
75
+ @Field({ nullable: true })
76
+ type?: 'manual' | 'automatic' | string
77
+
78
+ @Column({ nullable: true })
79
+ @Field({ nullable: true })
80
+ entryType?: DataSetEntryType
81
+
82
+ @Column({ nullable: true })
83
+ @Field({ nullable: true })
84
+ entryView?: string
85
+
86
+ @Column({ nullable: true })
87
+ @Field({ nullable: true })
88
+ monitorType?: DataSetMonitorType
89
+
90
+ @Column({ nullable: true })
91
+ @Field({ nullable: true })
92
+ monitorView?: string
93
+
94
+ @Column({ nullable: true })
95
+ @Field({ nullable: true })
96
+ reportType?: DataSetReportType
97
+
98
+ @Column({ nullable: true })
99
+ @Field({ nullable: true })
100
+ reportView?: string
101
+
102
+ @Field({ nullable: true })
103
+ reportTemplate?: string
104
+
105
+ @Column({ nullable: true })
106
+ @Field({ nullable: true })
107
+ useCase?: string
108
+
109
+ @Column('simple-json', { nullable: true })
110
+ @Field(type => ScalarObject, { nullable: true })
111
+ partitionKeys?: ScalarObject
112
+
113
+ @Column('simple-json', { nullable: true })
114
+ @Field(type => [DataItem], { nullable: true })
115
+ dataItems: DataItem[]
116
+
117
+ @Column({ nullable: true })
118
+ @Field({ nullable: true })
119
+ schedule?: string
120
+
121
+ @Column({ nullable: true })
122
+ @Field({ nullable: true })
123
+ timezone?: string
124
+
125
+ @Column({ nullable: true })
126
+ @Field({ nullable: true })
127
+ createdAt?: Date
128
+
129
+ @Column({ nullable: true })
130
+ @Field({ nullable: true })
131
+ updatedAt?: Date
132
+
133
+ @ManyToOne(type => User, { nullable: true })
134
+ @Field({ nullable: true })
135
+ creator?: User
136
+
137
+ @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.creator)
138
+ creatorId?: string
139
+
140
+ @ManyToOne(type => User, { nullable: true })
141
+ @Field({ nullable: true })
142
+ updater?: User
143
+
144
+ @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.creator)
145
+ updaterId?: string
146
+
147
+ @HistoryOriginalIdColumn({ nullable: true })
148
+ public originalId!: string
149
+
150
+ @HistoryActionColumn({
151
+ nullable: false,
152
+ type:
153
+ DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
154
+ ? 'enum'
155
+ : DATABASE_TYPE == 'oracle'
156
+ ? 'varchar2'
157
+ : 'smallint',
158
+ enum: HistoryActionType
159
+ })
160
+ public action!: HistoryActionType
161
+ }
@@ -0,0 +1,17 @@
1
+ import { EventSubscriber } from 'typeorm'
2
+
3
+ import { HistoryEntitySubscriber } from '@anchan828/typeorm-history'
4
+
5
+ import { DataSet } from '../data-set/data-set'
6
+ import { DataSetHistory } from './data-set-history'
7
+
8
+ @EventSubscriber()
9
+ export class DataSetHistoryEntitySubscriber extends HistoryEntitySubscriber<DataSet, DataSetHistory> {
10
+ public get entity() {
11
+ return DataSet
12
+ }
13
+
14
+ public get historyEntity() {
15
+ return DataSetHistory
16
+ }
17
+ }
@@ -0,0 +1,7 @@
1
+ import { DataSetHistory } from './data-set-history'
2
+ import { DataSetHistoryQuery } from './data-set-history-query'
3
+ import { DataSetHistoryEntitySubscriber } from './event-subscriber'
4
+
5
+ export const entities = [DataSetHistory]
6
+ export const resolvers = [DataSetHistoryQuery]
7
+ export const subscribers = [DataSetHistoryEntitySubscriber]
@@ -1,37 +1,49 @@
1
- import { entities as DataItemEntities, resolvers as DataItemResolvers } from './data-item'
1
+ import { entities as DataItemEntities } from './data-item'
2
2
  /* IMPORT ENTITIES AND RESOLVERS */
3
3
  import { entities as DataOocEntities, resolvers as DataOocResolvers } from './data-ooc'
4
4
  import { entities as DataSampleEntities, resolvers as DataSampleResolvers } from './data-sample'
5
5
  import { entities as DataSensorEntities, resolvers as DataSensorResolvers } from './data-sensor'
6
6
  import { entities as DataSetEntities, resolvers as DataSetResolvers } from './data-set'
7
+ import {
8
+ entities as DataSetHistoryEntities,
9
+ resolvers as DataSetHistoryResolvers,
10
+ subscribers as DataSetHistorySubscribers
11
+ } from './data-set-history'
7
12
  import { entities as DataSpecEntities, resolvers as DataSpecResolvers } from './data-spec'
8
13
 
9
14
  /* EXPORT ENTITY TYPES */
10
15
  export * from './data-ooc/data-ooc'
11
16
  export * from './data-sensor/data-sensor'
12
17
  export * from './data-sample/data-sample'
13
- export * from './data-item/data-item'
14
18
  export * from './data-set/data-set'
19
+ export * from './data-set-history/data-set-history'
20
+ export * from './data-set/data-item-type'
15
21
  export * from './data-spec/data-spec'
16
22
 
17
23
  export const entities = [
18
24
  /* ENTITIES */
25
+ ...DataItemEntities,
19
26
  ...DataOocEntities,
20
27
  ...DataSensorEntities,
21
28
  ...DataSampleEntities,
22
- ...DataItemEntities,
23
29
  ...DataSetEntities,
30
+ ...DataSetHistoryEntities,
24
31
  ...DataSpecEntities
25
32
  ]
26
33
 
34
+ export const subscribers = [
35
+ /* SUBSCRIBERS */
36
+ ...DataSetHistorySubscribers
37
+ ]
38
+
27
39
  export const schema = {
28
40
  resolverClasses: [
29
41
  /* RESOLVER CLASSES */
30
42
  ...DataOocResolvers,
31
43
  ...DataSensorResolvers,
32
44
  ...DataSampleResolvers,
33
- ...DataItemResolvers,
34
45
  ...DataSetResolvers,
46
+ ...DataSetHistoryResolvers,
35
47
  ...DataSpecResolvers
36
48
  ]
37
49
  }
@@ -32,7 +32,7 @@
32
32
  "field.report-view": "report view",
33
33
  "field.serial-no": "serial #",
34
34
  "field.spec": "spec",
35
- "field.state": "state",
35
+ "field.status": "status",
36
36
  "field.supervisory-role": "supervisory role",
37
37
  "field.tag": "tag name",
38
38
  "field.unit": "unit",
@@ -40,11 +40,11 @@
40
40
  "field.work-date": "work date",
41
41
  "field.work-shift": "work shift",
42
42
  "label.acceptables": "acceptables",
43
- "label.critical limits": "critical limits",
43
+ "label.critical-limits": "critical limits",
44
44
  "label.minimum value": "minimum value",
45
45
  "label.maximum value": "maximum value",
46
- "label.pass limits": "pass limits",
47
- "label.target limits": "target limits",
46
+ "label.pass-limits": "pass limits",
47
+ "label.target-limits": "target limits",
48
48
  "text.automatically collected": "automatically collected",
49
49
  "text.data sample created successfully": "a data sample created successfully",
50
50
  "text.data ooc updated successfully": "a data ooc updated successfully",
@@ -61,4 +61,4 @@
61
61
  "title.data-sensor list": "data sensor list",
62
62
  "title.data-set list": "data set list",
63
63
  "title.edit code": "edit code"
64
- }
64
+ }