@things-factory/dataset 5.0.0 → 5.0.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.
Files changed (67) hide show
  1. package/README.md +25 -0
  2. package/assets/data-samples.jpg +0 -0
  3. package/client/pages/data-key-set/data-key-item-list.js +196 -0
  4. package/client/pages/data-key-set/data-key-set-importer.js +107 -0
  5. package/client/pages/data-key-set/data-key-set-list-page.js +354 -0
  6. package/client/pages/data-ooc/data-ooc-list-page.js +60 -0
  7. package/client/pages/data-sample/data-sample-list-page.js +60 -0
  8. package/client/pages/data-sample/data-sample-search-page.js +439 -0
  9. package/client/pages/data-set/data-set-list-page.js +20 -1
  10. package/client/route.js +9 -1
  11. package/dist-server/controllers/create-data-sample.js +15 -3
  12. package/dist-server/controllers/create-data-sample.js.map +1 -1
  13. package/dist-server/service/data-key-set/data-key-item-type.js +58 -0
  14. package/dist-server/service/data-key-set/data-key-item-type.js.map +1 -0
  15. package/dist-server/service/data-key-set/data-key-set-mutation.js +179 -0
  16. package/dist-server/service/data-key-set/data-key-set-mutation.js.map +1 -0
  17. package/dist-server/service/data-key-set/data-key-set-query.js +110 -0
  18. package/dist-server/service/data-key-set/data-key-set-query.js.map +1 -0
  19. package/dist-server/service/data-key-set/data-key-set-type.js +94 -0
  20. package/dist-server/service/data-key-set/data-key-set-type.js.map +1 -0
  21. package/dist-server/service/data-key-set/data-key-set.js +101 -0
  22. package/dist-server/service/data-key-set/data-key-set.js.map +1 -0
  23. package/dist-server/service/data-key-set/index.js +9 -0
  24. package/dist-server/service/data-key-set/index.js.map +1 -0
  25. package/dist-server/service/data-ooc/data-ooc.js +32 -0
  26. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  27. package/dist-server/service/data-sample/data-sample-query.js +27 -1
  28. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  29. package/dist-server/service/data-sample/data-sample.js +41 -0
  30. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  31. package/dist-server/service/data-set/data-item-type.js +1 -1
  32. package/dist-server/service/data-set/data-item-type.js.map +1 -1
  33. package/dist-server/service/data-set/data-set-mutation.js +8 -8
  34. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  35. package/dist-server/service/data-set/data-set-query.js +16 -1
  36. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  37. package/dist-server/service/data-set/data-set-type.js +14 -6
  38. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  39. package/dist-server/service/data-set/data-set.js +32 -54
  40. package/dist-server/service/data-set/data-set.js.map +1 -1
  41. package/dist-server/service/data-set-history/data-set-history-query.js +3 -1
  42. package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -1
  43. package/dist-server/service/index.js +4 -1
  44. package/dist-server/service/index.js.map +1 -1
  45. package/package.json +12 -12
  46. package/server/controllers/create-data-sample.ts +19 -12
  47. package/server/service/data-key-set/data-key-item-type.ts +31 -0
  48. package/server/service/data-key-set/data-key-set-mutation.ts +198 -0
  49. package/server/service/data-key-set/data-key-set-query.ts +65 -0
  50. package/server/service/data-key-set/data-key-set-type.ts +57 -0
  51. package/server/service/data-key-set/data-key-set.ts +81 -0
  52. package/server/service/data-key-set/index.ts +6 -0
  53. package/server/service/data-ooc/data-ooc.ts +20 -0
  54. package/server/service/data-sample/data-sample-query.ts +27 -0
  55. package/server/service/data-sample/data-sample.ts +33 -0
  56. package/server/service/data-set/data-item-type.ts +1 -1
  57. package/server/service/data-set/data-set-mutation.ts +8 -8
  58. package/server/service/data-set/data-set-query.ts +13 -1
  59. package/server/service/data-set/data-set-type.ts +6 -0
  60. package/server/service/data-set/data-set.ts +24 -48
  61. package/server/service/data-set-history/data-set-history-query.ts +3 -1
  62. package/server/service/index.ts +4 -1
  63. package/things-factory.config.js +8 -0
  64. package/translations/en.json +11 -0
  65. package/translations/ko.json +11 -0
  66. package/translations/ms.json +12 -1
  67. package/translations/zh.json +11 -0
@@ -0,0 +1,65 @@
1
+ import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
+ import { getRepository } from 'typeorm'
3
+
4
+ import { Attachment } from '@things-factory/attachment-base'
5
+ import { User } from '@things-factory/auth-base'
6
+ import { Domain, getQueryBuilderFromListParams, ListParam } from '@things-factory/shell'
7
+
8
+ import { DataKeySet } from './data-key-set'
9
+ import { DataKeySetList } from './data-key-set-type'
10
+
11
+ @Resolver(DataKeySet)
12
+ export class DataKeySetQuery {
13
+ @Query(returns => DataKeySet!, { nullable: true, description: 'To fetch a DataKeySet' })
14
+ async dataKeySet(@Arg('id') id: string, @Ctx() context: any): Promise<DataKeySet> {
15
+ const { domain } = context.state
16
+
17
+ return await getRepository(DataKeySet).findOne({
18
+ where: { domain, id }
19
+ })
20
+ }
21
+
22
+ @Query(returns => DataKeySetList, { description: 'To fetch multiple DataKeySets' })
23
+ async dataKeySets(@Args() params: ListParam, @Ctx() context: any): Promise<DataKeySetList> {
24
+ const { domain } = context.state
25
+
26
+ const queryBuilder = getQueryBuilderFromListParams({
27
+ domain,
28
+ params,
29
+ repository: await getRepository(DataKeySet),
30
+ searchables: ['name', 'description']
31
+ })
32
+
33
+ const [items, total] = await queryBuilder.getManyAndCount()
34
+
35
+ return { items, total }
36
+ }
37
+
38
+ @FieldResolver(type => String)
39
+ async thumbnail(@Root() dataKeySet: DataKeySet): Promise<string | undefined> {
40
+ const attachment: Attachment = await getRepository(Attachment).findOne({
41
+ where: {
42
+ domain: dataKeySet.domainId,
43
+ refType: DataKeySet.name,
44
+ refBy: dataKeySet.id
45
+ }
46
+ })
47
+
48
+ return attachment?.fullpath
49
+ }
50
+
51
+ @FieldResolver(type => Domain)
52
+ async domain(@Root() dataKeySet: DataKeySet): Promise<Domain> {
53
+ return await getRepository(Domain).findOne(dataKeySet.domainId)
54
+ }
55
+
56
+ @FieldResolver(type => User)
57
+ async updater(@Root() dataKeySet: DataKeySet): Promise<User> {
58
+ return await getRepository(User).findOne(dataKeySet.updaterId)
59
+ }
60
+
61
+ @FieldResolver(type => User)
62
+ async creator(@Root() dataKeySet: DataKeySet): Promise<User> {
63
+ return await getRepository(User).findOne(dataKeySet.creatorId)
64
+ }
65
+ }
@@ -0,0 +1,57 @@
1
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
+ import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
3
+ import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
4
+
5
+ import { DataKeyItemPatch } from './data-key-item-type'
6
+ import { DataKeySet } from './data-key-set'
7
+
8
+ @InputType()
9
+ export class NewDataKeySet {
10
+ @Field()
11
+ name: string
12
+
13
+ @Field({ nullable: true })
14
+ description?: string
15
+
16
+ @Field({ nullable: true })
17
+ active?: boolean
18
+
19
+ @Field(type => [DataKeyItemPatch], { nullable: true })
20
+ dataKeyItems?: DataKeyItemPatch[]
21
+
22
+ @Field(type => GraphQLUpload, { nullable: true })
23
+ thumbnail?: FileUpload
24
+ }
25
+
26
+ @InputType()
27
+ export class DataKeySetPatch {
28
+ @Field(type => ID, { nullable: true })
29
+ id?: string
30
+
31
+ @Field({ nullable: true })
32
+ name?: string
33
+
34
+ @Field({ nullable: true })
35
+ description?: string
36
+
37
+ @Field({ nullable: true })
38
+ active?: boolean
39
+
40
+ @Field(type => [DataKeyItemPatch], { nullable: true })
41
+ dataKeyItems?: DataKeyItemPatch[]
42
+
43
+ @Field(type => GraphQLUpload, { nullable: true })
44
+ thumbnail?: FileUpload
45
+
46
+ @Field({ nullable: true })
47
+ cuFlag?: string
48
+ }
49
+
50
+ @ObjectType()
51
+ export class DataKeySetList {
52
+ @Field(type => [DataKeySet])
53
+ items: DataKeySet[]
54
+
55
+ @Field(type => Int)
56
+ total: number
57
+ }
@@ -0,0 +1,81 @@
1
+ import { Field, ID, ObjectType } from 'type-graphql'
2
+ import {
3
+ Column,
4
+ CreateDateColumn,
5
+ Entity,
6
+ Index,
7
+ ManyToOne,
8
+ PrimaryGeneratedColumn,
9
+ RelationId,
10
+ UpdateDateColumn
11
+ } from 'typeorm'
12
+
13
+ import { User } from '@things-factory/auth-base'
14
+ import { Domain } from '@things-factory/shell'
15
+
16
+ import { DataKeyItem } from './data-key-item-type'
17
+
18
+ @Entity()
19
+ @Index('ix_data_key_set_0', (dataKeySet: DataKeySet) => [dataKeySet.domain, dataKeySet.name], { unique: true })
20
+ @ObjectType({ description: 'Entity for DataKeySet' })
21
+ export class DataKeySet {
22
+ @PrimaryGeneratedColumn('uuid')
23
+ @Field(type => ID)
24
+ readonly id: string
25
+
26
+ @ManyToOne(type => Domain)
27
+ @Field({ nullable: true })
28
+ domain?: Domain
29
+
30
+ @RelationId((dataKeySet: DataKeySet) => dataKeySet.domain)
31
+ domainId?: string
32
+
33
+ @Column()
34
+ @Field()
35
+ name: string
36
+
37
+ @Column({
38
+ nullable: true
39
+ })
40
+ @Field({ nullable: true })
41
+ description?: string
42
+
43
+ @Column({
44
+ nullable: true
45
+ })
46
+ @Field({ nullable: true })
47
+ active?: boolean
48
+
49
+ @Column('simple-json', { nullable: true })
50
+ @Field(type => [DataKeyItem], { nullable: true })
51
+ dataKeyItems: DataKeyItem[]
52
+
53
+ @CreateDateColumn()
54
+ @Field({ nullable: true })
55
+ createdAt?: Date
56
+
57
+ @UpdateDateColumn()
58
+ @Field({ nullable: true })
59
+ updatedAt?: Date
60
+
61
+ @ManyToOne(type => User, {
62
+ nullable: true
63
+ })
64
+ @Field({ nullable: true })
65
+ creator?: User
66
+
67
+ @RelationId((dataKeySet: DataKeySet) => dataKeySet.creator)
68
+ creatorId?: string
69
+
70
+ @ManyToOne(type => User, {
71
+ nullable: true
72
+ })
73
+ @Field({ nullable: true })
74
+ updater?: User
75
+
76
+ @RelationId((dataKeySet: DataKeySet) => dataKeySet.creator)
77
+ updaterId?: string
78
+
79
+ @Field(type => String, { nullable: true })
80
+ thumbnail?: string
81
+ }
@@ -0,0 +1,6 @@
1
+ import { DataKeySet } from './data-key-set'
2
+ import { DataKeySetQuery } from './data-key-set-query'
3
+ import { DataKeySetMutation } from './data-key-set-mutation'
4
+
5
+ export const entities = [DataKeySet]
6
+ export const resolvers = [DataKeySetQuery, DataKeySetMutation]
@@ -109,6 +109,26 @@ export class DataOoc {
109
109
  @Field({ nullable: true })
110
110
  useCase?: string
111
111
 
112
+ @Column({ nullable: true, default: '' })
113
+ @Field({ nullable: true })
114
+ key01?: string = ''
115
+
116
+ @Column({ nullable: true, default: '' })
117
+ @Field({ nullable: true })
118
+ key02?: string = ''
119
+
120
+ @Column({ nullable: true, default: '' })
121
+ @Field({ nullable: true })
122
+ key03?: string = ''
123
+
124
+ @Column({ nullable: true, default: '' })
125
+ @Field({ nullable: true })
126
+ key04?: string = ''
127
+
128
+ @Column({ nullable: true, default: '' })
129
+ @Field({ nullable: true })
130
+ key05?: string = ''
131
+
112
132
  @Column('simple-json', { nullable: true })
113
133
  @Field(type => ScalarObject, { nullable: true })
114
134
  partitionKeys?: ScalarObject
@@ -4,6 +4,7 @@ import { getRepository } from 'typeorm'
4
4
  import { User } from '@things-factory/auth-base'
5
5
  import { Domain, getQueryBuilderFromListParams, ListParam } from '@things-factory/shell'
6
6
 
7
+ import { DataKeySet } from '../data-key-set/data-key-set'
7
8
  import { DataSetHistory } from '../data-set-history/data-set-history'
8
9
  import { DataItem } from '../data-set/data-item-type'
9
10
  import { DataSet } from '../data-set/data-set'
@@ -39,6 +40,32 @@ export class DataSampleQuery {
39
40
  return { items, total }
40
41
  }
41
42
 
43
+ @Directive('@privilege(category: "data-sample", privilege: "query", domainOwnerGranted: true)')
44
+ @Query(returns => DataSampleList, { description: 'To fetch multiple data samples by data key set' })
45
+ async dataSamplesByDataKeySet(
46
+ @Arg('dataKeySetId') dataKeySetId: string,
47
+ @Args() params: ListParam,
48
+ @Ctx() context: any
49
+ ): Promise<DataSampleList> {
50
+ const { domain } = context.state
51
+
52
+ const dataKeySet = await getRepository(DataKeySet).findOne(dataKeySetId)
53
+ const dataKeyItems = dataKeySet?.dataKeyItems || []
54
+ const searchables = dataKeyItems.map((item, index) => `key0${index + 1}`)
55
+
56
+ /* TODO DataKeySet 과 관련된 DataSample만 조회되도록 할 것. */
57
+ const queryBuilder = getQueryBuilderFromListParams({
58
+ repository: getRepository(DataSample),
59
+ params,
60
+ domain,
61
+ searchables: ['name', 'description'].concat(searchables)
62
+ })
63
+
64
+ const [items, total] = await queryBuilder.getManyAndCount()
65
+
66
+ return { items, total }
67
+ }
68
+
42
69
  @FieldResolver(type => [DataItem])
43
70
  async dataItems(@Root() dataSample: DataSample): Promise<DataItem[]> {
44
71
  const dataSetHistory: DataSetHistory = await getRepository(DataSetHistory).findOne({
@@ -25,6 +25,19 @@ const DATABASE_TYPE = ORMCONFIG.type
25
25
  (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet, dataSample.collectedAt],
26
26
  { unique: false }
27
27
  )
28
+ @Index(
29
+ 'ix_data_sample_1',
30
+ (dataSample: DataSample) => [
31
+ dataSample.domain,
32
+ dataSample.key01,
33
+ dataSample.key02,
34
+ dataSample.key03,
35
+ dataSample.key04,
36
+ dataSample.key05,
37
+ dataSample.collectedAt
38
+ ],
39
+ { unique: false }
40
+ )
28
41
  @ObjectType({ description: 'Entity for DataSample' })
29
42
  export class DataSample {
30
43
  @PrimaryGeneratedColumn('uuid')
@@ -116,6 +129,26 @@ export class DataSample {
116
129
  @Field({ nullable: true })
117
130
  oos?: boolean
118
131
 
132
+ @Column({ nullable: true, default: '' })
133
+ @Field({ nullable: true })
134
+ key01?: string = ''
135
+
136
+ @Column({ nullable: true, default: '' })
137
+ @Field({ nullable: true })
138
+ key02?: string = ''
139
+
140
+ @Column({ nullable: true, default: '' })
141
+ @Field({ nullable: true })
142
+ key03?: string = ''
143
+
144
+ @Column({ nullable: true, default: '' })
145
+ @Field({ nullable: true })
146
+ key04?: string = ''
147
+
148
+ @Column({ nullable: true, default: '' })
149
+ @Field({ nullable: true })
150
+ key05?: string = ''
151
+
119
152
  @Column({ nullable: true })
120
153
  @Field({ nullable: true })
121
154
  workDate?: string
@@ -12,7 +12,7 @@ export enum DataItemType {
12
12
 
13
13
  registerEnumType(DataItemType, {
14
14
  name: 'DataItemType',
15
- description: 'state enumeration of a data-item'
15
+ description: 'type enumeration of a data-item'
16
16
  })
17
17
 
18
18
  @ObjectType({ description: 'Entity for DataItem' })
@@ -25,7 +25,7 @@ export class DataSetMutation {
25
25
  updater: user
26
26
  })
27
27
 
28
- await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: '+' })
28
+ await this._createAttachment(context, dataSet.reportTemplate, { ref: result, cuFlag: '+' })
29
29
 
30
30
  return result
31
31
  }
@@ -47,7 +47,7 @@ export class DataSetMutation {
47
47
  updater: user
48
48
  })
49
49
 
50
- await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: 'M' })
50
+ await this._createAttachment(context, dataSet.reportTemplate, { ref: result, cuFlag: 'M' })
51
51
 
52
52
  return result
53
53
  }
@@ -78,7 +78,7 @@ export class DataSetMutation {
78
78
  updater: user
79
79
  })
80
80
 
81
- await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
81
+ await this._createAttachment(context, newRecord.reportTemplate, { ref: result, cuFlag })
82
82
 
83
83
  results.push({
84
84
  ...(await dataSetRepo.findOne(result.id, {
@@ -101,7 +101,7 @@ export class DataSetMutation {
101
101
  updater: user
102
102
  })
103
103
 
104
- await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
104
+ await this._createAttachment(context, newRecord.reportTemplate, { ref: result, cuFlag })
105
105
 
106
106
  results.push({
107
107
  ...(await dataSetRepo.findOne(result.id, {
@@ -202,16 +202,16 @@ export class DataSetMutation {
202
202
  return copiedDataSets
203
203
  }
204
204
 
205
- async _createAttachment(context, attachment, { refId, cuFlag }) {
205
+ async _createAttachment(context, attachment, { ref, cuFlag }) {
206
206
  if (attachment) {
207
- const attachmentRef = 'report-' + refId
208
- cuFlag == 'M' && (await deleteAttachmentsByRef(null, { refBys: [attachmentRef] }, context))
207
+ cuFlag == 'M' && (await deleteAttachmentsByRef(null, { refBys: [ref.id] }, context))
209
208
  await createAttachment(
210
209
  null,
211
210
  {
212
211
  attachment: {
213
212
  file: attachment,
214
- refBy: attachmentRef
213
+ refType: `${DataSet.name}-report-template`,
214
+ refBy: ref.id
215
215
  }
216
216
  },
217
217
  context
@@ -7,6 +7,7 @@ import { Board } from '@things-factory/board-service'
7
7
  import { Domain, getQueryBuilderFromListParams, ListParam } from '@things-factory/shell'
8
8
 
9
9
  import { DataItem } from '../data-item/data-item'
10
+ import { DataKeySet } from '../data-key-set/data-key-set'
10
11
  import { DataSample } from '../data-sample/data-sample'
11
12
  import { DataSet } from './data-set'
12
13
  import { DataSetList } from './data-set-type'
@@ -147,6 +148,16 @@ export class DataSetQuery {
147
148
  }
148
149
  }
149
150
 
151
+ @FieldResolver(type => DataKeySet, { nullable: true })
152
+ async dataKeySet(@Root() dataSet: DataSet) {
153
+ return (
154
+ dataSet.dataKeySet ||
155
+ (await getRepository(DataKeySet).findOne({
156
+ id: dataSet.dataKeySetId
157
+ }))
158
+ )
159
+ }
160
+
150
161
  @FieldResolver(type => Domain)
151
162
  async domain(@Root() dataSet: DataSet): Promise<Domain> {
152
163
  return await getRepository(Domain).findOne(dataSet.domainId)
@@ -208,7 +219,8 @@ export class DataSetQuery {
208
219
  const attachment: Attachment = await getRepository(Attachment).findOne({
209
220
  where: {
210
221
  domain: dataset.domainId,
211
- refBy: `report-${dataset.id}`
222
+ refType: `${DataSet.name}-report-template`,
223
+ refBy: dataset.id
212
224
  }
213
225
  })
214
226
 
@@ -15,6 +15,9 @@ export class NewDataSet {
15
15
  @Field({ nullable: true })
16
16
  description?: string
17
17
 
18
+ @Field(type => ObjectRef, { nullable: true })
19
+ dataKeySet?: ObjectRef
20
+
18
21
  @Field(type => ObjectRef, { nullable: true })
19
22
  entryRole?: ObjectRef
20
23
 
@@ -75,6 +78,9 @@ export class DataSetPatch {
75
78
  @Field({ nullable: true })
76
79
  description?: string
77
80
 
81
+ @Field(type => ObjectRef, { nullable: true })
82
+ dataKeySet?: ObjectRef
83
+
78
84
  @Field(type => ObjectRef, { nullable: true })
79
85
  supervisoryRole?: ObjectRef
80
86
 
@@ -14,6 +14,7 @@ import {
14
14
  import { Role, User } from '@things-factory/auth-base'
15
15
  import { Domain, ScalarObject } from '@things-factory/shell'
16
16
 
17
+ import { DataKeySet } from '../data-key-set/data-key-set'
17
18
  import { DataItem } from './data-item-type'
18
19
 
19
20
  export enum DataSetEntryType {
@@ -71,9 +72,7 @@ export class DataSet {
71
72
  @Field()
72
73
  name: string
73
74
 
74
- @Column({
75
- nullable: true
76
- })
75
+ @Column({ nullable: true })
77
76
  @Field({ nullable: true })
78
77
  description?: string
79
78
 
@@ -81,78 +80,63 @@ export class DataSet {
81
80
  @Field({ nullable: true })
82
81
  version?: number = 1
83
82
 
84
- @Column({
85
- nullable: true
86
- })
83
+ @Column({ nullable: true })
87
84
  @Field({ nullable: true })
88
85
  active?: boolean
89
86
 
90
- @ManyToOne(type => Role, {
91
- nullable: true
92
- })
87
+ @ManyToOne(type => DataKeySet, { nullable: true })
88
+ @Field(type => DataKeySet, { nullable: true })
89
+ dataKeySet?: Role
90
+
91
+ @RelationId((dataSet: DataSet) => dataSet.dataKeySet)
92
+ dataKeySetId?: string
93
+
94
+ @ManyToOne(type => Role, { nullable: true })
93
95
  @Field(type => Role, { nullable: true })
94
96
  entryRole?: Role
95
97
 
96
98
  @RelationId((dataSet: DataSet) => dataSet.entryRole)
97
99
  entryRoleId?: string
98
100
 
99
- @ManyToOne(type => Role, {
100
- nullable: true
101
- })
101
+ @ManyToOne(type => Role, { nullable: true })
102
102
  @Field(type => Role, { nullable: true })
103
103
  supervisoryRole?: Role
104
104
 
105
105
  @RelationId((dataSet: DataSet) => dataSet.supervisoryRole)
106
106
  supervisoryRoleId?: string
107
107
 
108
- @Column({
109
- nullable: true
110
- })
108
+ @Column({ nullable: true })
111
109
  @Field({ nullable: true })
112
110
  type?: 'manual' | 'automatic' | string
113
111
 
114
- @Column({
115
- nullable: true
116
- })
112
+ @Column({ nullable: true })
117
113
  @Field({ nullable: true })
118
114
  entryType?: DataSetEntryType
119
115
 
120
- @Column({
121
- nullable: true
122
- })
116
+ @Column({ nullable: true })
123
117
  @Field({ nullable: true })
124
118
  entryView?: string
125
119
 
126
- @Column({
127
- nullable: true
128
- })
120
+ @Column({ nullable: true })
129
121
  @Field({ nullable: true })
130
122
  monitorType?: DataSetMonitorType
131
123
 
132
- @Column({
133
- nullable: true
134
- })
124
+ @Column({ nullable: true })
135
125
  @Field({ nullable: true })
136
126
  monitorView?: string
137
127
 
138
- @Column({
139
- nullable: true
140
- })
128
+ @Column({ nullable: true })
141
129
  @Field({ nullable: true })
142
130
  reportType?: DataSetReportType
143
131
 
144
- @Column({
145
- nullable: true
146
- })
132
+ @Column({ nullable: true })
147
133
  @Field({ nullable: true })
148
134
  reportView?: string
149
135
 
150
136
  @Field({ nullable: true })
151
137
  reportTemplate?: string
152
138
 
153
- @Column({
154
- nullable: true
155
- })
139
+ @Column({ nullable: true })
156
140
  @Field({ nullable: true })
157
141
  useCase?: string
158
142
 
@@ -164,15 +148,11 @@ export class DataSet {
164
148
  @Field(type => [DataItem], { nullable: true })
165
149
  dataItems: DataItem[]
166
150
 
167
- @Column({
168
- nullable: true
169
- })
151
+ @Column({ nullable: true })
170
152
  @Field({ nullable: true })
171
153
  schedule?: string
172
154
 
173
- @Column({
174
- nullable: true
175
- })
155
+ @Column({ nullable: true })
176
156
  @Field({ nullable: true })
177
157
  timezone?: string
178
158
 
@@ -184,18 +164,14 @@ export class DataSet {
184
164
  @Field({ nullable: true })
185
165
  updatedAt?: Date
186
166
 
187
- @ManyToOne(type => User, {
188
- nullable: true
189
- })
167
+ @ManyToOne(type => User, { nullable: true })
190
168
  @Field({ nullable: true })
191
169
  creator?: User
192
170
 
193
171
  @RelationId((dataSet: DataSet) => dataSet.creator)
194
172
  creatorId?: string
195
173
 
196
- @ManyToOne(type => User, {
197
- nullable: true
198
- })
174
+ @ManyToOne(type => User, { nullable: true })
199
175
  @Field({ nullable: true })
200
176
  updater?: User
201
177
 
@@ -6,6 +6,7 @@ import { Role, User } from '@things-factory/auth-base'
6
6
  import { Board } from '@things-factory/board-service'
7
7
  import { Domain, getQueryBuilderFromListParams, ListParam, ScalarDate } from '@things-factory/shell'
8
8
 
9
+ import { DataSet } from '../data-set/data-set'
9
10
  import { DataSetHistory } from './data-set-history'
10
11
  import { DataSetHistoryList } from './data-set-history-type'
11
12
 
@@ -101,7 +102,8 @@ export class DataSetHistoryQuery {
101
102
  const attachment: Attachment = await getRepository(Attachment).findOne({
102
103
  where: {
103
104
  domain: dataSetHistory.domainId,
104
- refBy: `report-${dataSetHistory.originalId}`
105
+ refType: `${DataSet.name}-report-template`,
106
+ refBy: dataSetHistory.originalId
105
107
  }
106
108
  })
107
109
 
@@ -1,5 +1,5 @@
1
1
  import { entities as DataItemEntities } from './data-item'
2
- /* IMPORT ENTITIES AND RESOLVERS */
2
+ import { entities as DataKeySetEntities, resolvers as DataKeySetResolvers } from './data-key-set'
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'
@@ -12,6 +12,7 @@ import {
12
12
  import { entities as DataSpecEntities, resolvers as DataSpecResolvers } from './data-spec'
13
13
 
14
14
  /* EXPORT ENTITY TYPES */
15
+ export * from './data-key-set/data-key-set'
15
16
  export * from './data-ooc/data-ooc'
16
17
  export * from './data-sensor/data-sensor'
17
18
  export * from './data-sample/data-sample'
@@ -22,6 +23,7 @@ export * from './data-spec/data-spec'
22
23
 
23
24
  export const entities = [
24
25
  /* ENTITIES */
26
+ ...DataKeySetEntities,
25
27
  ...DataItemEntities,
26
28
  ...DataOocEntities,
27
29
  ...DataSensorEntities,
@@ -39,6 +41,7 @@ export const subscribers = [
39
41
  export const schema = {
40
42
  resolverClasses: [
41
43
  /* RESOLVER CLASSES */
44
+ ...DataKeySetResolvers,
42
45
  ...DataOocResolvers,
43
46
  ...DataSensorResolvers,
44
47
  ...DataSampleResolvers,
@@ -16,6 +16,10 @@ export default {
16
16
  tagname: 'data-sample-list-page',
17
17
  page: 'data-sample-list'
18
18
  },
19
+ {
20
+ tagname: 'data-sample-search-page',
21
+ page: 'data-sample-search'
22
+ },
19
23
  {
20
24
  tagname: 'data-ooc-list-page',
21
25
  page: 'data-ooc-list'
@@ -44,6 +48,10 @@ export default {
44
48
  tagname: 'data-report-embed-page',
45
49
  page: 'data-report-embed'
46
50
  },
51
+ {
52
+ tagname: 'data-key-set-list-page',
53
+ page: 'data-key-set-list'
54
+ }
47
55
  ],
48
56
  bootstrap
49
57
  }