@things-factory/dataset 4.3.0-alpha.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 (114) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +21 -0
  3. package/client/bootstrap.js +3 -0
  4. package/client/index.js +0 -0
  5. package/client/pages/data-item-list.js +280 -0
  6. package/client/pages/data-sample.js +272 -0
  7. package/client/pages/data-set-importer.js +103 -0
  8. package/client/pages/data-set.js +394 -0
  9. package/client/route.js +11 -0
  10. package/dist-server/controllers/create-data-sample.js +133 -0
  11. package/dist-server/controllers/create-data-sample.js.map +1 -0
  12. package/dist-server/controllers/data-use-case.js +57 -0
  13. package/dist-server/controllers/data-use-case.js.map +1 -0
  14. package/dist-server/controllers/index.js +1 -0
  15. package/dist-server/controllers/index.js.map +1 -0
  16. package/dist-server/index.js +21 -0
  17. package/dist-server/index.js.map +1 -0
  18. package/dist-server/middlewares/index.js +8 -0
  19. package/dist-server/middlewares/index.js.map +1 -0
  20. package/dist-server/migrations/index.js +12 -0
  21. package/dist-server/migrations/index.js.map +1 -0
  22. package/dist-server/routes.js +25 -0
  23. package/dist-server/routes.js.map +1 -0
  24. package/dist-server/service/data-item/data-item-mutation.js +69 -0
  25. package/dist-server/service/data-item/data-item-mutation.js.map +1 -0
  26. package/dist-server/service/data-item/data-item-query.js +100 -0
  27. package/dist-server/service/data-item/data-item-query.js.map +1 -0
  28. package/dist-server/service/data-item/data-item-type.js +80 -0
  29. package/dist-server/service/data-item/data-item-type.js.map +1 -0
  30. package/dist-server/service/data-item/data-item.js +136 -0
  31. package/dist-server/service/data-item/data-item.js.map +1 -0
  32. package/dist-server/service/data-item/index.js +9 -0
  33. package/dist-server/service/data-item/index.js.map +1 -0
  34. package/dist-server/service/data-ooc/data-ooc-mutation.js +92 -0
  35. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -0
  36. package/dist-server/service/data-ooc/data-ooc-query.js +120 -0
  37. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -0
  38. package/dist-server/service/data-ooc/data-ooc-subscription.js +65 -0
  39. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -0
  40. package/dist-server/service/data-ooc/data-ooc-type.js +107 -0
  41. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -0
  42. package/dist-server/service/data-ooc/data-ooc.js +237 -0
  43. package/dist-server/service/data-ooc/data-ooc.js.map +1 -0
  44. package/dist-server/service/data-ooc/index.js +10 -0
  45. package/dist-server/service/data-ooc/index.js.map +1 -0
  46. package/dist-server/service/data-sample/data-sample-mutation.js +142 -0
  47. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -0
  48. package/dist-server/service/data-sample/data-sample-query.js +100 -0
  49. package/dist-server/service/data-sample/data-sample-query.js.map +1 -0
  50. package/dist-server/service/data-sample/data-sample-type.js +82 -0
  51. package/dist-server/service/data-sample/data-sample-type.js.map +1 -0
  52. package/dist-server/service/data-sample/data-sample.js +105 -0
  53. package/dist-server/service/data-sample/data-sample.js.map +1 -0
  54. package/dist-server/service/data-sample/index.js +9 -0
  55. package/dist-server/service/data-sample/index.js.map +1 -0
  56. package/dist-server/service/data-sensor/data-sensor-mutation.js +120 -0
  57. package/dist-server/service/data-sensor/data-sensor-mutation.js.map +1 -0
  58. package/dist-server/service/data-sensor/data-sensor-query.js +113 -0
  59. package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -0
  60. package/dist-server/service/data-sensor/data-sensor-type.js +147 -0
  61. package/dist-server/service/data-sensor/data-sensor-type.js.map +1 -0
  62. package/dist-server/service/data-sensor/data-sensor.js +168 -0
  63. package/dist-server/service/data-sensor/data-sensor.js.map +1 -0
  64. package/dist-server/service/data-sensor/index.js +9 -0
  65. package/dist-server/service/data-sensor/index.js.map +1 -0
  66. package/dist-server/service/data-set/data-set-mutation.js +216 -0
  67. package/dist-server/service/data-set/data-set-mutation.js.map +1 -0
  68. package/dist-server/service/data-set/data-set-query.js +102 -0
  69. package/dist-server/service/data-set/data-set-query.js.map +1 -0
  70. package/dist-server/service/data-set/data-set-type.js +77 -0
  71. package/dist-server/service/data-set/data-set-type.js.map +1 -0
  72. package/dist-server/service/data-set/data-set.js +103 -0
  73. package/dist-server/service/data-set/data-set.js.map +1 -0
  74. package/dist-server/service/data-set/index.js +9 -0
  75. package/dist-server/service/data-set/index.js.map +1 -0
  76. package/dist-server/service/data-spec/data-spec-manager.js +20 -0
  77. package/dist-server/service/data-spec/data-spec-manager.js.map +1 -0
  78. package/dist-server/service/data-spec/data-spec-query.js +48 -0
  79. package/dist-server/service/data-spec/data-spec-query.js.map +1 -0
  80. package/dist-server/service/data-spec/data-spec.js +78 -0
  81. package/dist-server/service/data-spec/data-spec.js.map +1 -0
  82. package/dist-server/service/data-spec/index.js +8 -0
  83. package/dist-server/service/data-spec/index.js.map +1 -0
  84. package/dist-server/service/index.js +40 -0
  85. package/dist-server/service/index.js.map +1 -0
  86. package/package.json +38 -0
  87. package/server/controllers/index.ts +0 -0
  88. package/server/index.ts +5 -0
  89. package/server/middlewares/index.ts +3 -0
  90. package/server/migrations/index.ts +9 -0
  91. package/server/routes.ts +28 -0
  92. package/server/service/data-item/data-item-mutation.ts +56 -0
  93. package/server/service/data-item/data-item-query.ts +53 -0
  94. package/server/service/data-item/data-item-type.ts +50 -0
  95. package/server/service/data-item/data-item.ts +113 -0
  96. package/server/service/data-item/index.ts +6 -0
  97. package/server/service/data-sample/data-sample-mutation.ts +137 -0
  98. package/server/service/data-sample/data-sample-query.ts +53 -0
  99. package/server/service/data-sample/data-sample-type.ts +50 -0
  100. package/server/service/data-sample/data-sample.ts +84 -0
  101. package/server/service/data-sample/index.ts +6 -0
  102. package/server/service/data-set/data-set-mutation.ts +209 -0
  103. package/server/service/data-set/data-set-query.ts +55 -0
  104. package/server/service/data-set/data-set-type.ts +45 -0
  105. package/server/service/data-set/data-set.ts +84 -0
  106. package/server/service/data-set/index.ts +6 -0
  107. package/server/service/index.ts +25 -0
  108. package/things-factory.config.js +17 -0
  109. package/translations/en.json +8 -0
  110. package/translations/ko.json +8 -0
  111. package/translations/ms.json +8 -0
  112. package/translations/zh.json +8 -0
  113. package/tsconfig.json +9 -0
  114. package/yarn-error.log +23244 -0
@@ -0,0 +1,53 @@
1
+ import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
+ import { getRepository } from 'typeorm'
3
+
4
+ import { User } from '@things-factory/auth-base'
5
+ import { convertListParams, Domain, ListParam } from '@things-factory/shell'
6
+
7
+ import { DataSet } from '../data-set/data-set'
8
+ import { DataSample } from './data-sample'
9
+ import { DataSampleList } from './data-sample-type'
10
+
11
+ @Resolver(DataSample)
12
+ export class DataSampleQuery {
13
+ @Directive('@privilege(category: "data-sample", privilege: "query", domainOwnerGranted: true)')
14
+ @Query(returns => DataSample, { description: 'To fetch a data sample' })
15
+ async dataSample(@Arg('id') id: string, @Ctx() context: any): Promise<DataSample> {
16
+ const { domain } = context.state
17
+
18
+ return await getRepository(DataSample).findOne({
19
+ where: { domain, id }
20
+ })
21
+ }
22
+
23
+ @Directive('@privilege(category: "data-sample", privilege: "query", domainOwnerGranted: true)')
24
+ @Query(returns => DataSampleList, { description: 'To fetch multiple data samples' })
25
+ async dataSamples(@Args() params: ListParam, @Ctx() context: any): Promise<DataSampleList> {
26
+ const { domain } = context.state
27
+
28
+ const convertedParams = convertListParams(params, domain.id)
29
+ const [items, total] = await getRepository(DataSample).findAndCount(convertedParams)
30
+
31
+ return { items, total }
32
+ }
33
+
34
+ @FieldResolver(type => DataSet)
35
+ async dataSet(@Root() dataSample: DataSample): Promise<Domain> {
36
+ return await getRepository(DataSet).findOne(dataSample.dataSetId)
37
+ }
38
+
39
+ @FieldResolver(type => Domain)
40
+ async domain(@Root() dataSample: DataSample): Promise<Domain> {
41
+ return await getRepository(Domain).findOne(dataSample.domainId)
42
+ }
43
+
44
+ @FieldResolver(type => User)
45
+ async updater(@Root() dataSample: DataSample): Promise<User> {
46
+ return await getRepository(User).findOne(dataSample.updaterId)
47
+ }
48
+
49
+ @FieldResolver(type => User)
50
+ async creator(@Root() dataSample: DataSample): Promise<User> {
51
+ return await getRepository(User).findOne(dataSample.creatorId)
52
+ }
53
+ }
@@ -0,0 +1,50 @@
1
+ import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
+
3
+ import { ScalarObject } from '@things-factory/shell'
4
+
5
+ import { DataSample } from './data-sample'
6
+
7
+ @InputType()
8
+ export class NewDataSample {
9
+ @Field({ nullable: true })
10
+ name?: string
11
+
12
+ @Field({ nullable: true })
13
+ description?: string
14
+
15
+ @Field({ nullable: true })
16
+ dataSetId?: string
17
+
18
+ @Field(type => ScalarObject, { nullable: true })
19
+ data?: object
20
+ }
21
+
22
+ @InputType()
23
+ export class DataSamplePatch {
24
+ @Field(type => ID, { nullable: true })
25
+ id?: string
26
+
27
+ @Field({ nullable: true })
28
+ name?: string
29
+
30
+ @Field({ nullable: true })
31
+ description?: string
32
+
33
+ @Field({ nullable: true })
34
+ dataSetId?: string
35
+
36
+ @Field(type => ScalarObject, { nullable: true })
37
+ data?: object
38
+
39
+ @Field()
40
+ cuFlag: string
41
+ }
42
+
43
+ @ObjectType()
44
+ export class DataSampleList {
45
+ @Field(type => [DataSample])
46
+ items: DataSample[]
47
+
48
+ @Field(type => Int)
49
+ total: number
50
+ }
@@ -0,0 +1,84 @@
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, ScalarObject } from '@things-factory/shell'
15
+
16
+ import { DataSet } from '../data-set/data-set'
17
+
18
+ @Entity()
19
+ @Index('ix_data_sample_0', (dataSample: DataSample) => [dataSample.domain, dataSample.dataSet], { unique: false })
20
+ @ObjectType({ description: 'Entity for DataSample' })
21
+ export class DataSample {
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((dataSample: DataSample) => dataSample.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
+ @ManyToOne(type => DataSet, dataSet => dataSet.dataSamples)
44
+ @Field(type => DataSet, { nullable: true })
45
+ dataSet?: DataSet
46
+
47
+ @RelationId((dataSample: DataSample) => dataSample.dataSet)
48
+ @Field({ nullable: true })
49
+ dataSetId?: string
50
+
51
+ @Column('simple-json', { nullable: true })
52
+ @Field(type => ScalarObject, { nullable: true })
53
+ data?: object
54
+
55
+ @Column('simple-json', { nullable: true })
56
+ @Field(type => ScalarObject, { nullable: true })
57
+ spec?: object
58
+
59
+ @CreateDateColumn()
60
+ @Field({ nullable: true })
61
+ createdAt?: Date
62
+
63
+ @UpdateDateColumn()
64
+ @Field({ nullable: true })
65
+ updatedAt?: Date
66
+
67
+ @ManyToOne(type => User, {
68
+ nullable: true
69
+ })
70
+ @Field({ nullable: true })
71
+ creator?: User
72
+
73
+ @RelationId((dataSample: DataSample) => dataSample.creator)
74
+ creatorId?: string
75
+
76
+ @ManyToOne(type => User, {
77
+ nullable: true
78
+ })
79
+ @Field({ nullable: true })
80
+ updater?: User
81
+
82
+ @RelationId((dataSample: DataSample) => dataSample.creator)
83
+ updaterId?: string
84
+ }
@@ -0,0 +1,6 @@
1
+ import { DataSample } from './data-sample'
2
+ import { DataSampleQuery } from './data-sample-query'
3
+ import { DataSampleMutation } from './data-sample-mutation'
4
+
5
+ export const entities = [DataSample]
6
+ export const resolvers = [DataSampleQuery, DataSampleMutation]
@@ -0,0 +1,209 @@
1
+ import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
+ import { EntityManager, In } from 'typeorm'
3
+ import uuid from 'uuid/v4'
4
+
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { DataItem } from '../data-item/data-item'
8
+ import { DataSet } from './data-set'
9
+ import { DataSetPatch, NewDataSet } from './data-set-type'
10
+
11
+ @Resolver(DataSet)
12
+ export class DataSetMutation {
13
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
14
+ @Directive('@transaction')
15
+ @Mutation(returns => DataSet, { description: 'To create new DataSet' })
16
+ async createDataSet(@Arg('dataSet') dataSet: NewDataSet, @Ctx() context: any): Promise<DataSet> {
17
+ const { domain, user, tx } = context.state
18
+
19
+ return await tx.getRepository(DataSet).save({
20
+ ...dataSet,
21
+ domain,
22
+ creator: user,
23
+ updater: user
24
+ })
25
+ }
26
+
27
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
28
+ @Directive('@transaction')
29
+ @Mutation(returns => DataSet, { description: 'To modify DataSet information' })
30
+ async updateDataSet(@Arg('id') id: string, @Arg('patch') patch: DataSetPatch, @Ctx() context: any): Promise<DataSet> {
31
+ const { domain, user, tx } = context.state
32
+
33
+ const repository = tx.getRepository(DataSet)
34
+ const dataSet = await repository.findOne({
35
+ where: { domain, id }
36
+ })
37
+
38
+ return await repository.save({
39
+ ...dataSet,
40
+ ...patch,
41
+ updater: user
42
+ })
43
+ }
44
+
45
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
46
+ @Directive('@transaction')
47
+ @Mutation(returns => [DataSet], { description: "To modify multiple DataSets' information" })
48
+ async updateMultipleDataSet(
49
+ @Arg('patches', type => [DataSetPatch]) patches: DataSetPatch[],
50
+ @Ctx() context: any
51
+ ): Promise<DataSet[]> {
52
+ const { domain, user, tx } = context.state
53
+
54
+ let results = []
55
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
56
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
57
+ const dataSetRepo = tx.getRepository(DataSet)
58
+
59
+ if (_createRecords.length > 0) {
60
+ for (let i = 0; i < _createRecords.length; i++) {
61
+ const newRecord = _createRecords[i]
62
+
63
+ const result = await dataSetRepo.save({
64
+ ...newRecord,
65
+ domain,
66
+ creator: user,
67
+ updater: user
68
+ })
69
+
70
+ results.push({ ...result, cuFlag: '+' })
71
+ }
72
+ }
73
+
74
+ if (_updateRecords.length > 0) {
75
+ for (let i = 0; i < _updateRecords.length; i++) {
76
+ const newRecord = _updateRecords[i]
77
+ const dataSet = await dataSetRepo.findOne(newRecord.id)
78
+
79
+ const result = await dataSetRepo.save({
80
+ ...dataSet,
81
+ ...newRecord,
82
+ updater: user
83
+ })
84
+
85
+ results.push({ ...result, cuFlag: 'M' })
86
+ }
87
+ }
88
+
89
+ return results
90
+ }
91
+
92
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
93
+ @Directive('@transaction')
94
+ @Mutation(returns => Boolean, { description: 'To delete DataSet' })
95
+ async deleteDataSet(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
96
+ const { domain, tx } = context.state
97
+
98
+ await tx.getRepository(DataSet).delete({ domain, id })
99
+ return true
100
+ }
101
+
102
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
103
+ @Directive('@transaction')
104
+ @Mutation(returns => Boolean, { description: 'To delete multiple dataSets' })
105
+ async deleteDataSets(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
106
+ const { domain, tx } = context.state
107
+
108
+ await tx.getRepository(DataSet).delete({
109
+ domain,
110
+ id: In(ids)
111
+ })
112
+
113
+ return true
114
+ }
115
+
116
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
117
+ @Directive('@transaction')
118
+ @Mutation(returns => Boolean, { description: 'To import multiple data-sets' })
119
+ async importDataSets(
120
+ @Arg('dataSets', type => [DataSetPatch]) dataSets: DataSet[],
121
+ @Ctx() context: any
122
+ ): Promise<boolean> {
123
+ const tx: EntityManager = context.state.tx
124
+ const domain: Domain = context.state.domain
125
+ await Promise.all(
126
+ dataSets.map(async (dataSet: DataSet) => {
127
+ const createdDataSet: DataSet = await tx.getRepository(DataSet).save({ domain, ...dataSet })
128
+ if (dataSet.dataItems?.length) {
129
+ await tx.getRepository(DataItem).save(
130
+ dataSet.dataItems.map((dataItem: DataItem) => {
131
+ dataItem.domain = domain
132
+ dataItem.dataSet = createdDataSet
133
+ return dataItem
134
+ })
135
+ )
136
+ }
137
+ })
138
+ )
139
+
140
+ return true
141
+ }
142
+
143
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
144
+ @Directive('@transaction')
145
+ @Mutation(returns => [DataSet], { description: 'To copy multiple data-sets' })
146
+ async copyDataSets(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<DataSet[]> {
147
+ const { domain, user, tx } = context.state
148
+
149
+ const originals = await tx.getRepository(DataSet).find({
150
+ where: {
151
+ id: In(ids),
152
+ domain
153
+ },
154
+ relations: ['domain', 'dataItems']
155
+ })
156
+
157
+ if (originals.length == 0) {
158
+ return []
159
+ }
160
+
161
+ var newDataItems = []
162
+
163
+ var newCopys = originals.map(dataSet => {
164
+ let dataSetId = uuid()
165
+ newDataItems.push(
166
+ ...dataSet.dataItems.map(dataItem => {
167
+ return {
168
+ dataSet: dataSetId,
169
+ name: dataItem.name,
170
+ description: dataItem.description,
171
+ sequence: dataItem.sequence,
172
+ task: dataItem.task,
173
+ connection: dataItem.connection,
174
+ params: dataItem.params,
175
+
176
+ domain,
177
+ creator: user,
178
+ updater: user
179
+ }
180
+ })
181
+ )
182
+
183
+ return {
184
+ id: dataSetId,
185
+ name: dataSet.name + ' (' + dataSetId + ')',
186
+ type: dataSet.type,
187
+ description: dataSet.description,
188
+ active: false,
189
+ schedule: dataSet.schedule,
190
+ timezone: dataSet.timezone,
191
+
192
+ domain,
193
+ creator: user,
194
+ updater: user
195
+ }
196
+ })
197
+
198
+ var copiedDataSets = await tx.getRepository(DataSet).save(newCopys)
199
+ var copiedDataItems = await tx.getRepository(DataItem).save(newDataItems)
200
+
201
+ return copiedDataSets.map(dataSet => {
202
+ dataSet.dataItems = copiedDataItems.filter(dataItem => dataItem.dataSet == dataSet.id)
203
+ return {
204
+ ...dataSet,
205
+ state: 'UNLOADED' // DataSetInstanceStatus.UNLOADED
206
+ }
207
+ })
208
+ }
209
+ }
@@ -0,0 +1,55 @@
1
+ import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
+ import { getRepository } from 'typeorm'
3
+
4
+ import { User } from '@things-factory/auth-base'
5
+ import { convertListParams, Domain, ListParam } from '@things-factory/shell'
6
+
7
+ import { DataItem } from '../data-item/data-item'
8
+ import { DataSet } from './data-set'
9
+ import { DataSetList } from './data-set-type'
10
+
11
+ @Resolver(DataSet)
12
+ export class DataSetQuery {
13
+ @Directive('@privilege(category: "data-set", privilege: "query", domainOwnerGranted: true)')
14
+ @Query(returns => DataSet, { description: 'To fetch a DataSet' })
15
+ async dataSet(@Arg('id') id: string, @Ctx() context: any): Promise<DataSet> {
16
+ const { domain } = context.state
17
+
18
+ return await getRepository(DataSet).findOne({
19
+ where: { domain, id }
20
+ })
21
+ }
22
+
23
+ @Directive('@privilege(category: "data-set", privilege: "query", domainOwnerGranted: true)')
24
+ @Query(returns => DataSetList, { description: 'To fetch multiple DataSets' })
25
+ async dataSets(@Args() params: ListParam, @Ctx() context: any): Promise<DataSetList> {
26
+ const { domain } = context.state
27
+
28
+ const convertedParams = convertListParams(params, domain.id)
29
+ const [items, total] = await getRepository(DataSet).findAndCount(convertedParams)
30
+
31
+ return { items, total }
32
+ }
33
+
34
+ @FieldResolver(type => [DataItem])
35
+ async dataItems(@Root() dataSet: DataSet): Promise<DataItem[]> {
36
+ return await getRepository(DataItem).find({
37
+ dataSet
38
+ })
39
+ }
40
+
41
+ @FieldResolver(type => Domain)
42
+ async domain(@Root() dataSet: DataSet): Promise<Domain> {
43
+ return await getRepository(Domain).findOne(dataSet.domainId)
44
+ }
45
+
46
+ @FieldResolver(type => User)
47
+ async updater(@Root() dataSet: DataSet): Promise<User> {
48
+ return await getRepository(User).findOne(dataSet.updaterId)
49
+ }
50
+
51
+ @FieldResolver(type => User)
52
+ async creator(@Root() dataSet: DataSet): Promise<User> {
53
+ return await getRepository(User).findOne(dataSet.creatorId)
54
+ }
55
+ }
@@ -0,0 +1,45 @@
1
+ import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
+
3
+ import { DataSet } from './data-set'
4
+
5
+ @InputType()
6
+ export class NewDataSet {
7
+ @Field()
8
+ name: string
9
+
10
+ @Field({ nullable: true })
11
+ description?: string
12
+
13
+ @Field({ nullable: true })
14
+ active?: boolean
15
+
16
+ @Field({ nullable: true })
17
+ params?: string
18
+ }
19
+
20
+ @InputType()
21
+ export class DataSetPatch {
22
+ @Field(type => ID, { nullable: true })
23
+ id?: string
24
+
25
+ @Field({ nullable: true })
26
+ name?: string
27
+
28
+ @Field({ nullable: true })
29
+ description?: string
30
+
31
+ @Field({ nullable: true })
32
+ active?: boolean
33
+
34
+ @Field()
35
+ cuFlag: string
36
+ }
37
+
38
+ @ObjectType()
39
+ export class DataSetList {
40
+ @Field(type => [DataSet])
41
+ items: DataSet[]
42
+
43
+ @Field(type => Int)
44
+ total: number
45
+ }
@@ -0,0 +1,84 @@
1
+ import { Field, ID, ObjectType } from 'type-graphql'
2
+ import {
3
+ Column,
4
+ CreateDateColumn,
5
+ Entity,
6
+ Index,
7
+ ManyToOne,
8
+ OneToMany,
9
+ PrimaryGeneratedColumn,
10
+ RelationId,
11
+ UpdateDateColumn
12
+ } from 'typeorm'
13
+
14
+ import { User } from '@things-factory/auth-base'
15
+ import { Domain } from '@things-factory/shell'
16
+
17
+ import { DataItem } from '../data-item/data-item'
18
+ import { DataSample } from '../data-sample/data-sample'
19
+
20
+ @Entity()
21
+ @Index('ix_data_set_0', (dataSet: DataSet) => [dataSet.domain, dataSet.name], { unique: true })
22
+ @ObjectType({ description: 'Entity for DataSet' })
23
+ export class DataSet {
24
+ @PrimaryGeneratedColumn('uuid')
25
+ @Field(type => ID)
26
+ readonly id: string
27
+
28
+ @ManyToOne(type => Domain)
29
+ @Field({ nullable: true })
30
+ domain?: Domain
31
+
32
+ @RelationId((dataSet: DataSet) => dataSet.domain)
33
+ domainId?: string
34
+
35
+ @Column()
36
+ @Field()
37
+ name: string
38
+
39
+ @Column({
40
+ nullable: true
41
+ })
42
+ @Field({ nullable: true })
43
+ description?: string
44
+
45
+ @Column({
46
+ nullable: true
47
+ })
48
+ @Field({ nullable: true })
49
+ active?: boolean
50
+
51
+ @OneToMany(type => DataItem, dataItem => dataItem.dataSet)
52
+ @Field(type => [DataItem], { nullable: true })
53
+ dataItems: DataItem[]
54
+
55
+ @OneToMany(type => DataSample, dataSample => dataSample.dataSet)
56
+ @Field(type => [DataSample], { nullable: true })
57
+ dataSamples: DataSample[]
58
+
59
+ @CreateDateColumn()
60
+ @Field({ nullable: true })
61
+ createdAt?: Date
62
+
63
+ @UpdateDateColumn()
64
+ @Field({ nullable: true })
65
+ updatedAt?: Date
66
+
67
+ @ManyToOne(type => User, {
68
+ nullable: true
69
+ })
70
+ @Field({ nullable: true })
71
+ creator?: User
72
+
73
+ @RelationId((dataSet: DataSet) => dataSet.creator)
74
+ creatorId?: string
75
+
76
+ @ManyToOne(type => User, {
77
+ nullable: true
78
+ })
79
+ @Field({ nullable: true })
80
+ updater?: User
81
+
82
+ @RelationId((dataSet: DataSet) => dataSet.creator)
83
+ updaterId?: string
84
+ }
@@ -0,0 +1,6 @@
1
+ import { DataSet } from './data-set'
2
+ import { DataSetMutation } from './data-set-mutation'
3
+ import { DataSetQuery } from './data-set-query'
4
+
5
+ export const entities = [DataSet]
6
+ export const resolvers = [DataSetQuery, DataSetMutation]
@@ -0,0 +1,25 @@
1
+ /* IMPORT ENTITIES AND RESOLVERS */
2
+ import { entities as DataSampleEntities, resolvers as DataSampleResolvers } from './data-sample'
3
+ import { entities as DataItemEntities, resolvers as DataItemResolvers } from './data-item'
4
+ import { entities as DataSetEntities, resolvers as DataSetResolvers } from './data-set'
5
+
6
+ /* EXPORT ENTITY TYPES */
7
+ export * from './data-sample/data-sample'
8
+ export * from './data-item/data-item'
9
+ export * from './data-set/data-set'
10
+
11
+ export const entities = [
12
+ /* ENTITIES */
13
+ ...DataSampleEntities,
14
+ ...DataItemEntities,
15
+ ...DataSetEntities
16
+ ]
17
+
18
+ export const schema = {
19
+ resolverClasses: [
20
+ /* RESOLVER CLASSES */
21
+ ...DataSampleResolvers,
22
+ ...DataItemResolvers,
23
+ ...DataSetResolvers
24
+ ]
25
+ }
@@ -0,0 +1,17 @@
1
+ import bootstrap from './client/bootstrap'
2
+ import route from './client/route'
3
+
4
+ export default {
5
+ route,
6
+ routes: [
7
+ {
8
+ tagname: 'data-set-page',
9
+ page: 'data-set'
10
+ },
11
+ {
12
+ tagname: 'data-sample-page',
13
+ page: 'data-sample'
14
+ }
15
+ ],
16
+ bootstrap
17
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "field.quota": "quota",
3
+ "field.spec": "spec",
4
+ "field.data": "data",
5
+ "title.data-item list": "data item list",
6
+ "title.data-set list": "data set list",
7
+ "title.data-sample list": "data sample list"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "field.quota": "샘플수",
3
+ "field.spec": "명세",
4
+ "field.data": "데이타",
5
+ "title.data-item list": "데이타 아이템 조회",
6
+ "title.data-set list": "데이타 셋 조회",
7
+ "title.data-sample list": "데이타 샘플 조회"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "field.quota": "quota",
3
+ "field.spec": "spec",
4
+ "field.data": "data",
5
+ "title.data-item list": "data item list",
6
+ "title.data-set list": "data set list",
7
+ "title.data-sample list": "data sample list"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "field.quota": "quota",
3
+ "field.spec": "spec",
4
+ "field.data": "data",
5
+ "title.data-item list": "data item list",
6
+ "title.data-set list": "data set list",
7
+ "title.data-sample list": "data sample list"
8
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist-server",
5
+ "baseUrl": "./"
6
+ },
7
+ "include": ["./server/**/*"],
8
+ "exclude": ["**/*.spec.ts"]
9
+ }