@things-factory/dataset 5.0.0-alpha.1

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 (79) 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 +418 -0
  9. package/client/route.js +11 -0
  10. package/dist-server/controllers/index.js +1 -0
  11. package/dist-server/controllers/index.js.map +1 -0
  12. package/dist-server/index.js +21 -0
  13. package/dist-server/index.js.map +1 -0
  14. package/dist-server/middlewares/index.js +8 -0
  15. package/dist-server/middlewares/index.js.map +1 -0
  16. package/dist-server/migrations/index.js +12 -0
  17. package/dist-server/migrations/index.js.map +1 -0
  18. package/dist-server/routes.js +25 -0
  19. package/dist-server/routes.js.map +1 -0
  20. package/dist-server/service/data-item/data-item-mutation.js +69 -0
  21. package/dist-server/service/data-item/data-item-mutation.js.map +1 -0
  22. package/dist-server/service/data-item/data-item-query.js +100 -0
  23. package/dist-server/service/data-item/data-item-query.js.map +1 -0
  24. package/dist-server/service/data-item/data-item-type.js +80 -0
  25. package/dist-server/service/data-item/data-item-type.js.map +1 -0
  26. package/dist-server/service/data-item/data-item.js +136 -0
  27. package/dist-server/service/data-item/data-item.js.map +1 -0
  28. package/dist-server/service/data-item/index.js +9 -0
  29. package/dist-server/service/data-item/index.js.map +1 -0
  30. package/dist-server/service/data-sample/data-sample-mutation.js +142 -0
  31. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -0
  32. package/dist-server/service/data-sample/data-sample-query.js +100 -0
  33. package/dist-server/service/data-sample/data-sample-query.js.map +1 -0
  34. package/dist-server/service/data-sample/data-sample-type.js +82 -0
  35. package/dist-server/service/data-sample/data-sample-type.js.map +1 -0
  36. package/dist-server/service/data-sample/data-sample.js +105 -0
  37. package/dist-server/service/data-sample/data-sample.js.map +1 -0
  38. package/dist-server/service/data-sample/index.js +9 -0
  39. package/dist-server/service/data-sample/index.js.map +1 -0
  40. package/dist-server/service/data-set/data-set-mutation.js +216 -0
  41. package/dist-server/service/data-set/data-set-mutation.js.map +1 -0
  42. package/dist-server/service/data-set/data-set-query.js +102 -0
  43. package/dist-server/service/data-set/data-set-query.js.map +1 -0
  44. package/dist-server/service/data-set/data-set-type.js +89 -0
  45. package/dist-server/service/data-set/data-set-type.js.map +1 -0
  46. package/dist-server/service/data-set/data-set.js +117 -0
  47. package/dist-server/service/data-set/data-set.js.map +1 -0
  48. package/dist-server/service/data-set/index.js +9 -0
  49. package/dist-server/service/data-set/index.js.map +1 -0
  50. package/dist-server/service/index.js +40 -0
  51. package/dist-server/service/index.js.map +1 -0
  52. package/package.json +38 -0
  53. package/server/controllers/index.ts +0 -0
  54. package/server/index.ts +5 -0
  55. package/server/middlewares/index.ts +3 -0
  56. package/server/migrations/index.ts +9 -0
  57. package/server/routes.ts +28 -0
  58. package/server/service/data-item/data-item-mutation.ts +56 -0
  59. package/server/service/data-item/data-item-query.ts +53 -0
  60. package/server/service/data-item/data-item-type.ts +50 -0
  61. package/server/service/data-item/data-item.ts +113 -0
  62. package/server/service/data-item/index.ts +6 -0
  63. package/server/service/data-sample/data-sample-mutation.ts +137 -0
  64. package/server/service/data-sample/data-sample-query.ts +53 -0
  65. package/server/service/data-sample/data-sample-type.ts +50 -0
  66. package/server/service/data-sample/data-sample.ts +84 -0
  67. package/server/service/data-sample/index.ts +6 -0
  68. package/server/service/data-set/data-set-mutation.ts +209 -0
  69. package/server/service/data-set/data-set-query.ts +55 -0
  70. package/server/service/data-set/data-set-type.ts +54 -0
  71. package/server/service/data-set/data-set.ts +96 -0
  72. package/server/service/data-set/index.ts +6 -0
  73. package/server/service/index.ts +25 -0
  74. package/things-factory.config.js +17 -0
  75. package/translations/en.json +8 -0
  76. package/translations/ko.json +8 -0
  77. package/translations/ms.json +8 -0
  78. package/translations/zh.json +8 -0
  79. package/tsconfig.json +9 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var _a, _b, _c;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.DataSet = void 0;
14
+ const type_graphql_1 = require("type-graphql");
15
+ const typeorm_1 = require("typeorm");
16
+ const auth_base_1 = require("@things-factory/auth-base");
17
+ const shell_1 = require("@things-factory/shell");
18
+ const data_item_1 = require("../data-item/data-item");
19
+ const data_sample_1 = require("../data-sample/data-sample");
20
+ let DataSet = class DataSet {
21
+ };
22
+ __decorate([
23
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
24
+ (0, type_graphql_1.Field)(type => type_graphql_1.ID),
25
+ __metadata("design:type", String)
26
+ ], DataSet.prototype, "id", void 0);
27
+ __decorate([
28
+ (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
29
+ (0, type_graphql_1.Field)({ nullable: true }),
30
+ __metadata("design:type", typeof (_a = typeof shell_1.Domain !== "undefined" && shell_1.Domain) === "function" ? _a : Object)
31
+ ], DataSet.prototype, "domain", void 0);
32
+ __decorate([
33
+ (0, typeorm_1.RelationId)((dataSet) => dataSet.domain),
34
+ __metadata("design:type", String)
35
+ ], DataSet.prototype, "domainId", void 0);
36
+ __decorate([
37
+ (0, typeorm_1.Column)(),
38
+ (0, type_graphql_1.Field)(),
39
+ __metadata("design:type", String)
40
+ ], DataSet.prototype, "name", void 0);
41
+ __decorate([
42
+ (0, typeorm_1.Column)({
43
+ nullable: true
44
+ }),
45
+ (0, type_graphql_1.Field)({ nullable: true }),
46
+ __metadata("design:type", String)
47
+ ], DataSet.prototype, "description", void 0);
48
+ __decorate([
49
+ (0, typeorm_1.Column)({
50
+ nullable: true
51
+ }),
52
+ (0, type_graphql_1.Field)({ nullable: true }),
53
+ __metadata("design:type", Boolean)
54
+ ], DataSet.prototype, "active", void 0);
55
+ __decorate([
56
+ (0, typeorm_1.OneToMany)(type => data_item_1.DataItem, dataItem => dataItem.dataSet),
57
+ (0, type_graphql_1.Field)(type => [data_item_1.DataItem], { nullable: true }),
58
+ __metadata("design:type", Array)
59
+ ], DataSet.prototype, "dataItems", void 0);
60
+ __decorate([
61
+ (0, typeorm_1.OneToMany)(type => data_sample_1.DataSample, dataSample => dataSample.dataSet),
62
+ (0, type_graphql_1.Field)(type => [data_sample_1.DataSample], { nullable: true }),
63
+ __metadata("design:type", Array)
64
+ ], DataSet.prototype, "dataSamples", void 0);
65
+ __decorate([
66
+ (0, typeorm_1.Column)({
67
+ nullable: true
68
+ }),
69
+ (0, type_graphql_1.Field)({ nullable: true }),
70
+ __metadata("design:type", String)
71
+ ], DataSet.prototype, "schedule", void 0);
72
+ __decorate([
73
+ (0, typeorm_1.Column)({
74
+ nullable: true
75
+ }),
76
+ (0, type_graphql_1.Field)({ nullable: true }),
77
+ __metadata("design:type", String)
78
+ ], DataSet.prototype, "timezone", void 0);
79
+ __decorate([
80
+ (0, typeorm_1.CreateDateColumn)(),
81
+ (0, type_graphql_1.Field)({ nullable: true }),
82
+ __metadata("design:type", Date)
83
+ ], DataSet.prototype, "createdAt", void 0);
84
+ __decorate([
85
+ (0, typeorm_1.UpdateDateColumn)(),
86
+ (0, type_graphql_1.Field)({ nullable: true }),
87
+ __metadata("design:type", Date)
88
+ ], DataSet.prototype, "updatedAt", void 0);
89
+ __decorate([
90
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
91
+ nullable: true
92
+ }),
93
+ (0, type_graphql_1.Field)({ nullable: true }),
94
+ __metadata("design:type", typeof (_b = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _b : Object)
95
+ ], DataSet.prototype, "creator", void 0);
96
+ __decorate([
97
+ (0, typeorm_1.RelationId)((dataSet) => dataSet.creator),
98
+ __metadata("design:type", String)
99
+ ], DataSet.prototype, "creatorId", void 0);
100
+ __decorate([
101
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
102
+ nullable: true
103
+ }),
104
+ (0, type_graphql_1.Field)({ nullable: true }),
105
+ __metadata("design:type", typeof (_c = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _c : Object)
106
+ ], DataSet.prototype, "updater", void 0);
107
+ __decorate([
108
+ (0, typeorm_1.RelationId)((dataSet) => dataSet.creator),
109
+ __metadata("design:type", String)
110
+ ], DataSet.prototype, "updaterId", void 0);
111
+ DataSet = __decorate([
112
+ (0, typeorm_1.Entity)(),
113
+ (0, typeorm_1.Index)('ix_data_set_0', (dataSet) => [dataSet.domain, dataSet.name], { unique: true }),
114
+ (0, type_graphql_1.ObjectType)({ description: 'Entity for DataSet' })
115
+ ], DataSet);
116
+ exports.DataSet = DataSet;
117
+ //# sourceMappingURL=data-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-set.js","sourceRoot":"","sources":["../../../server/service/data-set/data-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvers = exports.entities = void 0;
4
+ const data_set_1 = require("./data-set");
5
+ const data_set_mutation_1 = require("./data-set-mutation");
6
+ const data_set_query_1 = require("./data-set-query");
7
+ exports.entities = [data_set_1.DataSet];
8
+ exports.resolvers = [data_set_query_1.DataSetQuery, data_set_mutation_1.DataSetMutation];
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/data-set/index.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,2DAAqD;AACrD,qDAA+C;AAElC,QAAA,QAAQ,GAAG,CAAC,kBAAO,CAAC,CAAA;AACpB,QAAA,SAAS,GAAG,CAAC,6BAAY,EAAE,mCAAe,CAAC,CAAA"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.schema = exports.entities = void 0;
18
+ /* IMPORT ENTITIES AND RESOLVERS */
19
+ const data_sample_1 = require("./data-sample");
20
+ const data_item_1 = require("./data-item");
21
+ const data_set_1 = require("./data-set");
22
+ /* EXPORT ENTITY TYPES */
23
+ __exportStar(require("./data-sample/data-sample"), exports);
24
+ __exportStar(require("./data-item/data-item"), exports);
25
+ __exportStar(require("./data-set/data-set"), exports);
26
+ exports.entities = [
27
+ /* ENTITIES */
28
+ ...data_sample_1.entities,
29
+ ...data_item_1.entities,
30
+ ...data_set_1.entities
31
+ ];
32
+ exports.schema = {
33
+ resolverClasses: [
34
+ /* RESOLVER CLASSES */
35
+ ...data_sample_1.resolvers,
36
+ ...data_item_1.resolvers,
37
+ ...data_set_1.resolvers
38
+ ]
39
+ };
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,+CAAgG;AAChG,2CAA0F;AAC1F,yCAAuF;AAEvF,yBAAyB;AACzB,4DAAyC;AACzC,wDAAqC;AACrC,sDAAmC;AAEtB,QAAA,QAAQ,GAAG;IACtB,cAAc;IACf,GAAG,sBAAkB;IACpB,GAAG,oBAAgB;IACnB,GAAG,mBAAe;CACnB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACxB,GAAG,uBAAmB;QACpB,GAAG,qBAAiB;QACpB,GAAG,oBAAgB;KACpB;CACF,CAAA"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@things-factory/dataset",
3
+ "version": "5.0.0-alpha.1",
4
+ "main": "dist-server/index.js",
5
+ "browser": "client/index.js",
6
+ "things-factory": true,
7
+ "license": "MIT",
8
+ "author": "heartyoh",
9
+ "description": "module for handling data collection",
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "@things-factory:registry": "https://registry.npmjs.org"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/hatiolab/things-factory.git",
17
+ "directory": "packages/dataset"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc --p tsconfig.json",
21
+ "build:server": "npm run clean:server && tsc",
22
+ "clean:server": "rm -rf dist-server",
23
+ "clean": "npm run clean:server",
24
+ "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
25
+ },
26
+ "dependencies": {
27
+ "@operato/data-grist": "^0.4.1",
28
+ "@operato/graphql": "^0.4.1",
29
+ "@operato/i18n": "^0.4.1",
30
+ "@operato/layout": "^0.4.1",
31
+ "@operato/shell": "^0.4.1",
32
+ "@operato/styles": "^0.4.1",
33
+ "@operato/utils": "^0.4.1",
34
+ "@things-factory/auth-base": "^5.0.0-alpha.1",
35
+ "@things-factory/shell": "^5.0.0-alpha.1"
36
+ },
37
+ "gitHead": "2b3e3818a5d7ab7fdfff9214cc65f56885b27ad0"
38
+ }
File without changes
@@ -0,0 +1,5 @@
1
+ import './routes'
2
+
3
+ export * from './migrations'
4
+ export * from './middlewares'
5
+ export * from './service'
@@ -0,0 +1,3 @@
1
+ export function initMiddlewares(app) {
2
+ /* can add middlewares into app */
3
+ }
@@ -0,0 +1,9 @@
1
+ const glob = require('glob')
2
+ const path = require('path')
3
+
4
+ export var migrations = []
5
+
6
+ glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
7
+ if (file.indexOf('index.js') !== -1) return
8
+ migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
9
+ })
@@ -0,0 +1,28 @@
1
+ const debug = require('debug')('things-factory:dataset:routes')
2
+
3
+ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {
4
+ /*
5
+ * can add global public routes to application (auth not required, tenancy not required)
6
+ *
7
+ * ex) routes.get('/path', async(context, next) => {})
8
+ * ex) routes.post('/path', async(context, next) => {})
9
+ */
10
+ })
11
+
12
+ process.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {
13
+ /*
14
+ * can add global private routes to application (auth required, tenancy not required)
15
+ */
16
+ })
17
+
18
+ process.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {
19
+ /*
20
+ * can add domain public routes to application (auth not required, tenancy required)
21
+ */
22
+ })
23
+
24
+ process.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {
25
+ /*
26
+ * can add domain private routes to application (auth required, tenancy required)
27
+ */
28
+ })
@@ -0,0 +1,56 @@
1
+ import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
+ import { In } from 'typeorm'
3
+
4
+ import { DataSet } from '../data-set/data-set'
5
+ import { DataItem } from './data-item'
6
+ import { DataItemPatch } from './data-item-type'
7
+
8
+ @Resolver(DataItem)
9
+ export class DataItemMutation {
10
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
11
+ @Directive('@transaction')
12
+ @Mutation(returns => [DataItem], { description: "To modify multiple DataItems' information" })
13
+ async updateMultipleDataItem(
14
+ @Arg('dataSetId') dataSetId: string,
15
+ @Arg('patches', type => [DataItemPatch]) patches: DataItemPatch[],
16
+ @Ctx() context: any
17
+ ): Promise<DataItem[]> {
18
+ const { domain, user, tx } = context.state
19
+
20
+ let results = []
21
+ const dataItemRepo = tx.getRepository(DataItem)
22
+ const dataSet = await tx.getRepository(DataSet).findOne(dataSetId)
23
+
24
+ await dataItemRepo.delete({ domain, dataSet: dataSetId })
25
+
26
+ for (let i = 0; i < patches.length; i++) {
27
+ const result = await dataItemRepo.save({
28
+ quota: 1,
29
+ ...patches[i],
30
+ sequence: i,
31
+ dataSet,
32
+ domain,
33
+ creator: user,
34
+ updater: user
35
+ })
36
+
37
+ results.push({ ...result, cuFlag: '+' })
38
+ }
39
+
40
+ return results
41
+ }
42
+
43
+ @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
44
+ @Directive('@transaction')
45
+ @Mutation(returns => Boolean, { description: 'To delete multiple dataItems' })
46
+ async deleteDataItems(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
47
+ const { domain, tx } = context.state
48
+
49
+ await tx.getRepository(DataItem).delete({
50
+ domain,
51
+ id: In(ids)
52
+ })
53
+
54
+ return true
55
+ }
56
+ }
@@ -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 { DataItem } from './data-item'
9
+ import { DataItemList } from './data-item-type'
10
+
11
+ @Resolver(DataItem)
12
+ export class DataItemQuery {
13
+ @Directive('@privilege(category: "data-set", privilege: "query", domainOwnerGranted: true)')
14
+ @Query(returns => DataItem, { description: 'To fetch a DataItem' })
15
+ async dataItem(@Arg('id') id: string, @Ctx() context: any): Promise<DataItem> {
16
+ const { domain } = context.state
17
+
18
+ return await getRepository(DataItem).findOne({
19
+ where: { domain, id }
20
+ })
21
+ }
22
+
23
+ @Directive('@privilege(category: "data-set", privilege: "query", domainOwnerGranted: true)')
24
+ @Query(returns => DataItemList, { description: 'To fetch multiple DataItems' })
25
+ async dataItems(@Args() params: ListParam, @Ctx() context: any): Promise<DataItemList> {
26
+ const { domain } = context.state
27
+
28
+ const convertedParams = convertListParams(params, domain.id)
29
+ const [items, total] = await getRepository(DataItem).findAndCount(convertedParams)
30
+
31
+ return { items, total }
32
+ }
33
+
34
+ @FieldResolver(type => DataSet)
35
+ async dataSet(@Root() dataItem: DataItem): Promise<DataSet> {
36
+ return await getRepository(DataSet).findOne(dataItem.dataSetId)
37
+ }
38
+
39
+ @FieldResolver(type => Domain)
40
+ async domain(@Root() dataItem: DataItem): Promise<Domain> {
41
+ return await getRepository(Domain).findOne(dataItem.domainId)
42
+ }
43
+
44
+ @FieldResolver(type => User)
45
+ async updater(@Root() dataItem: DataItem): Promise<User> {
46
+ return await getRepository(User).findOne(dataItem.updaterId)
47
+ }
48
+
49
+ @FieldResolver(type => User)
50
+ async creator(@Root() dataItem: DataItem): Promise<User> {
51
+ return await getRepository(User).findOne(dataItem.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 { DataItem, DataItemType } from './data-item'
6
+
7
+ @InputType()
8
+ export class DataItemPatch {
9
+ @Field(type => ID, { nullable: true })
10
+ id?: string
11
+
12
+ @Field({ nullable: true })
13
+ dataSetId?: string
14
+
15
+ @Field({ nullable: true })
16
+ name?: string
17
+
18
+ @Field({ nullable: true })
19
+ description?: string
20
+
21
+ @Field(type => Int, { nullable: true })
22
+ sequence?: number
23
+
24
+ @Field(type => DataItemType, { nullable: true })
25
+ type?: DataItemType
26
+
27
+ @Field(type => Int, { nullable: true })
28
+ quota?: number
29
+
30
+ @Field({ nullable: true })
31
+ options?: string
32
+
33
+ @Field({ nullable: true })
34
+ active?: boolean
35
+
36
+ @Field(type => ScalarObject, { nullable: true })
37
+ spec?: object
38
+
39
+ @Field({ nullable: true })
40
+ cuFlag?: string
41
+ }
42
+
43
+ @ObjectType()
44
+ export class DataItemList {
45
+ @Field(type => [DataItem])
46
+ items: DataItem[]
47
+
48
+ @Field(type => Int)
49
+ total: number
50
+ }
@@ -0,0 +1,113 @@
1
+ import { Field, ID, Int, ObjectType, registerEnumType } 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
+ export enum DataItemType {
19
+ number = 'number',
20
+ text = 'text',
21
+ boolean = 'boolean',
22
+ select = 'select'
23
+ }
24
+
25
+ registerEnumType(DataItemType, {
26
+ name: 'DataItemType',
27
+ description: 'state enumeration of a data-item'
28
+ })
29
+
30
+ @Entity()
31
+ @Index('ix_data_item_0', (dataItem: DataItem) => [dataItem.domain, dataItem.dataSet, dataItem.name], { unique: true })
32
+ @ObjectType({ description: 'Entity for DataItem' })
33
+ export class DataItem {
34
+ @PrimaryGeneratedColumn('uuid')
35
+ @Field(type => ID)
36
+ readonly id: string
37
+
38
+ @ManyToOne(type => Domain)
39
+ @Field({ nullable: true })
40
+ domain?: Domain
41
+
42
+ @RelationId((dataItem: DataItem) => dataItem.domain)
43
+ domainId?: string
44
+
45
+ @Column()
46
+ @Field()
47
+ name: string
48
+
49
+ @Column({
50
+ nullable: true
51
+ })
52
+ @Field({ nullable: true })
53
+ description?: string
54
+
55
+ @ManyToOne(type => DataSet, dataSet => dataSet.dataItems, { onDelete: 'CASCADE' })
56
+ @Field(type => DataSet, { nullable: true })
57
+ dataSet?: DataSet
58
+
59
+ @RelationId((dataItem: DataItem) => dataItem.dataSet)
60
+ dataSetId?: string
61
+
62
+ @Column()
63
+ @Field(type => Int, { nullable: true })
64
+ sequence: number
65
+
66
+ @Column({
67
+ nullable: true
68
+ })
69
+ @Field({ nullable: true })
70
+ active?: boolean
71
+
72
+ @Column({
73
+ nullable: true
74
+ })
75
+ @Field({ nullable: true })
76
+ type?: DataItemType
77
+
78
+ @Column({
79
+ nullable: true
80
+ })
81
+ @Field(type => Int, { nullable: true })
82
+ quota: number
83
+
84
+ @Column('simple-json', { nullable: true })
85
+ @Field(type => ScalarObject, { nullable: true })
86
+ spec?: object
87
+
88
+ @CreateDateColumn()
89
+ @Field({ nullable: true })
90
+ createdAt?: Date
91
+
92
+ @UpdateDateColumn()
93
+ @Field({ nullable: true })
94
+ updatedAt?: Date
95
+
96
+ @ManyToOne(type => User, {
97
+ nullable: true
98
+ })
99
+ @Field({ nullable: true })
100
+ creator?: User
101
+
102
+ @RelationId((dataItem: DataItem) => dataItem.creator)
103
+ creatorId?: string
104
+
105
+ @ManyToOne(type => User, {
106
+ nullable: true
107
+ })
108
+ @Field({ nullable: true })
109
+ updater?: User
110
+
111
+ @RelationId((dataItem: DataItem) => dataItem.creator)
112
+ updaterId?: string
113
+ }
@@ -0,0 +1,6 @@
1
+ import { DataItem } from './data-item'
2
+ import { DataItemQuery } from './data-item-query'
3
+ import { DataItemMutation } from './data-item-mutation'
4
+
5
+ export const entities = [DataItem]
6
+ export const resolvers = [DataItemQuery, DataItemMutation]