@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,3 @@
1
+ export * from './service'
2
+
3
+ import './routes'
@@ -0,0 +1,26 @@
1
+ process.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {
2
+ /*
3
+ * can add global public routes to application (auth not required, tenancy not required)
4
+ *
5
+ * ex) routes.get('/path', async(context, next) => {})
6
+ * ex) routes.post('/path', async(context, next) => {})
7
+ */
8
+ })
9
+
10
+ process.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {
11
+ /*
12
+ * can add global private routes to application (auth required, tenancy not required)
13
+ */
14
+ })
15
+
16
+ process.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {
17
+ /*
18
+ * can add domain public routes to application (auth not required, tenancy required)
19
+ */
20
+ })
21
+
22
+ process.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {
23
+ /*
24
+ * can add domain private routes to application (auth required, tenancy required)
25
+ */
26
+ })
@@ -0,0 +1,43 @@
1
+ /* EXPORT ENTITY TYPES */
2
+ export * from './kpi/kpi'
3
+ export * from './kpi/kpi-type'
4
+ export * from './kpi-formula/kpi-formula'
5
+ export * from './kpi-formula/kpi-formula-type'
6
+ export * from './kpi-category/kpi-category'
7
+ export * from './kpi-category/kpi-category-type'
8
+ export * from './kpi-grade/kpi-grade'
9
+ export * from './kpi-grade/kpi-grade-type'
10
+ export * from './kpi-value/kpi-value'
11
+ export * from './kpi-value/kpi-value-type'
12
+ export * from './kpi-metric/kpi-metric'
13
+ export * from './kpi-metric/kpi-metric-type'
14
+
15
+ /* IMPORT ENTITIES AND RESOLVERS */
16
+ import { entities as KpiEntities, resolvers as KpiResolvers } from './kpi'
17
+ import { entities as KpiFormulaEntities, resolvers as KpiFormulaResolvers } from './kpi-formula'
18
+ import { entities as KpiCategoryEntities, resolvers as KpiCategoryResolvers } from './kpi-category'
19
+ import { entities as KpiGradeEntities, resolvers as KpiGradeResolvers } from './kpi-grade'
20
+ import { entities as KpiValueEntities, resolvers as KpiValueResolvers } from './kpi-value'
21
+ import { entities as KpiMetricEntities, resolvers as KpiMetricResolvers } from './kpi-metric'
22
+
23
+ export const entities = [
24
+ /* ENTITIES */
25
+ ...KpiEntities,
26
+ ...KpiFormulaEntities,
27
+ ...KpiCategoryEntities,
28
+ ...KpiGradeEntities,
29
+ ...KpiValueEntities,
30
+ ...KpiMetricEntities
31
+ ]
32
+
33
+ export const schema = {
34
+ resolverClasses: [
35
+ /* RESOLVER CLASSES */
36
+ ...KpiResolvers,
37
+ ...KpiFormulaResolvers,
38
+ ...KpiCategoryResolvers,
39
+ ...KpiGradeResolvers,
40
+ ...KpiValueResolvers,
41
+ ...KpiMetricResolvers
42
+ ]
43
+ }
@@ -0,0 +1,17 @@
1
+ import { EventSubscriber } from 'typeorm'
2
+
3
+ import { HistoryEntitySubscriber } from '@operato/typeorm-history'
4
+
5
+ import { Kpi } from './kpi'
6
+ import { KpiHistory } from './kpi-history'
7
+
8
+ @EventSubscriber()
9
+ export class KpiHistoryEntitySubscriber extends HistoryEntitySubscriber<Kpi, KpiHistory> {
10
+ public get entity() {
11
+ return Kpi
12
+ }
13
+
14
+ public get historyEntity() {
15
+ return KpiHistory
16
+ }
17
+ }
@@ -0,0 +1,9 @@
1
+ import { Kpi } from './kpi'
2
+ import { KpiHistory } from './kpi-history'
3
+ import { KpiHistoryEntitySubscriber } from './event-subscriber'
4
+ import { KpiQuery } from './kpi-query'
5
+ import { KpiMutation } from './kpi-mutation'
6
+
7
+ export const entities = [Kpi, KpiHistory]
8
+ export const resolvers = [KpiQuery, KpiMutation]
9
+ export const subscribers = [KpiHistoryEntitySubscriber]
@@ -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 { Kpi, KpiStatus } from './kpi'
15
+
16
+ const ORMCONFIG = config.get('ormconfig', {})
17
+ const DATABASE_TYPE = ORMCONFIG.type
18
+
19
+ @Entity()
20
+ @Index(
21
+ 'ix_kpi_history_0',
22
+ (kpiHistory: KpiHistory) => [kpiHistory.originalId, kpiHistory.version],
23
+ { unique: true }
24
+ )
25
+ @Index(
26
+ 'ix_kpi_history_1',
27
+ (kpiHistory: KpiHistory) => [kpiHistory.domain, kpiHistory.originalId, kpiHistory.version],
28
+ { unique: true }
29
+ )
30
+ @ObjectType({ description: 'History Entity of Kpi' })
31
+ export class KpiHistory implements HistoryEntityInterface<Kpi> {
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((kpi: Kpi) => kpi.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?: KpiStatus
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((kpi: Kpi) => kpi.creator)
84
+ creatorId?: string
85
+
86
+ @ManyToOne(type => User, { nullable: true })
87
+ @Field(type => User, { nullable: true })
88
+ updater?: User
89
+
90
+ @RelationId((kpi: Kpi) => kpi.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 { Kpi } from './kpi'
7
+ import { NewKpi, KpiPatch } from './kpi-type'
8
+
9
+ @Resolver(Kpi)
10
+ export class KpiMutation {
11
+ @Directive('@transaction')
12
+ @Mutation(returns => Kpi, { description: 'To create new Kpi' })
13
+ async createKpi(@Arg('kpi') kpi: NewKpi, @Ctx() context: ResolverContext): Promise<Kpi> {
14
+ const { domain, user, tx } = context.state
15
+
16
+ const result = await getRepository(Kpi, tx).save({
17
+ ...kpi,
18
+ domain,
19
+ creator: user,
20
+ updater: user
21
+ })
22
+
23
+ if (kpi.thumbnail) {
24
+ await createAttachment(
25
+ null,
26
+ {
27
+ attachment: {
28
+ file: kpi.thumbnail,
29
+ refType: Kpi.name,
30
+ refBy: result.id
31
+ }
32
+ },
33
+ context
34
+ )
35
+ }
36
+
37
+ return result
38
+ }
39
+
40
+ @Directive('@transaction')
41
+ @Mutation(returns => Kpi, { description: 'To modify Kpi information' })
42
+ async updateKpi(
43
+ @Arg('id') id: string,
44
+ @Arg('patch') patch: KpiPatch,
45
+ @Ctx() context: ResolverContext
46
+ ): Promise<Kpi> {
47
+ const { domain, user, tx } = context.state
48
+
49
+ const repository = getRepository(Kpi, tx)
50
+ const kpi = await repository.findOne({
51
+ where: { domain: { id: domain.id }, id }
52
+ })
53
+
54
+ const result = await repository.save({
55
+ ...kpi,
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: Kpi.name,
68
+ refBy: result.id
69
+ }
70
+ },
71
+ context
72
+ )
73
+ }
74
+
75
+ return result
76
+ }
77
+
78
+ @Directive('@transaction')
79
+ @Mutation(returns => [Kpi], { description: "To modify multiple Kpis' information" })
80
+ async updateMultipleKpi(
81
+ @Arg('patches', type => [KpiPatch]) patches: KpiPatch[],
82
+ @Ctx() context: ResolverContext
83
+ ): Promise<Kpi[]> {
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 kpiRepo = getRepository(Kpi, 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 kpiRepo.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: Kpi.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 kpi = await kpiRepo.findOneBy({ id: updateRecord.id })
124
+
125
+ const result = await kpiRepo.save({
126
+ ...kpi,
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: Kpi.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 Kpi' })
155
+ async deleteKpi(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
156
+ const { domain, tx } = context.state
157
+
158
+ await getRepository(Kpi, 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 Kpis' })
166
+ async deleteKpis(
167
+ @Arg('ids', type => [String]) ids: string[],
168
+ @Ctx() context: ResolverContext
169
+ ): Promise<boolean> {
170
+ const { domain, tx } = context.state
171
+
172
+ await getRepository(Kpi, 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 Kpis' })
184
+ async importKpis(
185
+ @Arg('kpis', type => [KpiPatch]) kpis: KpiPatch[],
186
+ @Ctx() context: ResolverContext
187
+ ): Promise<boolean> {
188
+ const { domain, tx } = context.state
189
+
190
+ await Promise.all(
191
+ kpis.map(async (kpi: KpiPatch) => {
192
+ const createdKpi: Kpi = await getRepository(Kpi, tx).save({ domain, ...kpi })
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 { Kpi } from './kpi'
6
+ import { KpiList } from './kpi-type'
7
+
8
+ @Resolver(Kpi)
9
+ export class KpiQuery {
10
+ @Query(returns => Kpi!, { nullable: true, description: 'To fetch a Kpi' })
11
+ async kpi(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Kpi> {
12
+ const { domain } = context.state
13
+
14
+ return await getRepository(Kpi).findOne({
15
+ where: { domain: { id: domain.id }, id }
16
+ })
17
+ }
18
+
19
+ @Query(returns => KpiList, { description: 'To fetch multiple Kpis' })
20
+ async kpis(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<KpiList> {
21
+ const { domain } = context.state
22
+
23
+ const queryBuilder = getQueryBuilderFromListParams({
24
+ domain,
25
+ params,
26
+ repository: await getRepository(Kpi),
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() kpi: Kpi): Promise<string | undefined> {
37
+ const attachment: Attachment = await getRepository(Attachment).findOne({
38
+ where: {
39
+ domain: { id: kpi.domainId },
40
+ refType: Kpi.name,
41
+ refBy: kpi.id
42
+ }
43
+ })
44
+
45
+ return attachment?.fullpath
46
+ }
47
+
48
+ @FieldResolver(type => Domain)
49
+ async domain(@Root() kpi: Kpi): Promise<Domain> {
50
+ return kpi.domainId && (await getRepository(Domain).findOneBy({ id: kpi.domainId }))
51
+ }
52
+
53
+ @FieldResolver(type => User)
54
+ async updater(@Root() kpi: Kpi): Promise<User> {
55
+ return kpi.updaterId && (await getRepository(User).findOneBy({ id: kpi.updaterId }))
56
+ }
57
+
58
+ @FieldResolver(type => User)
59
+ async creator(@Root() kpi: Kpi): Promise<User> {
60
+ return kpi.creatorId && (await getRepository(User).findOneBy({ id: kpi.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 { Kpi, KpiStatus } from './kpi'
8
+
9
+ @InputType()
10
+ export class NewKpi {
11
+ @Field()
12
+ name: string
13
+
14
+ @Field({ nullable: true })
15
+ description?: string
16
+
17
+ @Field(type => KpiStatus, { nullable: true })
18
+ state?: KpiStatus
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 KpiPatch {
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 => KpiStatus, { nullable: true })
42
+ state?: KpiStatus
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 KpiList {
56
+ @Field(type => [Kpi])
57
+ items: Kpi[]
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 KpiStatus {
19
+ STATUS_A = 'STATUS_A',
20
+ STATUS_B = 'STATUS_B'
21
+ }
22
+
23
+ registerEnumType(KpiStatus, {
24
+ name: 'KpiStatus',
25
+ description: 'state enumeration of a kpi'
26
+ })
27
+
28
+ @Entity()
29
+ @Index('ix_kpi_0', (kpi: Kpi) => [kpi.domain, kpi.name], {
30
+ where: '"deleted_at" IS NULL',
31
+ unique: true
32
+ })
33
+ @ObjectType({ description: 'Entity for Kpi' })
34
+ export class Kpi {
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((kpi: Kpi) => kpi.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?: KpiStatus
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((kpi: Kpi) => kpi.creator)
87
+ creatorId?: string
88
+
89
+ @ManyToOne(type => User, { nullable: true })
90
+ @Field(type => User, { nullable: true })
91
+ updater?: User
92
+
93
+ @RelationId((kpi: Kpi) => kpi.updater)
94
+ updaterId?: string
95
+
96
+ @Field(type => String, { nullable: true })
97
+ thumbnail?: string
98
+ }
@@ -0,0 +1,7 @@
1
+ import { KpiCategory } from './kpi-category'
2
+ import { KpiCategoryQuery } from './kpi-category-query'
3
+ import { KpiCategoryMutation } from './kpi-category-mutation'
4
+
5
+ export const entities = [KpiCategory]
6
+ export const resolvers = [KpiCategoryQuery, KpiCategoryMutation]
7
+ export const subscribers = []