@things-factory/dataset 5.0.0-alpha.12 → 5.0.0-alpha.15

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/client/bootstrap.js +3 -3
  2. package/client/pages/data-entry-form.js +14 -5
  3. package/client/pages/data-ooc.js +418 -0
  4. package/client/pages/data-sample.js +94 -47
  5. package/client/pages/data-sensor.js +1 -8
  6. package/client/pages/data-set.js +72 -10
  7. package/client/route.js +4 -0
  8. package/dist-server/controllers/data-use-case.js +57 -0
  9. package/dist-server/controllers/data-use-case.js.map +1 -0
  10. package/dist-server/controllers/index.js +17 -0
  11. package/dist-server/controllers/index.js.map +1 -1
  12. package/dist-server/index.js +1 -0
  13. package/dist-server/index.js.map +1 -1
  14. package/dist-server/service/data-item/data-item-type.js +6 -6
  15. package/dist-server/service/data-item/data-item-type.js.map +1 -1
  16. package/dist-server/service/data-item/data-item.js +1 -1
  17. package/dist-server/service/data-item/data-item.js.map +1 -1
  18. package/dist-server/service/data-ooc/data-ooc-mutation.js +130 -0
  19. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -0
  20. package/dist-server/service/data-ooc/data-ooc-query.js +115 -0
  21. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -0
  22. package/dist-server/service/data-ooc/data-ooc-type.js +99 -0
  23. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -0
  24. package/dist-server/service/data-ooc/data-ooc.js +218 -0
  25. package/dist-server/service/data-ooc/data-ooc.js.map +1 -0
  26. package/dist-server/service/data-ooc/index.js +9 -0
  27. package/dist-server/service/data-ooc/index.js.map +1 -0
  28. package/dist-server/service/data-sample/data-sample-mutation.js +31 -89
  29. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  30. package/dist-server/service/data-sample/data-sample-type.js +5 -43
  31. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  32. package/dist-server/service/data-sample/data-sample.js +17 -3
  33. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  34. package/dist-server/service/data-set/data-set-mutation.js +1 -2
  35. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  36. package/dist-server/service/data-set/data-set-query.js +12 -0
  37. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  38. package/dist-server/service/data-set/data-set-type.js +19 -3
  39. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  40. package/dist-server/service/data-set/data-set.js +22 -10
  41. package/dist-server/service/data-set/data-set.js.map +1 -1
  42. package/dist-server/service/index.js +6 -2
  43. package/dist-server/service/index.js.map +1 -1
  44. package/package.json +15 -14
  45. package/server/controllers/data-use-case.ts +85 -0
  46. package/server/controllers/index.ts +1 -0
  47. package/server/index.ts +1 -0
  48. package/server/service/data-item/data-item-type.ts +3 -4
  49. package/server/service/data-item/data-item.ts +1 -1
  50. package/server/service/data-ooc/data-ooc-mutation.ts +117 -0
  51. package/server/service/data-ooc/data-ooc-query.ts +63 -0
  52. package/server/service/data-ooc/data-ooc-type.ts +62 -0
  53. package/server/service/data-ooc/data-ooc.ts +188 -0
  54. package/server/service/data-ooc/index.ts +6 -0
  55. package/server/service/data-sample/data-sample-mutation.ts +35 -97
  56. package/server/service/data-sample/data-sample-type.ts +3 -31
  57. package/server/service/data-sample/data-sample.ts +19 -3
  58. package/server/service/data-set/data-set-mutation.ts +1 -4
  59. package/server/service/data-set/data-set-query.ts +8 -1
  60. package/server/service/data-set/data-set-type.ts +15 -4
  61. package/server/service/data-set/data-set.ts +17 -7
  62. package/server/service/index.ts +6 -2
  63. package/things-factory.config.js +4 -0
  64. package/translations/en.json +13 -2
  65. package/translations/ko.json +13 -2
  66. package/translations/ms.json +13 -2
  67. package/translations/zh.json +13 -2
@@ -15,13 +15,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.schema = exports.entities = void 0;
18
+ const data_item_1 = require("./data-item");
18
19
  /* IMPORT ENTITIES AND RESOLVERS */
19
- const data_sensor_1 = require("./data-sensor");
20
+ const data_ooc_1 = require("./data-ooc");
20
21
  const data_sample_1 = require("./data-sample");
21
- const data_item_1 = require("./data-item");
22
+ const data_sensor_1 = require("./data-sensor");
22
23
  const data_set_1 = require("./data-set");
23
24
  const data_spec_1 = require("./data-spec");
24
25
  /* EXPORT ENTITY TYPES */
26
+ __exportStar(require("./data-ooc/data-ooc"), exports);
25
27
  __exportStar(require("./data-sensor/data-sensor"), exports);
26
28
  __exportStar(require("./data-sample/data-sample"), exports);
27
29
  __exportStar(require("./data-item/data-item"), exports);
@@ -29,6 +31,7 @@ __exportStar(require("./data-set/data-set"), exports);
29
31
  __exportStar(require("./data-spec/data-spec"), exports);
30
32
  exports.entities = [
31
33
  /* ENTITIES */
34
+ ...data_ooc_1.entities,
32
35
  ...data_sensor_1.entities,
33
36
  ...data_sample_1.entities,
34
37
  ...data_item_1.entities,
@@ -38,6 +41,7 @@ exports.entities = [
38
41
  exports.schema = {
39
42
  resolverClasses: [
40
43
  /* RESOLVER CLASSES */
44
+ ...data_ooc_1.resolvers,
41
45
  ...data_sensor_1.resolvers,
42
46
  ...data_sample_1.resolvers,
43
47
  ...data_item_1.resolvers,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,+CAAgG;AAChG,+CAAgG;AAChG,2CAA0F;AAC1F,yCAAuF;AACvF,2CAA0F;AAE1F,yBAAyB;AACzB,4DAAyC;AACzC,4DAAyC;AACzC,wDAAqC;AACrC,sDAAmC;AACnC,wDAAqC;AAExB,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,sBAAkB;IACrB,GAAG,sBAAkB;IACrB,GAAG,oBAAgB;IACnB,GAAG,mBAAe;IAClB,GAAG,oBAAgB;CACpB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,uBAAmB;QACtB,GAAG,uBAAmB;QACtB,GAAG,qBAAiB;QACpB,GAAG,oBAAgB;QACnB,GAAG,qBAAiB;KACrB;CACF,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAA0F;AAC1F,mCAAmC;AACnC,yCAAuF;AACvF,+CAAgG;AAChG,+CAAgG;AAChG,yCAAuF;AACvF,2CAA0F;AAE1F,yBAAyB;AACzB,sDAAmC;AACnC,4DAAyC;AACzC,4DAAyC;AACzC,wDAAqC;AACrC,sDAAmC;AACnC,wDAAqC;AAExB,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,mBAAe;IAClB,GAAG,sBAAkB;IACrB,GAAG,sBAAkB;IACrB,GAAG,oBAAgB;IACnB,GAAG,mBAAe;IAClB,GAAG,oBAAgB;CACpB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,oBAAgB;QACnB,GAAG,uBAAmB;QACtB,GAAG,uBAAmB;QACtB,GAAG,qBAAiB;QACpB,GAAG,oBAAgB;QACnB,GAAG,qBAAiB;KACrB;CACF,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/dataset",
3
- "version": "5.0.0-alpha.12",
3
+ "version": "5.0.0-alpha.15",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,18 +24,19 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
25
25
  },
26
26
  "dependencies": {
27
- "@operato/app": "1.0.0-alpha.30",
28
- "@operato/data-grist": "1.0.0-alpha.30",
29
- "@operato/dataset": "1.0.0-alpha.30",
30
- "@operato/graphql": "1.0.0-alpha.30",
31
- "@operato/i18n": "1.0.0-alpha.30",
32
- "@operato/layout": "1.0.0-alpha.30",
33
- "@operato/shell": "1.0.0-alpha.30",
34
- "@operato/styles": "1.0.0-alpha.30",
35
- "@operato/utils": "1.0.0-alpha.30",
36
- "@things-factory/auth-base": "^5.0.0-alpha.12",
37
- "@things-factory/env": "^5.0.0-alpha.12",
38
- "@things-factory/shell": "^5.0.0-alpha.12"
27
+ "@operato/app": "1.0.0-alpha.35",
28
+ "@operato/data-grist": "1.0.0-alpha.35",
29
+ "@operato/dataset": "1.0.0-alpha.35",
30
+ "@operato/graphql": "1.0.0-alpha.35",
31
+ "@operato/i18n": "1.0.0-alpha.35",
32
+ "@operato/layout": "1.0.0-alpha.35",
33
+ "@operato/shell": "1.0.0-alpha.35",
34
+ "@operato/styles": "1.0.0-alpha.35",
35
+ "@operato/utils": "1.0.0-alpha.35",
36
+ "@things-factory/auth-base": "^5.0.0-alpha.15",
37
+ "@things-factory/env": "^5.0.0-alpha.15",
38
+ "@things-factory/shell": "^5.0.0-alpha.15",
39
+ "moment": "^2.29.1"
39
40
  },
40
- "gitHead": "fdfb881f0a6ae429387c04494449ed50c2a117b0"
41
+ "gitHead": "88072e1d32788fff7c2f06f2b21b62ba944786ab"
41
42
  }
@@ -0,0 +1,85 @@
1
+ import { DataItem, DataSet } from 'server/service'
2
+
3
+ export type DataItemSpec = {
4
+ type: string
5
+ label: string
6
+ name: string
7
+ property: { [option: string]: any }
8
+ }
9
+
10
+ export type DataItemSpecSet = {
11
+ name: string
12
+ description: string
13
+ specs: DataItemSpec[]
14
+ }
15
+
16
+ export type EvaluationResult = { oos: boolean; ooc: boolean }
17
+
18
+ export abstract class DataUseCase {
19
+ static registry: { [name: string]: DataUseCase } = {}
20
+
21
+ public static registerUseCase(name: string, provider: DataUseCase) {
22
+ DataUseCase.registry[name] = provider
23
+ }
24
+
25
+ public static getUseCaseNames() {
26
+ return Object.keys(DataUseCase.registry)
27
+ }
28
+
29
+ public static getUseCase(name: string): DataUseCase | undefined {
30
+ return DataUseCase.registry[name]
31
+ }
32
+
33
+ public static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult {
34
+ var ooc = false
35
+ var oos = false
36
+
37
+ if (!dataSet.useCase) {
38
+ return { ooc, oos }
39
+ }
40
+
41
+ const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim())
42
+ const useCases = useCaseNames.map(useCaseName => DataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase)
43
+
44
+ for (let i = 0; i < dataItems.length; i++) {
45
+ const dataItem = dataItems[i]
46
+ const { active, tag } = dataItem
47
+ if (!active || !tag) {
48
+ continue
49
+ }
50
+
51
+ let values: any | any[] = data[tag]
52
+ if (typeof values === 'undefined') {
53
+ continue // TODO what if in case no value ?
54
+ }
55
+
56
+ if (!(values instanceof Array)) {
57
+ values = [values]
58
+ }
59
+
60
+ for (let j = 0; j < useCases.length; j++) {
61
+ const useCase = useCases[j]
62
+
63
+ const specs = dataItem.spec?.[dataSet.useCase]
64
+ if (!specs) {
65
+ continue
66
+ }
67
+
68
+ const result = useCase.evaluate(specs, values)
69
+
70
+ if (result) {
71
+ ooc ||= result.ooc
72
+ oos ||= result.oos
73
+ }
74
+
75
+ // if (ooc && oos) {
76
+ // return { ooc, oos }
77
+ // }
78
+ }
79
+ }
80
+
81
+ return { ooc, oos }
82
+ }
83
+
84
+ public abstract evaluate(specs: any, values: any[]): EvaluationResult
85
+ }
@@ -0,0 +1 @@
1
+ export * from './data-use-case'
package/server/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import './routes'
2
2
 
3
+ export * from './controllers'
3
4
  export * from './migrations'
4
5
  export * from './middlewares'
5
6
  export * from './service'
@@ -1,15 +1,14 @@
1
1
  import { DataItem, DataItemType } from './data-item'
2
2
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
3
-
4
- import { ScalarObject } from '@things-factory/shell'
3
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
5
4
 
6
5
  @InputType()
7
6
  export class DataItemPatch {
8
7
  @Field(type => ID, { nullable: true })
9
8
  id?: string
10
9
 
11
- @Field({ nullable: true })
12
- dataSetId?: string
10
+ @Field(type => ObjectRef, { nullable: true })
11
+ dataSet?: ObjectRef
13
12
 
14
13
  @Field({ nullable: true })
15
14
  name?: string
@@ -53,7 +53,7 @@ export class DataItem {
53
53
  description?: string
54
54
 
55
55
  @ManyToOne(type => DataSet, dataSet => dataSet.dataItems, { onDelete: 'CASCADE' })
56
- @Field(type => DataSet, { nullable: true })
56
+ @Field(type => DataSet, { nullable: false })
57
57
  dataSet?: DataSet
58
58
 
59
59
  @RelationId((dataItem: DataItem) => dataItem.dataSet)
@@ -0,0 +1,117 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { getRepository, In } from 'typeorm'
3
+ import { DataOoc, DataOocStatus } from './data-ooc'
4
+ import { NewDataOoc, DataOocPatch } from './data-ooc-type'
5
+
6
+ @Resolver(DataOoc)
7
+ export class DataOocMutation {
8
+ @Directive('@privilege(category: "data-ooc", privilege: "mutation", domainOwnerGranted: true)')
9
+ @Directive('@transaction')
10
+ @Mutation(returns => DataOoc, { description: 'To create new DataOoc' })
11
+ async createDataOoc(@Arg('dataOoc') dataOoc: NewDataOoc, @Ctx() context: any): Promise<DataOoc> {
12
+ const { domain, user, tx } = context.state
13
+
14
+ return await tx.getRepository(DataOoc).save({
15
+ ...dataOoc,
16
+ domain,
17
+ creator: user,
18
+ updater: user
19
+ })
20
+ }
21
+
22
+ @Directive('@privilege(category: "data-ooc", privilege: "mutation", domainOwnerGranted: true)')
23
+ @Directive('@transaction')
24
+ @Mutation(returns => DataOoc, { description: 'To modify DataOoc information' })
25
+ async updateDataOoc(@Arg('id') id: string, @Arg('patch') patch: DataOocPatch, @Ctx() context: any): Promise<DataOoc> {
26
+ const { domain, user, tx } = context.state
27
+
28
+ const repository = tx.getRepository(DataOoc)
29
+ const dataOoc = await repository.findOne({
30
+ where: { domain, id }
31
+ })
32
+
33
+ const more = {} as any
34
+ if (patch.correctiveAction) {
35
+ more.corrector = user
36
+ more.state = DataOocStatus.CORRECTED
37
+ }
38
+
39
+ return await repository.save({
40
+ ...dataOoc,
41
+ ...patch,
42
+ ...more,
43
+ updater: user
44
+ })
45
+ }
46
+
47
+ @Directive('@privilege(category: "data-ooc", privilege: "mutation", domainOwnerGranted: true)')
48
+ @Directive('@transaction')
49
+ @Mutation(returns => [DataOoc], { description: "To modify multiple DataOoc' information" })
50
+ async updateMultipleDataOoc(
51
+ @Arg('patches', type => [DataOocPatch]) patches: DataOocPatch[],
52
+ @Ctx() context: any
53
+ ): Promise<DataOoc[]> {
54
+ const { domain, user, tx } = context.state
55
+
56
+ let results = []
57
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
58
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
59
+ const dataOocRepo = tx.getRepository(DataOoc)
60
+
61
+ if (_createRecords.length > 0) {
62
+ for (let i = 0; i < _createRecords.length; i++) {
63
+ const newRecord = _createRecords[i]
64
+
65
+ const result = await dataOocRepo.save({
66
+ ...newRecord,
67
+ domain,
68
+ creator: user,
69
+ updater: user
70
+ })
71
+
72
+ results.push({ ...result, cuFlag: '+' })
73
+ }
74
+ }
75
+
76
+ if (_updateRecords.length > 0) {
77
+ for (let i = 0; i < _updateRecords.length; i++) {
78
+ const newRecord = _updateRecords[i]
79
+ const dataOoc = await dataOocRepo.findOne(newRecord.id)
80
+
81
+ const result = await dataOocRepo.save({
82
+ ...dataOoc,
83
+ ...newRecord,
84
+ updater: user
85
+ })
86
+
87
+ results.push({ ...result, cuFlag: 'M' })
88
+ }
89
+ }
90
+
91
+ return results
92
+ }
93
+
94
+ @Directive('@privilege(category: "data-ooc", privilege: "mutation", domainOwnerGranted: true)')
95
+ @Directive('@transaction')
96
+ @Mutation(returns => Boolean, { description: 'To delete DataOoc' })
97
+ async deleteDataOoc(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
98
+ const { domain, tx } = context.state
99
+
100
+ await tx.getRepository(DataOoc).delete({ domain, id })
101
+ return true
102
+ }
103
+
104
+ @Directive('@privilege(category: "data-ooc", privilege: "mutation", domainOwnerGranted: true)')
105
+ @Directive('@transaction')
106
+ @Mutation(returns => Boolean, { description: 'To delete multiple dataOocs' })
107
+ async deleteDataOocs(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
108
+ const { domain, tx } = context.state
109
+
110
+ await tx.getRepository(DataOoc).delete({
111
+ domain,
112
+ id: In(ids)
113
+ })
114
+
115
+ return true
116
+ }
117
+ }
@@ -0,0 +1,63 @@
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 { DataSample } from '../data-sample/data-sample'
8
+ import { DataSet } from '../data-set/data-set'
9
+ import { DataOoc } from './data-ooc'
10
+ import { DataOocList } from './data-ooc-type'
11
+
12
+ @Resolver(DataOoc)
13
+ export class DataOocQuery {
14
+ @Directive('@privilege(category: "data-ooc", privilege: "query", domainOwnerGranted: true)')
15
+ @Query(returns => DataOoc, { description: 'To fetch a DataOoc' })
16
+ async dataOoc(@Arg('id') id: string, @Ctx() context: any): Promise<DataOoc> {
17
+ const { domain } = context.state
18
+
19
+ return await getRepository(DataOoc).findOne({
20
+ where: { domain, id }
21
+ })
22
+ }
23
+
24
+ @Directive('@privilege(category: "data-ooc", privilege: "query", domainOwnerGranted: true)')
25
+ @Query(returns => DataOocList, { description: 'To fetch multiple DataOoc' })
26
+ async dataOocs(@Args() params: ListParam, @Ctx() context: any): Promise<DataOocList> {
27
+ const { domain } = context.state
28
+
29
+ const convertedParams = convertListParams(params, domain.id)
30
+ const [items, total] = await getRepository(DataOoc).findAndCount(convertedParams)
31
+
32
+ return { items, total }
33
+ }
34
+
35
+ @FieldResolver(type => DataSet)
36
+ async dataSet(@Root() dataOoc: DataOoc): Promise<DataSet> {
37
+ return await getRepository(DataSet).findOne({
38
+ id: dataOoc.dataSetId
39
+ })
40
+ }
41
+
42
+ @FieldResolver(type => DataSample)
43
+ async dataSample(@Root() dataOoc: DataOoc): Promise<DataSample> {
44
+ return await getRepository(DataSample).findOne({
45
+ id: dataOoc.dataSampleId
46
+ })
47
+ }
48
+
49
+ @FieldResolver(type => Domain)
50
+ async domain(@Root() dataOoc: DataOoc): Promise<Domain> {
51
+ return await getRepository(Domain).findOne(dataOoc.domainId)
52
+ }
53
+
54
+ @FieldResolver(type => User)
55
+ async updater(@Root() dataOoc: DataOoc): Promise<User> {
56
+ return await getRepository(User).findOne(dataOoc.updaterId)
57
+ }
58
+
59
+ @FieldResolver(type => User)
60
+ async creator(@Root() dataOoc: DataOoc): Promise<User> {
61
+ return await getRepository(User).findOne(dataOoc.creatorId)
62
+ }
63
+ }
@@ -0,0 +1,62 @@
1
+ import { DataOoc, DataOocStatus } from './data-ooc'
2
+ import { Field, ID, InputType, Int, ObjectType, registerEnumType } from 'type-graphql'
3
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
4
+
5
+ import { User } from '@things-factory/auth-base'
6
+
7
+ @InputType()
8
+ export class NewDataOoc {
9
+ @Field()
10
+ name: string
11
+
12
+ @Field({ nullable: true })
13
+ description?: string
14
+
15
+ @Field(type => ObjectRef, { nullable: true })
16
+ dataSet?: ObjectRef
17
+
18
+ @Field(type => ObjectRef, { nullable: true })
19
+ dataSample?: ObjectRef
20
+
21
+ @Field(type => DataOocStatus, { nullable: true })
22
+ state?: DataOocStatus
23
+
24
+ @Field(type => ScalarObject, { nullable: true })
25
+ data?: ScalarObject
26
+
27
+ @Field({ nullable: true })
28
+ rawData?: string
29
+
30
+ @Field({ nullable: true })
31
+ source?: string
32
+
33
+ @Field({ nullable: true })
34
+ ooc?: boolean
35
+
36
+ @Field({ nullable: true })
37
+ oos?: boolean
38
+
39
+ @Field({ nullable: true })
40
+ collectedAt?: Date
41
+ }
42
+
43
+ @InputType()
44
+ export class DataOocPatch {
45
+ @Field(type => ID, { nullable: true })
46
+ id?: string
47
+
48
+ @Field(type => DataOocStatus, { nullable: true })
49
+ state?: DataOocStatus
50
+
51
+ @Field({ nullable: true })
52
+ correctiveAction?: string
53
+ }
54
+
55
+ @ObjectType()
56
+ export class DataOocList {
57
+ @Field(type => [DataOoc])
58
+ items: DataOoc[]
59
+
60
+ @Field(type => Int)
61
+ total: number
62
+ }
@@ -0,0 +1,188 @@
1
+ import {
2
+ Column,
3
+ CreateDateColumn,
4
+ Entity,
5
+ Index,
6
+ JoinColumn,
7
+ ManyToOne,
8
+ OneToOne,
9
+ PrimaryGeneratedColumn,
10
+ RelationId,
11
+ UpdateDateColumn
12
+ } from 'typeorm'
13
+ import { Domain, ScalarObject } from '@things-factory/shell'
14
+ import { Field, ID, Int, ObjectType, registerEnumType } from 'type-graphql'
15
+
16
+ import { DataSample } from '../data-sample/data-sample'
17
+ import { DataSet } from '../data-set/data-set'
18
+ import { User } from '@things-factory/auth-base'
19
+ import { config } from '@things-factory/env'
20
+
21
+ const ORMCONFIG = config.get('ormconfig', {})
22
+ const DATABASE_TYPE = ORMCONFIG.type
23
+
24
+ export enum DataOocStatus {
25
+ CREATED = 'CREATED',
26
+ REVIEWED = 'REVIEWED',
27
+ CORRECTED = 'CORRECTED',
28
+ SUBMITTED = 'SUBMITTED',
29
+ APPROVED = 'APPROVED',
30
+ REJECTED = 'REJECTED'
31
+ }
32
+
33
+ registerEnumType(DataOocStatus, {
34
+ name: 'DataOocStatus',
35
+ description: 'Out of control data corrective action process progress status'
36
+ })
37
+
38
+ @Entity()
39
+ @Index('ix_data_ooc_0', (dataOoc: DataOoc) => [dataOoc.domain, dataOoc.dataSet], { unique: false })
40
+ @Index('ix_data_ooc_1', (dataOoc: DataOoc) => [dataOoc.domain, dataOoc.dataSample], { unique: true })
41
+ @Index('ix_data_ooc_2', (dataOoc: DataOoc) => [dataOoc.domain, dataOoc.collectedAt], { unique: false })
42
+ @ObjectType({ description: 'Entity for Out of control data' })
43
+ export class DataOoc {
44
+ @PrimaryGeneratedColumn('uuid')
45
+ @Field(type => ID)
46
+ readonly id: string
47
+
48
+ @ManyToOne(type => Domain)
49
+ @Field({ nullable: true })
50
+ domain?: Domain
51
+
52
+ @RelationId((dataOoc: DataOoc) => dataOoc.domain)
53
+ domainId?: string
54
+
55
+ @Column()
56
+ @Field()
57
+ name: string
58
+
59
+ @Column({
60
+ nullable: true
61
+ })
62
+ @Field({ nullable: true })
63
+ description?: string
64
+
65
+ @ManyToOne(type => DataSet)
66
+ @Field(type => DataSet, { nullable: true })
67
+ dataSet?: DataSet
68
+
69
+ @RelationId((dataOoc: DataOoc) => dataOoc.dataSet)
70
+ dataSetId?: string
71
+
72
+ @OneToOne(type => DataSample)
73
+ @JoinColumn()
74
+ @Field(type => DataSample, { nullable: true })
75
+ dataSample?: DataSample
76
+
77
+ @RelationId((dataOoc: DataOoc) => dataOoc.dataSample)
78
+ dataSampleId?: string
79
+
80
+ @Column({
81
+ nullable: true
82
+ })
83
+ @Field({ nullable: true })
84
+ ooc?: boolean
85
+
86
+ @Column({
87
+ nullable: true
88
+ })
89
+ @Field({ nullable: true })
90
+ oos?: boolean
91
+
92
+ @Column({
93
+ nullable: true
94
+ })
95
+ @Field({ nullable: true })
96
+ state?: DataOocStatus
97
+
98
+ @Column({
99
+ nullable: true,
100
+ type:
101
+ DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
102
+ ? 'longtext'
103
+ : DATABASE_TYPE == 'oracle'
104
+ ? 'clob'
105
+ : 'varchar'
106
+ })
107
+ @Field({ nullable: true })
108
+ correctiveAction?: string
109
+
110
+ @Column({
111
+ nullable: true
112
+ })
113
+ @Field({ nullable: true })
114
+ type?: string
115
+
116
+ @Column('simple-json', { nullable: true })
117
+ @Field(type => ScalarObject, { nullable: true })
118
+ partitionKeys?: ScalarObject
119
+
120
+ @Column('simple-json', { nullable: true })
121
+ @Field(type => ScalarObject, { nullable: true })
122
+ data?: ScalarObject
123
+
124
+ @Column('simple-json', { nullable: true })
125
+ @Field(type => ScalarObject, { nullable: true })
126
+ spec?: ScalarObject
127
+
128
+ @Column({
129
+ nullable: true,
130
+ type:
131
+ DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
132
+ ? 'longtext'
133
+ : DATABASE_TYPE == 'oracle'
134
+ ? 'clob'
135
+ : 'varchar'
136
+ })
137
+ @Field({ nullable: true })
138
+ rawData?: string
139
+
140
+ @Column({
141
+ nullable: true
142
+ })
143
+ @Field({ nullable: true })
144
+ source?: string
145
+
146
+ @Column({ nullable: true })
147
+ @Field({ nullable: true })
148
+ collectedAt?: Date
149
+
150
+ @Column({ nullable: true })
151
+ @Field({ nullable: true })
152
+ correctedAt?: Date
153
+
154
+ @CreateDateColumn()
155
+ @Field({ nullable: true })
156
+ createdAt?: Date
157
+
158
+ @UpdateDateColumn()
159
+ @Field({ nullable: true })
160
+ updatedAt?: Date
161
+
162
+ @ManyToOne(type => User, {
163
+ nullable: true
164
+ })
165
+ @Field({ nullable: true })
166
+ corrector?: User
167
+
168
+ @RelationId((dataOoc: DataOoc) => dataOoc.corrector)
169
+ correctorId?: string
170
+
171
+ @ManyToOne(type => User, {
172
+ nullable: true
173
+ })
174
+ @Field({ nullable: true })
175
+ creator?: User
176
+
177
+ @RelationId((dataOoc: DataOoc) => dataOoc.creator)
178
+ creatorId?: string
179
+
180
+ @ManyToOne(type => User, {
181
+ nullable: true
182
+ })
183
+ @Field({ nullable: true })
184
+ updater?: User
185
+
186
+ @RelationId((dataOoc: DataOoc) => dataOoc.creator)
187
+ updaterId?: string
188
+ }
@@ -0,0 +1,6 @@
1
+ import { DataOoc } from './data-ooc'
2
+ import { DataOocMutation } from './data-ooc-mutation'
3
+ import { DataOocQuery } from './data-ooc-query'
4
+
5
+ export const entities = [DataOoc]
6
+ export const resolvers = [DataOocQuery, DataOocMutation]