@things-factory/dataset 5.0.0-zeta.9 → 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 (62) hide show
  1. package/client/{pages/data-entry → components}/data-entry-form.js +1 -1
  2. package/client/index.js +1 -0
  3. package/client/pages/data-entry/data-entry-list-page.js +2 -2
  4. package/client/pages/data-ooc/data-ooc-list-page.js +12 -17
  5. package/client/pages/data-report/data-report-list-page.js +1 -1
  6. package/client/pages/data-sample/data-sample-list-page.js +11 -12
  7. package/client/pages/data-sensor/data-sensor-list-page.js +1 -1
  8. package/client/pages/data-set/data-set-list-page.js +3 -2
  9. package/config/config.development.js +1 -1
  10. package/config/config.production.js +13 -1
  11. package/dist-server/controllers/create-data-sample.js +4 -37
  12. package/dist-server/controllers/create-data-sample.js.map +1 -1
  13. package/dist-server/controllers/data-use-case.js +11 -5
  14. package/dist-server/controllers/data-use-case.js.map +1 -1
  15. package/dist-server/controllers/jasper-report.js +14 -9
  16. package/dist-server/controllers/jasper-report.js.map +1 -1
  17. package/dist-server/service/data-ooc/data-ooc-query.js +4 -17
  18. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -1
  19. package/dist-server/service/data-ooc/data-ooc.js +7 -15
  20. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  21. package/dist-server/service/data-sample/data-sample-query.js +4 -4
  22. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  23. package/dist-server/service/data-sample/data-sample.js +7 -3
  24. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  25. package/dist-server/service/data-set/data-set-mutation.js +5 -22
  26. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  27. package/dist-server/service/data-set/data-set-query.js +1 -1
  28. package/dist-server/service/data-set/data-set-type.js +12 -9
  29. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  30. package/dist-server/service/data-set/data-set.js +1 -4
  31. package/dist-server/service/data-set/data-set.js.map +1 -1
  32. package/dist-server/service/data-set-history/data-set-history-query.js +2 -2
  33. package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -1
  34. package/dist-server/service/data-set-history/data-set-history.js +46 -55
  35. package/dist-server/service/data-set-history/data-set-history.js.map +1 -1
  36. package/dist-server/service/data-set-history/event-subscriber.js +26 -0
  37. package/dist-server/service/data-set-history/event-subscriber.js.map +1 -0
  38. package/dist-server/service/data-set-history/index.js +3 -1
  39. package/dist-server/service/data-set-history/index.js.map +1 -1
  40. package/dist-server/service/index.js +5 -1
  41. package/dist-server/service/index.js.map +1 -1
  42. package/package.json +18 -18
  43. package/server/controllers/create-data-sample.ts +5 -37
  44. package/server/controllers/data-use-case.ts +17 -6
  45. package/server/controllers/jasper-report.ts +58 -48
  46. package/server/service/data-ooc/data-ooc-query.ts +3 -11
  47. package/server/service/data-ooc/data-ooc.ts +6 -16
  48. package/server/service/data-sample/data-sample-query.ts +3 -3
  49. package/server/service/data-sample/data-sample.ts +6 -4
  50. package/server/service/data-set/data-set-mutation.ts +0 -31
  51. package/server/service/data-set/data-set-query.ts +1 -1
  52. package/server/service/data-set/data-set-type.ts +2 -1
  53. package/server/service/data-set/data-set.ts +3 -5
  54. package/server/service/data-set-history/data-set-history-query.ts +2 -2
  55. package/server/service/data-set-history/data-set-history.ts +61 -60
  56. package/server/service/data-set-history/event-subscriber.ts +17 -0
  57. package/server/service/data-set-history/index.ts +2 -0
  58. package/server/service/index.ts +10 -1
  59. package/translations/en.json +1 -1
  60. package/translations/ko.json +2 -2
  61. package/translations/ms.json +1 -1
  62. package/translations/zh.json +1 -1
@@ -3,7 +3,6 @@ import { In } from 'typeorm'
3
3
 
4
4
  import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
5
5
 
6
- import { DataSetHistory } from '../data-set-history/data-set-history'
7
6
  import { DataSet } from './data-set'
8
7
  import { DataSetPatch, NewDataSet } from './data-set-type'
9
8
 
@@ -17,7 +16,6 @@ export class DataSetMutation {
17
16
  async createDataSet(@Arg('dataSet') dataSet: NewDataSet, @Ctx() context: any): Promise<DataSet> {
18
17
  const { domain, user, tx } = context.state
19
18
  const dataSetRepo = tx.getRepository(DataSet)
20
- const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
21
19
 
22
20
  const result = await dataSetRepo.save({
23
21
  ...dataSet,
@@ -29,12 +27,6 @@ export class DataSetMutation {
29
27
 
30
28
  await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: '+' })
31
29
 
32
- await dataSetHistoryRepo.save(
33
- await dataSetRepo.findOne(result.id, {
34
- relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
35
- })
36
- )
37
-
38
30
  return result
39
31
  }
40
32
 
@@ -44,7 +36,6 @@ export class DataSetMutation {
44
36
  async updateDataSet(@Arg('id') id: string, @Arg('patch') patch: DataSetPatch, @Ctx() context: any): Promise<DataSet> {
45
37
  const { domain, user, tx } = context.state
46
38
  const dataSetRepo = tx.getRepository(DataSet)
47
- const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
48
39
 
49
40
  const dataSet = await dataSetRepo.findOne({
50
41
  where: { domain, id }
@@ -53,18 +44,11 @@ export class DataSetMutation {
53
44
  const result = await dataSetRepo.save({
54
45
  ...dataSet,
55
46
  ...patch,
56
- version: (dataSet.version || 0) + 1,
57
47
  updater: user
58
48
  })
59
49
 
60
50
  await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: 'M' })
61
51
 
62
- await dataSetHistoryRepo.save(
63
- await dataSetRepo.findOne(id, {
64
- relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
65
- })
66
- )
67
-
68
52
  return result
69
53
  }
70
54
 
@@ -77,7 +61,6 @@ export class DataSetMutation {
77
61
  ): Promise<DataSet[]> {
78
62
  const { domain, user, tx } = context.state
79
63
  const dataSetRepo = tx.getRepository(DataSet)
80
- const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
81
64
 
82
65
  let results = []
83
66
  const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
@@ -90,7 +73,6 @@ export class DataSetMutation {
90
73
 
91
74
  const result = await dataSetRepo.save({
92
75
  ...newRecord,
93
- version: 1,
94
76
  domain,
95
77
  creator: user,
96
78
  updater: user
@@ -116,7 +98,6 @@ export class DataSetMutation {
116
98
  const result = await dataSetRepo.save({
117
99
  ...dataSet,
118
100
  ...newRecord,
119
- version: (dataSet.version || 0) + 1,
120
101
  updater: user
121
102
  })
122
103
 
@@ -131,8 +112,6 @@ export class DataSetMutation {
131
112
  }
132
113
  }
133
114
 
134
- results.forEach(result => dataSetHistoryRepo.save({ ...result }))
135
-
136
115
  return results
137
116
  }
138
117
 
@@ -172,20 +151,13 @@ export class DataSetMutation {
172
151
  ): Promise<boolean> {
173
152
  const { domain, tx } = context.state
174
153
  const dataSetRepo = tx.getRepository(DataSet)
175
- const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
176
154
 
177
155
  await Promise.all(
178
156
  dataSets.map(async (dataSet: DataSet) => {
179
157
  const createdDataSet: DataSet = await dataSetRepo.save({
180
158
  domain,
181
- version: 1 /* overridable by dataSet's origin value */,
182
159
  ...dataSet
183
160
  })
184
- await dataSetHistoryRepo.save(
185
- ...(await dataSetRepo.findOne(createdDataSet.id, {
186
- relations: ['domain', 'creator', 'updater', 'supervisoryRole', 'entryRole']
187
- }))
188
- )
189
161
  })
190
162
  )
191
163
 
@@ -198,7 +170,6 @@ export class DataSetMutation {
198
170
  async copyDataSets(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<DataSet[]> {
199
171
  const { domain, user, tx } = context.state
200
172
  const dataSetRepo = tx.getRepository(DataSet)
201
- const dataSetHistoryRepo = tx.getRepository(DataSetHistory)
202
173
 
203
174
  const originals = await dataSetRepo.find({
204
175
  where: {
@@ -220,7 +191,6 @@ export class DataSetMutation {
220
191
  id: dataSetId,
221
192
  name: dataSet.name + ' (' + dataSetId + ')',
222
193
  active: false,
223
- version: 1,
224
194
  domain,
225
195
  creator: user,
226
196
  updater: user
@@ -228,7 +198,6 @@ export class DataSetMutation {
228
198
  })
229
199
 
230
200
  var copiedDataSets = await dataSetRepo.save(newCopys)
231
- await dataSetHistoryRepo.save(copiedDataSets)
232
201
 
233
202
  return copiedDataSets
234
203
  }
@@ -103,7 +103,7 @@ 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 */
106
+ /* TODO this fieldResolver should be removed. This is only for migration temporarily */
107
107
  if (dataSet.dataItems) {
108
108
  return dataSet.dataItems as DataItem[]
109
109
  }
@@ -1,4 +1,5 @@
1
- import { FileUpload, GraphQLUpload } from 'graphql-upload'
1
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
+ import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
2
3
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
3
4
 
4
5
  import { ObjectRef, ScalarObject } from '@things-factory/shell'
@@ -7,7 +7,8 @@ import {
7
7
  ManyToOne,
8
8
  PrimaryGeneratedColumn,
9
9
  RelationId,
10
- UpdateDateColumn
10
+ UpdateDateColumn,
11
+ VersionColumn
11
12
  } from 'typeorm'
12
13
 
13
14
  import { Role, User } from '@things-factory/auth-base'
@@ -76,10 +77,7 @@ export class DataSet {
76
77
  @Field({ nullable: true })
77
78
  description?: string
78
79
 
79
- @Column({
80
- nullable: true,
81
- default: 1
82
- })
80
+ @VersionColumn({ nullable: true, default: 1 })
83
81
  @Field({ nullable: true })
84
82
  version?: number = 1
85
83
 
@@ -21,7 +21,7 @@ export class DataSetHistoryQuery {
21
21
  const { domain } = context.state
22
22
 
23
23
  return await getRepository(DataSetHistory).findOne({
24
- where: { domain, id, updatedAt: timestamp }
24
+ where: { domain, originalId: id, updatedAt: timestamp }
25
25
  })
26
26
  }
27
27
 
@@ -101,7 +101,7 @@ export class DataSetHistoryQuery {
101
101
  const attachment: Attachment = await getRepository(Attachment).findOne({
102
102
  where: {
103
103
  domain: dataSetHistory.domainId,
104
- refBy: `report-${dataSetHistory.id}`
104
+ refBy: `report-${dataSetHistory.originalId}`
105
105
  }
106
106
  })
107
107
 
@@ -1,22 +1,42 @@
1
1
  import { Field, ID, ObjectType } from 'type-graphql'
2
- import { Column, Entity, ManyToOne, PrimaryColumn, RelationId } from 'typeorm'
3
-
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'
4
10
  import { Role, User } from '@things-factory/auth-base'
11
+ import { config } from '@things-factory/env'
5
12
  import { Domain, ScalarObject } from '@things-factory/shell'
6
13
 
7
14
  import { DataItem } from '../data-set/data-item-type'
8
- import { DataSetEntryType, DataSetMonitorType, DataSetReportType } from '../data-set/data-set'
15
+ import { DataSet, DataSetEntryType, DataSetMonitorType, DataSetReportType } from '../data-set/data-set'
16
+
17
+ const ORMCONFIG = config.get('ormconfig', {})
18
+ const DATABASE_TYPE = ORMCONFIG.type
9
19
 
10
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
+ )
11
31
  @ObjectType({ description: 'Entity for DataSetHistory' })
12
- export class DataSetHistory {
13
- @PrimaryColumn()
32
+ export class DataSetHistory implements HistoryEntityInterface<DataSet> {
33
+ @PrimaryGeneratedColumn('uuid')
14
34
  @Field(type => ID)
15
35
  readonly id: string
16
36
 
17
- @PrimaryColumn()
18
- @Field()
19
- readonly version: number
37
+ @Column({ default: 1 })
38
+ @Field({ nullable: true })
39
+ readonly version: number = 1
20
40
 
21
41
  @ManyToOne(type => Domain)
22
42
  @Field({ nullable: true })
@@ -29,84 +49,60 @@ export class DataSetHistory {
29
49
  @Field()
30
50
  name: string
31
51
 
32
- @Column({
33
- nullable: true
34
- })
52
+ @Column({ nullable: true })
35
53
  @Field({ nullable: true })
36
54
  description?: string
37
55
 
38
- @Column({
39
- nullable: true
40
- })
56
+ @Column({ nullable: true })
41
57
  @Field({ nullable: true })
42
58
  active?: boolean
43
59
 
44
- @ManyToOne(type => Role, {
45
- nullable: true
46
- })
60
+ @ManyToOne(type => Role, { nullable: true })
47
61
  @Field(type => Role, { nullable: true })
48
62
  entryRole?: Role
49
63
 
50
64
  @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.entryRole)
51
65
  entryRoleId?: string
52
66
 
53
- @ManyToOne(type => Role, {
54
- nullable: true
55
- })
67
+ @ManyToOne(type => Role, { nullable: true })
56
68
  @Field(type => Role, { nullable: true })
57
69
  supervisoryRole?: Role
58
70
 
59
71
  @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.supervisoryRole)
60
72
  supervisoryRoleId?: string
61
73
 
62
- @Column({
63
- nullable: true
64
- })
74
+ @Column({ nullable: true })
65
75
  @Field({ nullable: true })
66
76
  type?: 'manual' | 'automatic' | string
67
77
 
68
- @Column({
69
- nullable: true
70
- })
78
+ @Column({ nullable: true })
71
79
  @Field({ nullable: true })
72
80
  entryType?: DataSetEntryType
73
81
 
74
- @Column({
75
- nullable: true
76
- })
82
+ @Column({ nullable: true })
77
83
  @Field({ nullable: true })
78
84
  entryView?: string
79
85
 
80
- @Column({
81
- nullable: true
82
- })
86
+ @Column({ nullable: true })
83
87
  @Field({ nullable: true })
84
88
  monitorType?: DataSetMonitorType
85
89
 
86
- @Column({
87
- nullable: true
88
- })
90
+ @Column({ nullable: true })
89
91
  @Field({ nullable: true })
90
92
  monitorView?: string
91
93
 
92
- @Column({
93
- nullable: true
94
- })
94
+ @Column({ nullable: true })
95
95
  @Field({ nullable: true })
96
96
  reportType?: DataSetReportType
97
97
 
98
- @Column({
99
- nullable: true
100
- })
98
+ @Column({ nullable: true })
101
99
  @Field({ nullable: true })
102
100
  reportView?: string
103
101
 
104
102
  @Field({ nullable: true })
105
103
  reportTemplate?: string
106
104
 
107
- @Column({
108
- nullable: true
109
- })
105
+ @Column({ nullable: true })
110
106
  @Field({ nullable: true })
111
107
  useCase?: string
112
108
 
@@ -118,43 +114,48 @@ export class DataSetHistory {
118
114
  @Field(type => [DataItem], { nullable: true })
119
115
  dataItems: DataItem[]
120
116
 
121
- @Column({
122
- nullable: true
123
- })
117
+ @Column({ nullable: true })
124
118
  @Field({ nullable: true })
125
119
  schedule?: string
126
120
 
127
- @Column({
128
- nullable: true
129
- })
121
+ @Column({ nullable: true })
130
122
  @Field({ nullable: true })
131
123
  timezone?: string
132
124
 
133
- @Column({
134
- nullable: true
135
- })
125
+ @Column({ nullable: true })
136
126
  @Field({ nullable: true })
137
127
  createdAt?: Date
138
128
 
139
- @PrimaryColumn()
129
+ @Column({ nullable: true })
140
130
  @Field({ nullable: true })
141
131
  updatedAt?: Date
142
132
 
143
- @ManyToOne(type => User, {
144
- nullable: true
145
- })
133
+ @ManyToOne(type => User, { nullable: true })
146
134
  @Field({ nullable: true })
147
135
  creator?: User
148
136
 
149
137
  @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.creator)
150
138
  creatorId?: string
151
139
 
152
- @ManyToOne(type => User, {
153
- nullable: true
154
- })
140
+ @ManyToOne(type => User, { nullable: true })
155
141
  @Field({ nullable: true })
156
142
  updater?: User
157
143
 
158
144
  @RelationId((dataSetHistory: DataSetHistory) => dataSetHistory.creator)
159
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
160
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
+ }
@@ -1,5 +1,7 @@
1
1
  import { DataSetHistory } from './data-set-history'
2
2
  import { DataSetHistoryQuery } from './data-set-history-query'
3
+ import { DataSetHistoryEntitySubscriber } from './event-subscriber'
3
4
 
4
5
  export const entities = [DataSetHistory]
5
6
  export const resolvers = [DataSetHistoryQuery]
7
+ export const subscribers = [DataSetHistoryEntitySubscriber]
@@ -4,7 +4,11 @@ import { entities as DataOocEntities, resolvers as DataOocResolvers } from './da
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 { entities as DataSetHistoryEntities, resolvers as DataSetHistoryResolvers } from './data-set-history'
7
+ import {
8
+ entities as DataSetHistoryEntities,
9
+ resolvers as DataSetHistoryResolvers,
10
+ subscribers as DataSetHistorySubscribers
11
+ } from './data-set-history'
8
12
  import { entities as DataSpecEntities, resolvers as DataSpecResolvers } from './data-spec'
9
13
 
10
14
  /* EXPORT ENTITY TYPES */
@@ -27,6 +31,11 @@ export const entities = [
27
31
  ...DataSpecEntities
28
32
  ]
29
33
 
34
+ export const subscribers = [
35
+ /* SUBSCRIBERS */
36
+ ...DataSetHistorySubscribers
37
+ ]
38
+
30
39
  export const schema = {
31
40
  resolverClasses: [
32
41
  /* RESOLVER CLASSES */
@@ -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",
@@ -32,7 +32,7 @@
32
32
  "field.report-view": "리포트용 화면",
33
33
  "field.serial-no": "시리얼번호",
34
34
  "field.spec": "명세",
35
- "field.state": "상태",
35
+ "field.status": "상태",
36
36
  "field.supervisory-role": "관리자 역할",
37
37
  "field.tag": "태그이름",
38
38
  "field.unit": "단위",
@@ -41,8 +41,8 @@
41
41
  "field.work-shift": "교대근무조",
42
42
  "label.acceptables": "허용값",
43
43
  "label.critical-limits": "허용 한계범위",
44
- "label.maximum value": "최대값",
45
44
  "label.minimum value": "최소값",
45
+ "label.maximum value": "최대값",
46
46
  "label.pass-limits": "통과 허용범위",
47
47
  "label.target-limits": "관리 목표범위",
48
48
  "text.automatically collected": "자동 수집",
@@ -31,7 +31,7 @@
31
31
  "field.report-view": "report view",
32
32
  "field.serial-no": "serial #",
33
33
  "field.spec": "spec",
34
- "field.state": "keadaan",
34
+ "field.status": "keadaan",
35
35
  "field.supervisory-role": "supervisory role",
36
36
  "field.tag": "tag name",
37
37
  "field.unit": "unit",
@@ -31,7 +31,7 @@
31
31
  "field.report-view": "report view",
32
32
  "field.serial-no": "serial #",
33
33
  "field.spec": "spec",
34
- "field.state": "状态",
34
+ "field.status": "状态",
35
35
  "field.supervisory-role": "supervisory role",
36
36
  "field.tag": "tag name",
37
37
  "field.unit": "unit",