@things-factory/kpi 1.0.0-alpha.5

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 (259) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/assets/images/hatiolab-logo.png +0 -0
  3. package/client/index.ts +0 -0
  4. package/client/pages/kpe-metric/kpe-metric-importer.ts +90 -0
  5. package/client/pages/kpe-metric/kpe-metric-list-page.ts +398 -0
  6. package/client/pages/kpi/kpi-importer.ts +90 -0
  7. package/client/pages/kpi/kpi-list-page.ts +398 -0
  8. package/client/pages/kpi-category/kpi-category-importer.ts +90 -0
  9. package/client/pages/kpi-category/kpi-category-list-page.ts +398 -0
  10. package/client/pages/kpi-formula/kpi-formula-importer.ts +90 -0
  11. package/client/pages/kpi-formula/kpi-formula-list-page.ts +398 -0
  12. package/client/pages/kpi-grade/kpi-grade-importer.ts +90 -0
  13. package/client/pages/kpi-grade/kpi-grade-list-page.ts +398 -0
  14. package/client/pages/kpi-metric/kpi-metric-importer.ts +90 -0
  15. package/client/pages/kpi-metric/kpi-metric-list-page.ts +398 -0
  16. package/client/pages/kpi-value/kpi-value-importer.ts +90 -0
  17. package/client/pages/kpi-value/kpi-value-list-page.ts +398 -0
  18. package/client/pages/metric/metric-importer.ts +90 -0
  19. package/client/pages/metric/metric-list-page.ts +398 -0
  20. package/client/route.ts +4 -0
  21. package/client/tsconfig.json +11 -0
  22. package/design-entities.md +97 -0
  23. package/dist-client/index.d.ts +0 -0
  24. package/dist-client/index.js +2 -0
  25. package/dist-client/index.js.map +1 -0
  26. package/dist-client/pages/kpe-metric/kpe-metric-importer.d.ts +23 -0
  27. package/dist-client/pages/kpe-metric/kpe-metric-importer.js +93 -0
  28. package/dist-client/pages/kpe-metric/kpe-metric-importer.js.map +1 -0
  29. package/dist-client/pages/kpe-metric/kpe-metric-list-page.d.ts +66 -0
  30. package/dist-client/pages/kpe-metric/kpe-metric-list-page.js +370 -0
  31. package/dist-client/pages/kpe-metric/kpe-metric-list-page.js.map +1 -0
  32. package/dist-client/pages/kpi/kpi-importer.d.ts +23 -0
  33. package/dist-client/pages/kpi/kpi-importer.js +93 -0
  34. package/dist-client/pages/kpi/kpi-importer.js.map +1 -0
  35. package/dist-client/pages/kpi/kpi-list-page.d.ts +66 -0
  36. package/dist-client/pages/kpi/kpi-list-page.js +370 -0
  37. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -0
  38. package/dist-client/pages/kpi-category/kpi-category-importer.d.ts +23 -0
  39. package/dist-client/pages/kpi-category/kpi-category-importer.js +93 -0
  40. package/dist-client/pages/kpi-category/kpi-category-importer.js.map +1 -0
  41. package/dist-client/pages/kpi-category/kpi-category-list-page.d.ts +66 -0
  42. package/dist-client/pages/kpi-category/kpi-category-list-page.js +370 -0
  43. package/dist-client/pages/kpi-category/kpi-category-list-page.js.map +1 -0
  44. package/dist-client/pages/kpi-formula/kpi-formula-importer.d.ts +23 -0
  45. package/dist-client/pages/kpi-formula/kpi-formula-importer.js +93 -0
  46. package/dist-client/pages/kpi-formula/kpi-formula-importer.js.map +1 -0
  47. package/dist-client/pages/kpi-formula/kpi-formula-list-page.d.ts +66 -0
  48. package/dist-client/pages/kpi-formula/kpi-formula-list-page.js +370 -0
  49. package/dist-client/pages/kpi-formula/kpi-formula-list-page.js.map +1 -0
  50. package/dist-client/pages/kpi-grade/kpi-grade-importer.d.ts +23 -0
  51. package/dist-client/pages/kpi-grade/kpi-grade-importer.js +93 -0
  52. package/dist-client/pages/kpi-grade/kpi-grade-importer.js.map +1 -0
  53. package/dist-client/pages/kpi-grade/kpi-grade-list-page.d.ts +66 -0
  54. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js +370 -0
  55. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js.map +1 -0
  56. package/dist-client/pages/kpi-metric/kpi-metric-importer.d.ts +23 -0
  57. package/dist-client/pages/kpi-metric/kpi-metric-importer.js +93 -0
  58. package/dist-client/pages/kpi-metric/kpi-metric-importer.js.map +1 -0
  59. package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +66 -0
  60. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +370 -0
  61. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +1 -0
  62. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +23 -0
  63. package/dist-client/pages/kpi-value/kpi-value-importer.js +93 -0
  64. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -0
  65. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +66 -0
  66. package/dist-client/pages/kpi-value/kpi-value-list-page.js +370 -0
  67. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -0
  68. package/dist-client/pages/metric/metric-importer.d.ts +23 -0
  69. package/dist-client/pages/metric/metric-importer.js +93 -0
  70. package/dist-client/pages/metric/metric-importer.js.map +1 -0
  71. package/dist-client/pages/metric/metric-list-page.d.ts +66 -0
  72. package/dist-client/pages/metric/metric-list-page.js +370 -0
  73. package/dist-client/pages/metric/metric-list-page.js.map +1 -0
  74. package/dist-client/route.d.ts +1 -0
  75. package/dist-client/route.js +5 -0
  76. package/dist-client/route.js.map +1 -0
  77. package/dist-client/tsconfig.tsbuildinfo +1 -0
  78. package/dist-server/index.d.ts +2 -0
  79. package/dist-server/index.js +6 -0
  80. package/dist-server/index.js.map +1 -0
  81. package/dist-server/routes.d.ts +0 -0
  82. package/dist-server/routes.js +24 -0
  83. package/dist-server/routes.js.map +1 -0
  84. package/dist-server/service/index.d.ts +16 -0
  85. package/dist-server/service/index.js +45 -0
  86. package/dist-server/service/index.js.map +1 -0
  87. package/dist-server/service/kpi/event-subscriber.d.ts +7 -0
  88. package/dist-server/service/kpi/event-subscriber.js +21 -0
  89. package/dist-server/service/kpi/event-subscriber.js.map +1 -0
  90. package/dist-server/service/kpi/index.d.ts +7 -0
  91. package/dist-server/service/kpi/index.js +12 -0
  92. package/dist-server/service/kpi/index.js.map +1 -0
  93. package/dist-server/service/kpi/kpi-history.d.ts +25 -0
  94. package/dist-server/service/kpi/kpi-history.js +128 -0
  95. package/dist-server/service/kpi/kpi-history.js.map +1 -0
  96. package/dist-server/service/kpi/kpi-mutation.d.ts +10 -0
  97. package/dist-server/service/kpi/kpi-mutation.js +169 -0
  98. package/dist-server/service/kpi/kpi-mutation.js.map +1 -0
  99. package/dist-server/service/kpi/kpi-query.d.ts +12 -0
  100. package/dist-server/service/kpi/kpi-query.js +97 -0
  101. package/dist-server/service/kpi/kpi-query.js.map +1 -0
  102. package/dist-server/service/kpi/kpi-type.d.ts +23 -0
  103. package/dist-server/service/kpi/kpi-type.js +86 -0
  104. package/dist-server/service/kpi/kpi-type.js.map +1 -0
  105. package/dist-server/service/kpi/kpi.d.ts +25 -0
  106. package/dist-server/service/kpi/kpi.js +113 -0
  107. package/dist-server/service/kpi/kpi.js.map +1 -0
  108. package/dist-server/service/kpi-category/index.d.ts +6 -0
  109. package/dist-server/service/kpi-category/index.js +10 -0
  110. package/dist-server/service/kpi-category/index.js.map +1 -0
  111. package/dist-server/service/kpi-category/kpi-category-mutation.d.ts +10 -0
  112. package/dist-server/service/kpi-category/kpi-category-mutation.js +128 -0
  113. package/dist-server/service/kpi-category/kpi-category-mutation.js.map +1 -0
  114. package/dist-server/service/kpi-category/kpi-category-query.d.ts +11 -0
  115. package/dist-server/service/kpi-category/kpi-category-query.js +79 -0
  116. package/dist-server/service/kpi-category/kpi-category-query.js.map +1 -0
  117. package/dist-server/service/kpi-category/kpi-category-type.d.ts +20 -0
  118. package/dist-server/service/kpi-category/kpi-category-type.js +77 -0
  119. package/dist-server/service/kpi-category/kpi-category-type.js.map +1 -0
  120. package/dist-server/service/kpi-category/kpi-category.d.ts +22 -0
  121. package/dist-server/service/kpi-category/kpi-category.js +95 -0
  122. package/dist-server/service/kpi-category/kpi-category.js.map +1 -0
  123. package/dist-server/service/kpi-formula/event-subscriber.d.ts +7 -0
  124. package/dist-server/service/kpi-formula/event-subscriber.js +21 -0
  125. package/dist-server/service/kpi-formula/event-subscriber.js.map +1 -0
  126. package/dist-server/service/kpi-formula/index.d.ts +7 -0
  127. package/dist-server/service/kpi-formula/index.js +12 -0
  128. package/dist-server/service/kpi-formula/index.js.map +1 -0
  129. package/dist-server/service/kpi-formula/kpi-formula-history.d.ts +25 -0
  130. package/dist-server/service/kpi-formula/kpi-formula-history.js +128 -0
  131. package/dist-server/service/kpi-formula/kpi-formula-history.js.map +1 -0
  132. package/dist-server/service/kpi-formula/kpi-formula-mutation.d.ts +10 -0
  133. package/dist-server/service/kpi-formula/kpi-formula-mutation.js +128 -0
  134. package/dist-server/service/kpi-formula/kpi-formula-mutation.js.map +1 -0
  135. package/dist-server/service/kpi-formula/kpi-formula-query.d.ts +11 -0
  136. package/dist-server/service/kpi-formula/kpi-formula-query.js +79 -0
  137. package/dist-server/service/kpi-formula/kpi-formula-query.js.map +1 -0
  138. package/dist-server/service/kpi-formula/kpi-formula-type.d.ts +20 -0
  139. package/dist-server/service/kpi-formula/kpi-formula-type.js +77 -0
  140. package/dist-server/service/kpi-formula/kpi-formula-type.js.map +1 -0
  141. package/dist-server/service/kpi-formula/kpi-formula.d.ts +24 -0
  142. package/dist-server/service/kpi-formula/kpi-formula.js +109 -0
  143. package/dist-server/service/kpi-formula/kpi-formula.js.map +1 -0
  144. package/dist-server/service/kpi-grade/event-subscriber.d.ts +7 -0
  145. package/dist-server/service/kpi-grade/event-subscriber.js +21 -0
  146. package/dist-server/service/kpi-grade/event-subscriber.js.map +1 -0
  147. package/dist-server/service/kpi-grade/index.d.ts +7 -0
  148. package/dist-server/service/kpi-grade/index.js +12 -0
  149. package/dist-server/service/kpi-grade/index.js.map +1 -0
  150. package/dist-server/service/kpi-grade/kpi-grade-history.d.ts +25 -0
  151. package/dist-server/service/kpi-grade/kpi-grade-history.js +128 -0
  152. package/dist-server/service/kpi-grade/kpi-grade-history.js.map +1 -0
  153. package/dist-server/service/kpi-grade/kpi-grade-mutation.d.ts +10 -0
  154. package/dist-server/service/kpi-grade/kpi-grade-mutation.js +128 -0
  155. package/dist-server/service/kpi-grade/kpi-grade-mutation.js.map +1 -0
  156. package/dist-server/service/kpi-grade/kpi-grade-query.d.ts +11 -0
  157. package/dist-server/service/kpi-grade/kpi-grade-query.js +79 -0
  158. package/dist-server/service/kpi-grade/kpi-grade-query.js.map +1 -0
  159. package/dist-server/service/kpi-grade/kpi-grade-type.d.ts +20 -0
  160. package/dist-server/service/kpi-grade/kpi-grade-type.js +77 -0
  161. package/dist-server/service/kpi-grade/kpi-grade-type.js.map +1 -0
  162. package/dist-server/service/kpi-grade/kpi-grade.d.ts +24 -0
  163. package/dist-server/service/kpi-grade/kpi-grade.js +109 -0
  164. package/dist-server/service/kpi-grade/kpi-grade.js.map +1 -0
  165. package/dist-server/service/kpi-metric/event-subscriber.d.ts +7 -0
  166. package/dist-server/service/kpi-metric/event-subscriber.js +21 -0
  167. package/dist-server/service/kpi-metric/event-subscriber.js.map +1 -0
  168. package/dist-server/service/kpi-metric/index.d.ts +7 -0
  169. package/dist-server/service/kpi-metric/index.js +12 -0
  170. package/dist-server/service/kpi-metric/index.js.map +1 -0
  171. package/dist-server/service/kpi-metric/kpi-metric-history.d.ts +25 -0
  172. package/dist-server/service/kpi-metric/kpi-metric-history.js +128 -0
  173. package/dist-server/service/kpi-metric/kpi-metric-history.js.map +1 -0
  174. package/dist-server/service/kpi-metric/kpi-metric-mutation.d.ts +10 -0
  175. package/dist-server/service/kpi-metric/kpi-metric-mutation.js +169 -0
  176. package/dist-server/service/kpi-metric/kpi-metric-mutation.js.map +1 -0
  177. package/dist-server/service/kpi-metric/kpi-metric-query.d.ts +12 -0
  178. package/dist-server/service/kpi-metric/kpi-metric-query.js +97 -0
  179. package/dist-server/service/kpi-metric/kpi-metric-query.js.map +1 -0
  180. package/dist-server/service/kpi-metric/kpi-metric-type.d.ts +23 -0
  181. package/dist-server/service/kpi-metric/kpi-metric-type.js +86 -0
  182. package/dist-server/service/kpi-metric/kpi-metric-type.js.map +1 -0
  183. package/dist-server/service/kpi-metric/kpi-metric.d.ts +25 -0
  184. package/dist-server/service/kpi-metric/kpi-metric.js +113 -0
  185. package/dist-server/service/kpi-metric/kpi-metric.js.map +1 -0
  186. package/dist-server/service/kpi-value/index.d.ts +6 -0
  187. package/dist-server/service/kpi-value/index.js +10 -0
  188. package/dist-server/service/kpi-value/index.js.map +1 -0
  189. package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +10 -0
  190. package/dist-server/service/kpi-value/kpi-value-mutation.js +128 -0
  191. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -0
  192. package/dist-server/service/kpi-value/kpi-value-query.d.ts +11 -0
  193. package/dist-server/service/kpi-value/kpi-value-query.js +79 -0
  194. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
  195. package/dist-server/service/kpi-value/kpi-value-type.d.ts +20 -0
  196. package/dist-server/service/kpi-value/kpi-value-type.js +77 -0
  197. package/dist-server/service/kpi-value/kpi-value-type.js.map +1 -0
  198. package/dist-server/service/kpi-value/kpi-value.d.ts +22 -0
  199. package/dist-server/service/kpi-value/kpi-value.js +95 -0
  200. package/dist-server/service/kpi-value/kpi-value.js.map +1 -0
  201. package/dist-server/tsconfig.tsbuildinfo +1 -0
  202. package/helps/kpi/kpe-metric.md +160 -0
  203. package/helps/kpi/kpi-category.md +160 -0
  204. package/helps/kpi/kpi-formula.md +160 -0
  205. package/helps/kpi/kpi-grade.md +160 -0
  206. package/helps/kpi/kpi-metric.md +160 -0
  207. package/helps/kpi/kpi-value.md +160 -0
  208. package/helps/kpi/kpi.md +160 -0
  209. package/helps/kpi/metric.md +160 -0
  210. package/kpi-grade.csv +41 -0
  211. package/package.json +36 -0
  212. package/server/index.ts +3 -0
  213. package/server/routes.ts +26 -0
  214. package/server/service/index.ts +43 -0
  215. package/server/service/kpi/event-subscriber.ts +17 -0
  216. package/server/service/kpi/index.ts +9 -0
  217. package/server/service/kpi/kpi-history.ts +116 -0
  218. package/server/service/kpi/kpi-mutation.ts +198 -0
  219. package/server/service/kpi/kpi-query.ts +62 -0
  220. package/server/service/kpi/kpi-type.ts +61 -0
  221. package/server/service/kpi/kpi.ts +98 -0
  222. package/server/service/kpi-category/index.ts +7 -0
  223. package/server/service/kpi-category/kpi-category-mutation.ts +137 -0
  224. package/server/service/kpi-category/kpi-category-query.ts +48 -0
  225. package/server/service/kpi-category/kpi-category-type.ts +55 -0
  226. package/server/service/kpi-category/kpi-category.ts +84 -0
  227. package/server/service/kpi-formula/event-subscriber.ts +17 -0
  228. package/server/service/kpi-formula/index.ts +9 -0
  229. package/server/service/kpi-formula/kpi-formula-history.ts +116 -0
  230. package/server/service/kpi-formula/kpi-formula-mutation.ts +137 -0
  231. package/server/service/kpi-formula/kpi-formula-query.ts +48 -0
  232. package/server/service/kpi-formula/kpi-formula-type.ts +55 -0
  233. package/server/service/kpi-formula/kpi-formula.ts +95 -0
  234. package/server/service/kpi-grade/event-subscriber.ts +17 -0
  235. package/server/service/kpi-grade/index.ts +9 -0
  236. package/server/service/kpi-grade/kpi-grade-history.ts +116 -0
  237. package/server/service/kpi-grade/kpi-grade-mutation.ts +137 -0
  238. package/server/service/kpi-grade/kpi-grade-query.ts +48 -0
  239. package/server/service/kpi-grade/kpi-grade-type.ts +55 -0
  240. package/server/service/kpi-grade/kpi-grade.ts +95 -0
  241. package/server/service/kpi-metric/event-subscriber.ts +17 -0
  242. package/server/service/kpi-metric/index.ts +9 -0
  243. package/server/service/kpi-metric/kpi-metric-history.ts +116 -0
  244. package/server/service/kpi-metric/kpi-metric-mutation.ts +198 -0
  245. package/server/service/kpi-metric/kpi-metric-query.ts +62 -0
  246. package/server/service/kpi-metric/kpi-metric-type.ts +61 -0
  247. package/server/service/kpi-metric/kpi-metric.ts +98 -0
  248. package/server/service/kpi-value/index.ts +7 -0
  249. package/server/service/kpi-value/kpi-value-mutation.ts +137 -0
  250. package/server/service/kpi-value/kpi-value-query.ts +48 -0
  251. package/server/service/kpi-value/kpi-value-type.ts +55 -0
  252. package/server/service/kpi-value/kpi-value.ts +84 -0
  253. package/server/tsconfig.json +10 -0
  254. package/things-factory.config.js +10 -0
  255. package/translations/en.json +1 -0
  256. package/translations/ja.json +1 -0
  257. package/translations/ko.json +1 -0
  258. package/translations/ms.json +1 -0
  259. package/translations/zh.json +1 -0
@@ -0,0 +1,116 @@
1
+ import { Field, ID, ObjectType } from 'type-graphql'
2
+ import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
3
+
4
+ import {
5
+ HistoryActionColumn,
6
+ HistoryActionType,
7
+ HistoryEntityInterface,
8
+ HistoryOriginalIdColumn
9
+ } from '@operato/typeorm-history'
10
+ import { Role, User } from '@things-factory/auth-base'
11
+ import { config } from '@things-factory/env'
12
+ import { Domain } from '@things-factory/shell'
13
+
14
+ import { KpiMetric, KpiMetricStatus } from './kpi-metric'
15
+
16
+ const ORMCONFIG = config.get('ormconfig', {})
17
+ const DATABASE_TYPE = ORMCONFIG.type
18
+
19
+ @Entity()
20
+ @Index(
21
+ 'ix_kpi-metric_history_0',
22
+ (kpiMetricHistory: KpiMetricHistory) => [kpiMetricHistory.originalId, kpiMetricHistory.version],
23
+ { unique: true }
24
+ )
25
+ @Index(
26
+ 'ix_kpi-metric_history_1',
27
+ (kpiMetricHistory: KpiMetricHistory) => [kpiMetricHistory.domain, kpiMetricHistory.originalId, kpiMetricHistory.version],
28
+ { unique: true }
29
+ )
30
+ @ObjectType({ description: 'History Entity of KpiMetric' })
31
+ export class KpiMetricHistory implements HistoryEntityInterface<KpiMetric> {
32
+ @PrimaryGeneratedColumn('uuid')
33
+ @Field(type => ID)
34
+ readonly id: string
35
+
36
+ @Column({ nullable: true, default: 1 })
37
+ @Field({ nullable: true })
38
+ version?: number = 1
39
+
40
+ @ManyToOne(type => Domain)
41
+ @Field({ nullable: true })
42
+ domain?: Domain
43
+
44
+ @RelationId((kpiMetric: KpiMetric) => kpiMetric.domain)
45
+ domainId?: string
46
+
47
+ @Column()
48
+ @Field()
49
+ name: string
50
+
51
+ @Column({ nullable: true })
52
+ @Field({ nullable: true })
53
+ description?: string
54
+
55
+ @Column({ nullable: true })
56
+ @Field({ nullable: true })
57
+ active?: boolean
58
+
59
+ @Column({ nullable: true })
60
+ @Field({ nullable: true })
61
+ state?: KpiMetricStatus
62
+
63
+ @Column({ nullable: true })
64
+ @Field({ nullable: true })
65
+ params?: string
66
+
67
+ @Column({ nullable: true })
68
+ @Field({ nullable: true })
69
+ createdAt?: Date
70
+
71
+ @Column({ nullable: true })
72
+ @Field({ nullable: true })
73
+ updatedAt?: Date
74
+
75
+ @Column({ nullable: true })
76
+ @Field({ nullable: true })
77
+ deletedAt?: Date
78
+
79
+ @ManyToOne(type => User, { nullable: true })
80
+ @Field(type => User, { nullable: true })
81
+ creator?: User
82
+
83
+ @RelationId((kpiMetric: KpiMetric) => kpiMetric.creator)
84
+ creatorId?: string
85
+
86
+ @ManyToOne(type => User, { nullable: true })
87
+ @Field(type => User, { nullable: true })
88
+ updater?: User
89
+
90
+ @RelationId((kpiMetric: KpiMetric) => kpiMetric.updater)
91
+ updaterId?: string
92
+
93
+ @Field(type => String, { nullable: true })
94
+ thumbnail?: string
95
+
96
+ @HistoryOriginalIdColumn()
97
+ public originalId!: string
98
+
99
+ @HistoryActionColumn({
100
+ nullable: false,
101
+ type:
102
+ DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
103
+ ? 'enum'
104
+ : DATABASE_TYPE == 'oracle'
105
+ ? 'varchar2'
106
+ : DATABASE_TYPE == 'mssql'
107
+ ? 'nvarchar'
108
+ : 'varchar',
109
+ enum:
110
+ DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
111
+ ? HistoryActionType
112
+ : undefined,
113
+ length: DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb' ? undefined: 32
114
+ })
115
+ public action!: HistoryActionType
116
+ }
@@ -0,0 +1,198 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { In } from 'typeorm'
3
+ import { getRepository } from '@things-factory/shell'
4
+
5
+ import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
6
+ import { KpiMetric } from './kpi-metric'
7
+ import { NewKpiMetric, KpiMetricPatch } from './kpi-metric-type'
8
+
9
+ @Resolver(KpiMetric)
10
+ export class KpiMetricMutation {
11
+ @Directive('@transaction')
12
+ @Mutation(returns => KpiMetric, { description: 'To create new KpiMetric' })
13
+ async createKpiMetric(@Arg('kpiMetric') kpiMetric: NewKpiMetric, @Ctx() context: ResolverContext): Promise<KpiMetric> {
14
+ const { domain, user, tx } = context.state
15
+
16
+ const result = await getRepository(KpiMetric, tx).save({
17
+ ...kpiMetric,
18
+ domain,
19
+ creator: user,
20
+ updater: user
21
+ })
22
+
23
+ if (kpiMetric.thumbnail) {
24
+ await createAttachment(
25
+ null,
26
+ {
27
+ attachment: {
28
+ file: kpiMetric.thumbnail,
29
+ refType: KpiMetric.name,
30
+ refBy: result.id
31
+ }
32
+ },
33
+ context
34
+ )
35
+ }
36
+
37
+ return result
38
+ }
39
+
40
+ @Directive('@transaction')
41
+ @Mutation(returns => KpiMetric, { description: 'To modify KpiMetric information' })
42
+ async updateKpiMetric(
43
+ @Arg('id') id: string,
44
+ @Arg('patch') patch: KpiMetricPatch,
45
+ @Ctx() context: ResolverContext
46
+ ): Promise<KpiMetric> {
47
+ const { domain, user, tx } = context.state
48
+
49
+ const repository = getRepository(KpiMetric, tx)
50
+ const kpiMetric = await repository.findOne({
51
+ where: { domain: { id: domain.id }, id }
52
+ })
53
+
54
+ const result = await repository.save({
55
+ ...kpiMetric,
56
+ ...patch,
57
+ updater: user
58
+ })
59
+
60
+ if (patch.thumbnail) {
61
+ await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
62
+ await createAttachment(
63
+ null,
64
+ {
65
+ attachment: {
66
+ file: patch.thumbnail,
67
+ refType: KpiMetric.name,
68
+ refBy: result.id
69
+ }
70
+ },
71
+ context
72
+ )
73
+ }
74
+
75
+ return result
76
+ }
77
+
78
+ @Directive('@transaction')
79
+ @Mutation(returns => [KpiMetric], { description: "To modify multiple KpiMetrics' information" })
80
+ async updateMultipleKpiMetric(
81
+ @Arg('patches', type => [KpiMetricPatch]) patches: KpiMetricPatch[],
82
+ @Ctx() context: ResolverContext
83
+ ): Promise<KpiMetric[]> {
84
+ const { domain, user, tx } = context.state
85
+
86
+ let results = []
87
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
88
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
89
+ const kpiMetricRepo = getRepository(KpiMetric, tx)
90
+
91
+ if (_createRecords.length > 0) {
92
+ for (let i = 0; i < _createRecords.length; i++) {
93
+ const newRecord = _createRecords[i]
94
+
95
+ const result = await kpiMetricRepo.save({
96
+ ...newRecord,
97
+ domain,
98
+ creator: user,
99
+ updater: user
100
+ })
101
+
102
+ if (newRecord.thumbnail) {
103
+ await createAttachment(
104
+ null,
105
+ {
106
+ attachment: {
107
+ file: newRecord.thumbnail,
108
+ refType: KpiMetric.name,
109
+ refBy: result.id
110
+ }
111
+ },
112
+ context
113
+ )
114
+ }
115
+
116
+ results.push({ ...result, cuFlag: '+' })
117
+ }
118
+ }
119
+
120
+ if (_updateRecords.length > 0) {
121
+ for (let i = 0; i < _updateRecords.length; i++) {
122
+ const updateRecord = _updateRecords[i]
123
+ const kpiMetric = await kpiMetricRepo.findOneBy({ id: updateRecord.id })
124
+
125
+ const result = await kpiMetricRepo.save({
126
+ ...kpiMetric,
127
+ ...updateRecord,
128
+ updater: user
129
+ })
130
+
131
+ if (updateRecord.thumbnail) {
132
+ await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
133
+ await createAttachment(
134
+ null,
135
+ {
136
+ attachment: {
137
+ file: updateRecord.thumbnail,
138
+ refType: KpiMetric.name,
139
+ refBy: result.id
140
+ }
141
+ },
142
+ context
143
+ )
144
+ }
145
+
146
+ results.push({ ...result, cuFlag: 'M' })
147
+ }
148
+ }
149
+
150
+ return results
151
+ }
152
+
153
+ @Directive('@transaction')
154
+ @Mutation(returns => Boolean, { description: 'To delete KpiMetric' })
155
+ async deleteKpiMetric(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
156
+ const { domain, tx } = context.state
157
+
158
+ await getRepository(KpiMetric, tx).delete({ domain: { id: domain.id }, id })
159
+ await deleteAttachmentsByRef(null, { refBys: [id] }, context)
160
+
161
+ return true
162
+ }
163
+
164
+ @Directive('@transaction')
165
+ @Mutation(returns => Boolean, { description: 'To delete multiple KpiMetrics' })
166
+ async deleteKpiMetrics(
167
+ @Arg('ids', type => [String]) ids: string[],
168
+ @Ctx() context: ResolverContext
169
+ ): Promise<boolean> {
170
+ const { domain, tx } = context.state
171
+
172
+ await getRepository(KpiMetric, tx).delete({
173
+ domain: { id: domain.id },
174
+ id: In(ids)
175
+ })
176
+
177
+ await deleteAttachmentsByRef(null, { refBys: ids }, context)
178
+
179
+ return true
180
+ }
181
+
182
+ @Directive('@transaction')
183
+ @Mutation(returns => Boolean, { description: 'To import multiple KpiMetrics' })
184
+ async importKpiMetrics(
185
+ @Arg('kpiMetrics', type => [KpiMetricPatch]) kpiMetrics: KpiMetricPatch[],
186
+ @Ctx() context: ResolverContext
187
+ ): Promise<boolean> {
188
+ const { domain, tx } = context.state
189
+
190
+ await Promise.all(
191
+ kpiMetrics.map(async (kpiMetric: KpiMetricPatch) => {
192
+ const createdKpiMetric: KpiMetric = await getRepository(KpiMetric, tx).save({ domain, ...kpiMetric })
193
+ })
194
+ )
195
+
196
+ return true
197
+ }
198
+ }
@@ -0,0 +1,62 @@
1
+ import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { Attachment } from '@things-factory/attachment-base'
3
+ import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
4
+ import { User } from '@things-factory/auth-base'
5
+ import { KpiMetric } from './kpi-metric'
6
+ import { KpiMetricList } from './kpi-metric-type'
7
+
8
+ @Resolver(KpiMetric)
9
+ export class KpiMetricQuery {
10
+ @Query(returns => KpiMetric!, { nullable: true, description: 'To fetch a KpiMetric' })
11
+ async kpiMetric(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<KpiMetric> {
12
+ const { domain } = context.state
13
+
14
+ return await getRepository(KpiMetric).findOne({
15
+ where: { domain: { id: domain.id }, id }
16
+ })
17
+ }
18
+
19
+ @Query(returns => KpiMetricList, { description: 'To fetch multiple KpiMetrics' })
20
+ async kpiMetrics(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<KpiMetricList> {
21
+ const { domain } = context.state
22
+
23
+ const queryBuilder = getQueryBuilderFromListParams({
24
+ domain,
25
+ params,
26
+ repository: await getRepository(KpiMetric),
27
+ searchables: ['name', 'description']
28
+ })
29
+
30
+ const [items, total] = await queryBuilder.getManyAndCount()
31
+
32
+ return { items, total }
33
+ }
34
+
35
+ @FieldResolver(type => String)
36
+ async thumbnail(@Root() kpiMetric: KpiMetric): Promise<string | undefined> {
37
+ const attachment: Attachment = await getRepository(Attachment).findOne({
38
+ where: {
39
+ domain: { id: kpiMetric.domainId },
40
+ refType: KpiMetric.name,
41
+ refBy: kpiMetric.id
42
+ }
43
+ })
44
+
45
+ return attachment?.fullpath
46
+ }
47
+
48
+ @FieldResolver(type => Domain)
49
+ async domain(@Root() kpiMetric: KpiMetric): Promise<Domain> {
50
+ return kpiMetric.domainId && (await getRepository(Domain).findOneBy({ id: kpiMetric.domainId }))
51
+ }
52
+
53
+ @FieldResolver(type => User)
54
+ async updater(@Root() kpiMetric: KpiMetric): Promise<User> {
55
+ return kpiMetric.updaterId && (await getRepository(User).findOneBy({ id: kpiMetric.updaterId }))
56
+ }
57
+
58
+ @FieldResolver(type => User)
59
+ async creator(@Root() kpiMetric: KpiMetric): Promise<User> {
60
+ return kpiMetric.creatorId && (await getRepository(User).findOneBy({ id: kpiMetric.creatorId }))
61
+ }
62
+ }
@@ -0,0 +1,61 @@
1
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
+ import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
3
+ import { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'
4
+
5
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
6
+
7
+ import { KpiMetric, KpiMetricStatus } from './kpi-metric'
8
+
9
+ @InputType()
10
+ export class NewKpiMetric {
11
+ @Field()
12
+ name: string
13
+
14
+ @Field({ nullable: true })
15
+ description?: string
16
+
17
+ @Field(type => KpiMetricStatus, { nullable: true })
18
+ state?: KpiMetricStatus
19
+
20
+ @Field({ nullable: true })
21
+ active?: boolean
22
+
23
+ @Field({ nullable: true })
24
+ params?: string
25
+
26
+ @Field(type => GraphQLUpload, { nullable: true })
27
+ thumbnail?: FileUpload
28
+ }
29
+
30
+ @InputType()
31
+ export class KpiMetricPatch {
32
+ @Field(type => ID, { nullable: true })
33
+ id?: string
34
+
35
+ @Field({ nullable: true })
36
+ name?: string
37
+
38
+ @Field({ nullable: true })
39
+ description?: string
40
+
41
+ @Field(type => KpiMetricStatus, { nullable: true })
42
+ state?: KpiMetricStatus
43
+
44
+ @Field({ nullable: true })
45
+ active?: boolean
46
+
47
+ @Field(type => GraphQLUpload, { nullable: true })
48
+ thumbnail?: FileUpload
49
+
50
+ @Field({ nullable: true })
51
+ cuFlag?: string
52
+ }
53
+
54
+ @ObjectType()
55
+ export class KpiMetricList {
56
+ @Field(type => [KpiMetric])
57
+ items: KpiMetric[]
58
+
59
+ @Field(type => Int)
60
+ total: number
61
+ }
@@ -0,0 +1,98 @@
1
+ import {
2
+ CreateDateColumn,
3
+ UpdateDateColumn,
4
+ DeleteDateColumn,
5
+ Entity,
6
+ Index,
7
+ Column,
8
+ RelationId,
9
+ ManyToOne,
10
+ VersionColumn,
11
+ PrimaryGeneratedColumn
12
+ } from 'typeorm'
13
+ import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
14
+
15
+ import { Domain } from '@things-factory/shell'
16
+ import { User } from '@things-factory/auth-base'
17
+
18
+ export enum KpiMetricStatus {
19
+ STATUS_A = 'STATUS_A',
20
+ STATUS_B = 'STATUS_B'
21
+ }
22
+
23
+ registerEnumType(KpiMetricStatus, {
24
+ name: 'KpiMetricStatus',
25
+ description: 'state enumeration of a kpiMetric'
26
+ })
27
+
28
+ @Entity()
29
+ @Index('ix_kpi_metric_0', (kpiMetric: KpiMetric) => [kpiMetric.domain, kpiMetric.name], {
30
+ where: '"deleted_at" IS NULL',
31
+ unique: true
32
+ })
33
+ @ObjectType({ description: 'Entity for KpiMetric' })
34
+ export class KpiMetric {
35
+ @PrimaryGeneratedColumn('uuid')
36
+ @Field(type => ID)
37
+ readonly id: string
38
+
39
+ @VersionColumn()
40
+ @Field({ nullable: true })
41
+ version?: number = 1
42
+
43
+ @ManyToOne(type => Domain)
44
+ @Field({ nullable: true })
45
+ domain?: Domain
46
+
47
+ @RelationId((kpiMetric: KpiMetric) => kpiMetric.domain)
48
+ domainId?: string
49
+
50
+ @Column()
51
+ @Field({ nullable: true })
52
+ name?: string
53
+
54
+ @Column({ nullable: true })
55
+ @Field({ nullable: true })
56
+ description?: string
57
+
58
+ @Column({ nullable: false, default: false })
59
+ @Field({ nullable: true })
60
+ active?: boolean
61
+
62
+ @Column({ nullable: true })
63
+ @Field({ nullable: true })
64
+ state?: KpiMetricStatus
65
+
66
+ @Column({ nullable: true })
67
+ @Field({ nullable: true })
68
+ params?: string
69
+
70
+ @CreateDateColumn()
71
+ @Field({ nullable: true })
72
+ createdAt?: Date
73
+
74
+ @UpdateDateColumn()
75
+ @Field({ nullable: true })
76
+ updatedAt?: Date
77
+
78
+ @DeleteDateColumn()
79
+ @Field({ nullable: true })
80
+ deletedAt?: Date
81
+
82
+ @ManyToOne(type => User, { nullable: true })
83
+ @Field(type => User, { nullable: true })
84
+ creator?: User
85
+
86
+ @RelationId((kpiMetric: KpiMetric) => kpiMetric.creator)
87
+ creatorId?: string
88
+
89
+ @ManyToOne(type => User, { nullable: true })
90
+ @Field(type => User, { nullable: true })
91
+ updater?: User
92
+
93
+ @RelationId((kpiMetric: KpiMetric) => kpiMetric.updater)
94
+ updaterId?: string
95
+
96
+ @Field(type => String, { nullable: true })
97
+ thumbnail?: string
98
+ }
@@ -0,0 +1,7 @@
1
+ import { KpiValue } from './kpi-value'
2
+ import { KpiValueQuery } from './kpi-value-query'
3
+ import { KpiValueMutation } from './kpi-value-mutation'
4
+
5
+ export const entities = [KpiValue]
6
+ export const resolvers = [KpiValueQuery, KpiValueMutation]
7
+ export const subscribers = []
@@ -0,0 +1,137 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { In } from 'typeorm'
3
+ import { getRepository } from '@things-factory/shell'
4
+
5
+ import { KpiValue } from './kpi-value'
6
+ import { NewKpiValue, KpiValuePatch } from './kpi-value-type'
7
+
8
+ @Resolver(KpiValue)
9
+ export class KpiValueMutation {
10
+ @Directive('@transaction')
11
+ @Mutation(returns => KpiValue, { description: 'To create new KpiValue' })
12
+ async createKpiValue(@Arg('kpiValue') kpiValue: NewKpiValue, @Ctx() context: ResolverContext): Promise<KpiValue> {
13
+ const { domain, user, tx } = context.state
14
+
15
+ const result = await getRepository(KpiValue, tx).save({
16
+ ...kpiValue,
17
+ domain,
18
+ creator: user,
19
+ updater: user
20
+ })
21
+
22
+ return result
23
+ }
24
+
25
+ @Directive('@transaction')
26
+ @Mutation(returns => KpiValue, { description: 'To modify KpiValue information' })
27
+ async updateKpiValue(
28
+ @Arg('id') id: string,
29
+ @Arg('patch') patch: KpiValuePatch,
30
+ @Ctx() context: ResolverContext
31
+ ): Promise<KpiValue> {
32
+ const { domain, user, tx } = context.state
33
+
34
+ const repository = getRepository(KpiValue, tx)
35
+ const kpiValue = await repository.findOne({
36
+ where: { domain: { id: domain.id }, id }
37
+ })
38
+
39
+ const result = await repository.save({
40
+ ...kpiValue,
41
+ ...patch,
42
+ updater: user
43
+ })
44
+
45
+ return result
46
+ }
47
+
48
+ @Directive('@transaction')
49
+ @Mutation(returns => [KpiValue], { description: "To modify multiple KpiValues' information" })
50
+ async updateMultipleKpiValue(
51
+ @Arg('patches', type => [KpiValuePatch]) patches: KpiValuePatch[],
52
+ @Ctx() context: ResolverContext
53
+ ): Promise<KpiValue[]> {
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 kpiValueRepo = getRepository(KpiValue, tx)
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 kpiValueRepo.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 updateRecord = _updateRecords[i]
79
+ const kpiValue = await kpiValueRepo.findOneBy({ id: updateRecord.id })
80
+
81
+ const result = await kpiValueRepo.save({
82
+ ...kpiValue,
83
+ ...updateRecord,
84
+ updater: user
85
+ })
86
+
87
+ results.push({ ...result, cuFlag: 'M' })
88
+ }
89
+ }
90
+
91
+ return results
92
+ }
93
+
94
+ @Directive('@transaction')
95
+ @Mutation(returns => Boolean, { description: 'To delete KpiValue' })
96
+ async deleteKpiValue(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
97
+ const { domain, tx } = context.state
98
+
99
+ await getRepository(KpiValue, tx).delete({ domain: { id: domain.id }, id })
100
+
101
+ return true
102
+ }
103
+
104
+ @Directive('@transaction')
105
+ @Mutation(returns => Boolean, { description: 'To delete multiple KpiValues' })
106
+ async deleteKpiValues(
107
+ @Arg('ids', type => [String]) ids: string[],
108
+ @Ctx() context: ResolverContext
109
+ ): Promise<boolean> {
110
+ const { domain, tx } = context.state
111
+
112
+ await getRepository(KpiValue, tx).delete({
113
+ domain: { id: domain.id },
114
+ id: In(ids)
115
+ })
116
+
117
+
118
+ return true
119
+ }
120
+
121
+ @Directive('@transaction')
122
+ @Mutation(returns => Boolean, { description: 'To import multiple KpiValues' })
123
+ async importKpiValues(
124
+ @Arg('kpiValues', type => [KpiValuePatch]) kpiValues: KpiValuePatch[],
125
+ @Ctx() context: ResolverContext
126
+ ): Promise<boolean> {
127
+ const { domain, tx } = context.state
128
+
129
+ await Promise.all(
130
+ kpiValues.map(async (kpiValue: KpiValuePatch) => {
131
+ const createdKpiValue: KpiValue = await getRepository(KpiValue, tx).save({ domain, ...kpiValue })
132
+ })
133
+ )
134
+
135
+ return true
136
+ }
137
+ }