@things-factory/kpi 1.0.0-alpha.5 → 9.0.9

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 (309) hide show
  1. package/README.md +74 -0
  2. package/client/pages/kpi/kpi-list-page.ts +97 -47
  3. package/client/pages/kpi/kpi-overview-sample.ts +260 -0
  4. package/client/pages/kpi/kpi-overview.ts +271 -0
  5. package/client/pages/kpi-category/kpi-category-list-page.ts +39 -50
  6. package/client/pages/kpi-dashboard/kpi-alert-panel.ts +114 -0
  7. package/client/pages/kpi-dashboard/kpi-dashboard.ts +285 -0
  8. package/client/pages/kpi-dashboard/kpi-grade-visualization.ts +75 -0
  9. package/client/pages/kpi-dashboard/kpi-history-viewer.ts +58 -0
  10. package/client/pages/kpi-dashboard/kpi-list-summary.ts +100 -0
  11. package/client/pages/kpi-dashboard/kpi-performance-summary.ts +124 -0
  12. package/client/pages/kpi-dashboard/kpi-value-entry.ts +78 -0
  13. package/client/pages/kpi-grade/kpi-grade-list-page.ts +58 -68
  14. package/client/pages/kpi-history/kpi-history-list-page.ts +146 -0
  15. package/client/pages/kpi-metric/kpi-metric-list-page.ts +67 -63
  16. package/client/pages/kpi-value/kpi-value-list-page.ts +73 -72
  17. package/client/pages/kpi-value/kpi-value-manual-entry-form.ts +168 -0
  18. package/client/pages/kpi-value/kpi-value-manual-entry-page.ts +173 -0
  19. package/client/route.ts +35 -0
  20. package/dist-client/pages/kpi/kpi-importer.js +16 -17
  21. package/dist-client/pages/kpi/kpi-importer.js.map +1 -1
  22. package/dist-client/pages/kpi/kpi-list-page.js +128 -68
  23. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -1
  24. package/dist-client/pages/kpi/kpi-overview-sample.d.ts +36 -0
  25. package/dist-client/pages/kpi/kpi-overview-sample.js +264 -0
  26. package/dist-client/pages/kpi/kpi-overview-sample.js.map +1 -0
  27. package/dist-client/pages/kpi/kpi-overview.d.ts +14 -0
  28. package/dist-client/pages/kpi/kpi-overview.js +290 -0
  29. package/dist-client/pages/kpi/kpi-overview.js.map +1 -0
  30. package/dist-client/pages/kpi-category/kpi-category-importer.js +16 -17
  31. package/dist-client/pages/kpi-category/kpi-category-importer.js.map +1 -1
  32. package/dist-client/pages/kpi-category/kpi-category-list-page.js +70 -71
  33. package/dist-client/pages/kpi-category/kpi-category-list-page.js.map +1 -1
  34. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +18 -0
  35. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +128 -0
  36. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +1 -0
  37. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +24 -0
  38. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +305 -0
  39. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -0
  40. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +12 -0
  41. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +82 -0
  42. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +1 -0
  43. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +11 -0
  44. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +65 -0
  45. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +1 -0
  46. package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +13 -0
  47. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +115 -0
  48. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +1 -0
  49. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +15 -0
  50. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +139 -0
  51. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -0
  52. package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +7 -0
  53. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +86 -0
  54. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +1 -0
  55. package/dist-client/pages/kpi-grade/kpi-grade-importer.js +16 -17
  56. package/dist-client/pages/kpi-grade/kpi-grade-importer.js.map +1 -1
  57. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js +89 -89
  58. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js.map +1 -1
  59. package/dist-client/pages/kpi-history/kpi-history-list-page.d.ts +16 -0
  60. package/dist-client/pages/kpi-history/kpi-history-list-page.js +155 -0
  61. package/dist-client/pages/kpi-history/kpi-history-list-page.js.map +1 -0
  62. package/dist-client/pages/kpi-metric/kpi-metric-importer.js +16 -17
  63. package/dist-client/pages/kpi-metric/kpi-metric-importer.js.map +1 -1
  64. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +98 -84
  65. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +1 -1
  66. package/dist-client/pages/kpi-value/kpi-value-importer.js +16 -17
  67. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -1
  68. package/dist-client/pages/kpi-value/kpi-value-list-page.js +104 -93
  69. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -1
  70. package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.d.ts +14 -0
  71. package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js +201 -0
  72. package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js.map +1 -0
  73. package/dist-client/pages/kpi-value/kpi-value-manual-entry-page.d.ts +41 -0
  74. package/dist-client/pages/kpi-value/kpi-value-manual-entry-page.js +180 -0
  75. package/dist-client/pages/kpi-value/kpi-value-manual-entry-page.js.map +1 -0
  76. package/dist-client/route.d.ts +1 -1
  77. package/dist-client/route.js +27 -0
  78. package/dist-client/route.js.map +1 -1
  79. package/dist-client/tsconfig.tsbuildinfo +1 -1
  80. package/dist-server/index.d.ts +2 -1
  81. package/dist-server/index.js +2 -1
  82. package/dist-server/index.js.map +1 -1
  83. package/dist-server/migrations/1752188906708-SeedKpiCategory.d.ts +5 -0
  84. package/dist-server/migrations/1752188906708-SeedKpiCategory.js +56 -0
  85. package/dist-server/migrations/1752188906708-SeedKpiCategory.js.map +1 -0
  86. package/dist-server/migrations/1752190849681-SeedKpi.d.ts +5 -0
  87. package/dist-server/migrations/1752190849681-SeedKpi.js +107 -0
  88. package/dist-server/migrations/1752190849681-SeedKpi.js.map +1 -0
  89. package/dist-server/migrations/1752191090459-SeedKpiGrade.d.ts +5 -0
  90. package/dist-server/migrations/1752191090459-SeedKpiGrade.js +271 -0
  91. package/dist-server/migrations/1752191090459-SeedKpiGrade.js.map +1 -0
  92. package/dist-server/migrations/index.d.ts +1 -0
  93. package/dist-server/migrations/index.js +12 -0
  94. package/dist-server/migrations/index.js.map +1 -0
  95. package/dist-server/routes.d.ts +1 -0
  96. package/dist-server/routes.js +48 -0
  97. package/dist-server/routes.js.map +1 -1
  98. package/dist-server/service/index.d.ts +3 -4
  99. package/dist-server/service/index.js +4 -6
  100. package/dist-server/service/index.js.map +1 -1
  101. package/dist-server/service/kpi/aggregate-kpi.d.ts +8 -0
  102. package/dist-server/service/kpi/aggregate-kpi.js +88 -0
  103. package/dist-server/service/kpi/aggregate-kpi.js.map +1 -0
  104. package/dist-server/service/kpi/event-subscriber.d.ts +2 -0
  105. package/dist-server/service/kpi/event-subscriber.js +10 -0
  106. package/dist-server/service/kpi/event-subscriber.js.map +1 -1
  107. package/dist-server/service/kpi/index.d.ts +2 -1
  108. package/dist-server/service/kpi/kpi-formula.service.d.ts +24 -0
  109. package/dist-server/service/kpi/kpi-formula.service.js +64 -0
  110. package/dist-server/service/kpi/kpi-formula.service.js.map +1 -0
  111. package/dist-server/service/kpi/kpi-history.d.ts +6 -2
  112. package/dist-server/service/kpi/kpi-history.js +29 -11
  113. package/dist-server/service/kpi/kpi-history.js.map +1 -1
  114. package/dist-server/service/kpi/kpi-mutation.d.ts +2 -0
  115. package/dist-server/service/kpi/kpi-mutation.js +215 -10
  116. package/dist-server/service/kpi/kpi-mutation.js.map +1 -1
  117. package/dist-server/service/kpi/kpi-query.d.ts +10 -0
  118. package/dist-server/service/kpi/kpi-query.js +87 -3
  119. package/dist-server/service/kpi/kpi-query.js.map +1 -1
  120. package/dist-server/service/kpi/kpi-type.d.ts +14 -3
  121. package/dist-server/service/kpi/kpi-type.js +81 -18
  122. package/dist-server/service/kpi/kpi-type.js.map +1 -1
  123. package/dist-server/service/kpi/kpi.d.ts +14 -3
  124. package/dist-server/service/kpi/kpi.js +96 -19
  125. package/dist-server/service/kpi/kpi.js.map +1 -1
  126. package/dist-server/service/kpi-alert/index.d.ts +2 -0
  127. package/dist-server/service/kpi-alert/index.js +6 -0
  128. package/dist-server/service/kpi-alert/index.js.map +1 -0
  129. package/dist-server/service/kpi-alert/kpi-alert-query.d.ts +4 -0
  130. package/dist-server/service/kpi-alert/kpi-alert-query.js +71 -0
  131. package/dist-server/service/kpi-alert/kpi-alert-query.js.map +1 -0
  132. package/dist-server/service/kpi-alert/kpi-alert-type.d.ts +8 -0
  133. package/dist-server/service/kpi-alert/kpi-alert-type.js +33 -0
  134. package/dist-server/service/kpi-alert/kpi-alert-type.js.map +1 -0
  135. package/dist-server/service/kpi-category/kpi-category-mutation.d.ts +1 -1
  136. package/dist-server/service/kpi-category/kpi-category-mutation.js +36 -10
  137. package/dist-server/service/kpi-category/kpi-category-mutation.js.map +1 -1
  138. package/dist-server/service/kpi-category/kpi-category-query.d.ts +2 -0
  139. package/dist-server/service/kpi-category/kpi-category-query.js +18 -2
  140. package/dist-server/service/kpi-category/kpi-category-query.js.map +1 -1
  141. package/dist-server/service/kpi-category/kpi-category-type.d.ts +3 -5
  142. package/dist-server/service/kpi-category/kpi-category-type.js +16 -20
  143. package/dist-server/service/kpi-category/kpi-category-type.js.map +1 -1
  144. package/dist-server/service/kpi-category/kpi-category.d.ts +7 -9
  145. package/dist-server/service/kpi-category/kpi-category.js +40 -38
  146. package/dist-server/service/kpi-category/kpi-category.js.map +1 -1
  147. package/dist-server/service/kpi-grade/index.d.ts +1 -2
  148. package/dist-server/service/kpi-grade/index.js +2 -4
  149. package/dist-server/service/kpi-grade/index.js.map +1 -1
  150. package/dist-server/service/kpi-grade/kpi-grade-mutation.d.ts +1 -1
  151. package/dist-server/service/kpi-grade/kpi-grade-mutation.js +33 -10
  152. package/dist-server/service/kpi-grade/kpi-grade-mutation.js.map +1 -1
  153. package/dist-server/service/kpi-grade/kpi-grade-query.js +2 -2
  154. package/dist-server/service/kpi-grade/kpi-grade-query.js.map +1 -1
  155. package/dist-server/service/kpi-grade/kpi-grade-type.d.ts +13 -4
  156. package/dist-server/service/kpi-grade/kpi-grade-type.js +54 -18
  157. package/dist-server/service/kpi-grade/kpi-grade-type.js.map +1 -1
  158. package/dist-server/service/kpi-grade/kpi-grade.d.ts +8 -8
  159. package/dist-server/service/kpi-grade/kpi-grade.js +48 -40
  160. package/dist-server/service/kpi-grade/kpi-grade.js.map +1 -1
  161. package/dist-server/service/kpi-metric/aggregate-kpi-metric.d.ts +8 -0
  162. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js +134 -0
  163. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js.map +1 -0
  164. package/dist-server/service/kpi-metric/index.d.ts +1 -2
  165. package/dist-server/service/kpi-metric/index.js +2 -4
  166. package/dist-server/service/kpi-metric/index.js.map +1 -1
  167. package/dist-server/service/kpi-metric/kpi-metric-mutation.d.ts +1 -1
  168. package/dist-server/service/kpi-metric/kpi-metric-mutation.js +139 -13
  169. package/dist-server/service/kpi-metric/kpi-metric-mutation.js.map +1 -1
  170. package/dist-server/service/kpi-metric/kpi-metric-query.js +3 -3
  171. package/dist-server/service/kpi-metric/kpi-metric-query.js.map +1 -1
  172. package/dist-server/service/kpi-metric/kpi-metric-type.d.ts +17 -4
  173. package/dist-server/service/kpi-metric/kpi-metric-type.js +69 -11
  174. package/dist-server/service/kpi-metric/kpi-metric-type.js.map +1 -1
  175. package/dist-server/service/kpi-metric/kpi-metric.d.ts +11 -8
  176. package/dist-server/service/kpi-metric/kpi-metric.js +62 -37
  177. package/dist-server/service/kpi-metric/kpi-metric.js.map +1 -1
  178. package/dist-server/service/kpi-value/kpi-value-mutation.js +66 -11
  179. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -1
  180. package/dist-server/service/kpi-value/kpi-value-query.d.ts +2 -0
  181. package/dist-server/service/kpi-value/kpi-value-query.js +15 -2
  182. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -1
  183. package/dist-server/service/kpi-value/kpi-value-type.d.ts +19 -10
  184. package/dist-server/service/kpi-value/kpi-value-type.js +87 -24
  185. package/dist-server/service/kpi-value/kpi-value-type.js.map +1 -1
  186. package/dist-server/service/kpi-value/kpi-value.d.ts +15 -9
  187. package/dist-server/service/kpi-value/kpi-value.js +86 -32
  188. package/dist-server/service/kpi-value/kpi-value.js.map +1 -1
  189. package/dist-server/tsconfig.tsbuildinfo +1 -1
  190. package/implement-plan/01-entity-type-resolver.md +57 -0
  191. package/implement-plan/02-dataset-integration.md +35 -0
  192. package/implement-plan/03-kpivalue-automation.md +34 -0
  193. package/implement-plan/04-version-history.md +33 -0
  194. package/implement-plan/05-grade-visualization.md +33 -0
  195. package/implement-plan/06-graphql-frontend.md +30 -0
  196. package/implement-plan/07-test-docs.md +35 -0
  197. package/implement-plan/TODO.md +41 -0
  198. package/package.json +18 -6
  199. package/server/index.ts +2 -1
  200. package/server/migrations/1752188906708-SeedKpiCategory.ts +61 -0
  201. package/server/migrations/1752190849681-SeedKpi.ts +112 -0
  202. package/server/migrations/1752191090459-SeedKpiGrade.ts +270 -0
  203. package/server/migrations/index.ts +9 -0
  204. package/server/routes.ts +55 -0
  205. package/server/service/index.ts +4 -6
  206. package/server/service/kpi/aggregate-kpi.ts +82 -0
  207. package/server/service/kpi/event-subscriber.ts +12 -0
  208. package/server/service/kpi/kpi-formula.service.ts +63 -0
  209. package/server/service/kpi/kpi-history.ts +29 -21
  210. package/server/service/kpi/kpi-mutation.ts +194 -12
  211. package/server/service/kpi/kpi-query.ts +57 -2
  212. package/server/service/kpi/kpi-type.ts +72 -19
  213. package/server/service/kpi/kpi.ts +96 -20
  214. package/server/service/kpi-alert/index.ts +3 -0
  215. package/server/service/kpi-alert/kpi-alert-query.ts +59 -0
  216. package/server/service/kpi-alert/kpi-alert-type.ts +20 -0
  217. package/server/service/kpi-category/kpi-category-mutation.ts +17 -4
  218. package/server/service/kpi-category/kpi-category-query.ts +20 -3
  219. package/server/service/kpi-category/kpi-category-type.ts +17 -19
  220. package/server/service/kpi-category/kpi-category.ts +39 -37
  221. package/server/service/kpi-grade/index.ts +2 -4
  222. package/server/service/kpi-grade/kpi-grade-mutation.ts +13 -4
  223. package/server/service/kpi-grade/kpi-grade-query.ts +5 -2
  224. package/server/service/kpi-grade/kpi-grade-type.ts +46 -19
  225. package/server/service/kpi-grade/kpi-grade.ts +44 -38
  226. package/server/service/kpi-metric/aggregate-kpi-metric.ts +128 -0
  227. package/server/service/kpi-metric/index.ts +2 -4
  228. package/server/service/kpi-metric/kpi-metric-mutation.ts +123 -7
  229. package/server/service/kpi-metric/kpi-metric-query.ts +9 -3
  230. package/server/service/kpi-metric/kpi-metric-type.ts +56 -13
  231. package/server/service/kpi-metric/kpi-metric.ts +55 -35
  232. package/server/service/kpi-value/kpi-value-mutation.ts +52 -14
  233. package/server/service/kpi-value/kpi-value-query.ts +12 -2
  234. package/server/service/kpi-value/kpi-value-type.ts +80 -25
  235. package/server/service/kpi-value/kpi-value.ts +81 -29
  236. package/things-factory.config.js +12 -4
  237. package/translations/en.json +12 -1
  238. package/translations/ja.json +12 -1
  239. package/translations/ko.json +12 -1
  240. package/translations/ms.json +12 -1
  241. package/translations/zh.json +12 -1
  242. package/client/pages/kpe-metric/kpe-metric-importer.ts +0 -90
  243. package/client/pages/kpe-metric/kpe-metric-list-page.ts +0 -398
  244. package/client/pages/kpi-formula/kpi-formula-importer.ts +0 -90
  245. package/client/pages/kpi-formula/kpi-formula-list-page.ts +0 -398
  246. package/client/pages/metric/metric-importer.ts +0 -90
  247. package/client/pages/metric/metric-list-page.ts +0 -398
  248. package/dist-client/pages/kpe-metric/kpe-metric-importer.d.ts +0 -23
  249. package/dist-client/pages/kpe-metric/kpe-metric-importer.js +0 -93
  250. package/dist-client/pages/kpe-metric/kpe-metric-importer.js.map +0 -1
  251. package/dist-client/pages/kpe-metric/kpe-metric-list-page.d.ts +0 -66
  252. package/dist-client/pages/kpe-metric/kpe-metric-list-page.js +0 -370
  253. package/dist-client/pages/kpe-metric/kpe-metric-list-page.js.map +0 -1
  254. package/dist-client/pages/kpi-formula/kpi-formula-importer.d.ts +0 -23
  255. package/dist-client/pages/kpi-formula/kpi-formula-importer.js +0 -93
  256. package/dist-client/pages/kpi-formula/kpi-formula-importer.js.map +0 -1
  257. package/dist-client/pages/kpi-formula/kpi-formula-list-page.d.ts +0 -66
  258. package/dist-client/pages/kpi-formula/kpi-formula-list-page.js +0 -370
  259. package/dist-client/pages/kpi-formula/kpi-formula-list-page.js.map +0 -1
  260. package/dist-client/pages/metric/metric-importer.d.ts +0 -23
  261. package/dist-client/pages/metric/metric-importer.js +0 -93
  262. package/dist-client/pages/metric/metric-importer.js.map +0 -1
  263. package/dist-client/pages/metric/metric-list-page.d.ts +0 -66
  264. package/dist-client/pages/metric/metric-list-page.js +0 -370
  265. package/dist-client/pages/metric/metric-list-page.js.map +0 -1
  266. package/dist-server/service/kpi-formula/event-subscriber.d.ts +0 -7
  267. package/dist-server/service/kpi-formula/event-subscriber.js +0 -21
  268. package/dist-server/service/kpi-formula/event-subscriber.js.map +0 -1
  269. package/dist-server/service/kpi-formula/index.d.ts +0 -7
  270. package/dist-server/service/kpi-formula/index.js +0 -12
  271. package/dist-server/service/kpi-formula/index.js.map +0 -1
  272. package/dist-server/service/kpi-formula/kpi-formula-history.d.ts +0 -25
  273. package/dist-server/service/kpi-formula/kpi-formula-history.js +0 -128
  274. package/dist-server/service/kpi-formula/kpi-formula-history.js.map +0 -1
  275. package/dist-server/service/kpi-formula/kpi-formula-mutation.d.ts +0 -10
  276. package/dist-server/service/kpi-formula/kpi-formula-mutation.js +0 -128
  277. package/dist-server/service/kpi-formula/kpi-formula-mutation.js.map +0 -1
  278. package/dist-server/service/kpi-formula/kpi-formula-query.d.ts +0 -11
  279. package/dist-server/service/kpi-formula/kpi-formula-query.js +0 -79
  280. package/dist-server/service/kpi-formula/kpi-formula-query.js.map +0 -1
  281. package/dist-server/service/kpi-formula/kpi-formula-type.d.ts +0 -20
  282. package/dist-server/service/kpi-formula/kpi-formula-type.js +0 -77
  283. package/dist-server/service/kpi-formula/kpi-formula-type.js.map +0 -1
  284. package/dist-server/service/kpi-formula/kpi-formula.d.ts +0 -24
  285. package/dist-server/service/kpi-formula/kpi-formula.js +0 -109
  286. package/dist-server/service/kpi-formula/kpi-formula.js.map +0 -1
  287. package/dist-server/service/kpi-grade/event-subscriber.d.ts +0 -7
  288. package/dist-server/service/kpi-grade/event-subscriber.js +0 -21
  289. package/dist-server/service/kpi-grade/event-subscriber.js.map +0 -1
  290. package/dist-server/service/kpi-grade/kpi-grade-history.d.ts +0 -25
  291. package/dist-server/service/kpi-grade/kpi-grade-history.js +0 -128
  292. package/dist-server/service/kpi-grade/kpi-grade-history.js.map +0 -1
  293. package/dist-server/service/kpi-metric/event-subscriber.d.ts +0 -7
  294. package/dist-server/service/kpi-metric/event-subscriber.js +0 -21
  295. package/dist-server/service/kpi-metric/event-subscriber.js.map +0 -1
  296. package/dist-server/service/kpi-metric/kpi-metric-history.d.ts +0 -25
  297. package/dist-server/service/kpi-metric/kpi-metric-history.js +0 -128
  298. package/dist-server/service/kpi-metric/kpi-metric-history.js.map +0 -1
  299. package/server/service/kpi-formula/event-subscriber.ts +0 -17
  300. package/server/service/kpi-formula/index.ts +0 -9
  301. package/server/service/kpi-formula/kpi-formula-history.ts +0 -116
  302. package/server/service/kpi-formula/kpi-formula-mutation.ts +0 -137
  303. package/server/service/kpi-formula/kpi-formula-query.ts +0 -48
  304. package/server/service/kpi-formula/kpi-formula-type.ts +0 -55
  305. package/server/service/kpi-formula/kpi-formula.ts +0 -95
  306. package/server/service/kpi-grade/event-subscriber.ts +0 -17
  307. package/server/service/kpi-grade/kpi-grade-history.ts +0 -116
  308. package/server/service/kpi-metric/event-subscriber.ts +0 -17
  309. package/server/service/kpi-metric/kpi-metric-history.ts +0 -116
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aggregateKpiMetricValue = aggregateKpiMetricValue;
4
+ const shell_1 = require("@things-factory/shell");
5
+ const dataset_1 = require("@things-factory/dataset");
6
+ const finalize_data_collection_1 = require("@things-factory/dataset/dist-server/controllers/finalize-data-collection");
7
+ const kpi_metric_1 = require("./kpi-metric");
8
+ const kpi_value_1 = require("../kpi-value/kpi-value");
9
+ const kpi_1 = require("../kpi/kpi");
10
+ const kpi_formula_service_1 = require("../kpi/kpi-formula.service");
11
+ /**
12
+ * KPI-Metric 집계/자동화 서비스 함수 (formula 지원, KPI Value 저장)
13
+ * @param metricId KPI-Metric ID
14
+ * @param domainId 도메인 ID
15
+ * @param context ResolverContext (state에 domain, user, tx 등 포함)
16
+ * @returns 저장된 KPI Value 배열
17
+ */
18
+ async function aggregateKpiMetricValue(metricId, domainId, context) {
19
+ const tx = context.state?.tx || (0, shell_1.getRepository)(kpi_metric_1.KpiMetric).manager;
20
+ // 1. metric 정보 조회
21
+ const metric = await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric).findOne({
22
+ where: { id: metricId, domain: { id: domainId } }
23
+ });
24
+ if (!metric)
25
+ throw new Error('Metric 정보 없음');
26
+ if (!metric.active)
27
+ throw new Error('비활성화된 Metric');
28
+ // 2. formula가 있으면 산식 계산, 없으면 dataset 집계
29
+ let values = [];
30
+ if (metric.formula) {
31
+ // formula 파싱 및 metric code별 값 계산
32
+ const formulaService = new kpi_formula_service_1.KpiFormulaService();
33
+ const metricCodes = formulaService.extractMetricCodes(metric.formula);
34
+ // code별 값 집계 (동일 기간/그룹 기준)
35
+ const codeValueMap = {};
36
+ for (const code of metricCodes) {
37
+ const subMetric = await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric).findOne({ where: { name: code, domain: { id: domainId } } });
38
+ if (!subMetric)
39
+ throw new Error(`Formula metric '${code}' not found`);
40
+ codeValueMap[code] = await aggregateKpiMetricValue(subMetric.id, domainId, context);
41
+ }
42
+ // group/date/period별로 값 매핑
43
+ // (여기서는 가장 최근 기간 기준, group key 조합으로 매핑)
44
+ const groupKey = v => [v.date, v.period, v.group?.key01, v.group?.key02, v.group?.key03, v.group?.key04, v.group?.key05].join('|');
45
+ const groupMap = {};
46
+ for (const code of metricCodes) {
47
+ for (const v of codeValueMap[code]) {
48
+ const key = groupKey(v);
49
+ groupMap[key] = groupMap[key] || { ...v, _values: {} };
50
+ groupMap[key]._values[code] = v.value;
51
+ }
52
+ }
53
+ // formula 계산 (js eval, 보안상 제한적 사용)
54
+ for (const key in groupMap) {
55
+ const ctx = groupMap[key]._values;
56
+ let value = null;
57
+ try {
58
+ value = Function(...Object.keys(ctx), `return (${metric.formula})`)(...Object.values(ctx));
59
+ }
60
+ catch (e) {
61
+ value = null;
62
+ }
63
+ values.push({ ...groupMap[key], value });
64
+ }
65
+ }
66
+ else {
67
+ // 3. dataset 집계/마감 실행 (최신 기간 기준)
68
+ if (!metric.dataSetId || !metric.fieldName)
69
+ throw new Error('Metric 매핑 정보 누락');
70
+ await (0, finalize_data_collection_1.finalizeLatestDataCollection)(metric.dataSetId, context);
71
+ // 4. 집계 결과(summary)에서 metric.fieldName 값 추출
72
+ const summaries = await (0, shell_1.getRepository)(dataset_1.DataSummary).find({
73
+ where: { dataSet: { id: metric.dataSetId }, domain: { id: domainId } },
74
+ order: { date: 'DESC', period: 'DESC' }
75
+ });
76
+ values = summaries
77
+ .map(summary => {
78
+ if (summary.summary && metric.fieldName in summary.summary) {
79
+ return {
80
+ date: summary.date,
81
+ period: summary.period,
82
+ value: summary.summary[metric.fieldName],
83
+ group: {
84
+ key01: summary.key01,
85
+ key02: summary.key02,
86
+ key03: summary.key03,
87
+ key04: summary.key04,
88
+ key05: summary.key05
89
+ }
90
+ };
91
+ }
92
+ return null;
93
+ })
94
+ .filter(Boolean);
95
+ }
96
+ // 5. KPI Value로 저장 (metric 단위, KPI 단위 formula는 후속)
97
+ // metric이 속한 KPI 정보 조회 (여기서는 metric.name == kpi.name인 KPI를 임시로 매핑, 실제 연동 구조에 맞게 보완 필요)
98
+ const kpi = await (0, shell_1.getRepository)(kpi_1.Kpi).findOne({ where: { name: metric.name, domain: { id: domainId } } });
99
+ if (!kpi)
100
+ throw new Error('KPI 정보 없음 (metric.name과 동일한 KPI name 기준, 실제 연동 구조에 맞게 보완 필요)');
101
+ // KPI Value version, valueDate, groupId, groupType 등 매핑
102
+ const savedValues = [];
103
+ for (const v of values) {
104
+ const valueDate = v.date;
105
+ const groupId = v.group?.key01;
106
+ const groupType = v.group?.key02;
107
+ const version = kpi.version || 1;
108
+ const value = v.value;
109
+ if (value == null || isNaN(value))
110
+ continue;
111
+ // upsert(동일 KPI, valueDate, groupId, groupType, version) 기준으로 저장
112
+ const repo = (0, shell_1.getRepository)(kpi_value_1.KpiValue, context.state?.tx);
113
+ const existing = await repo.findOne({
114
+ where: { kpi: { id: kpi.id }, valueDate, groupId, groupType, version, domain: { id: domainId } }
115
+ });
116
+ let entity = existing || repo.create();
117
+ entity.kpi = kpi;
118
+ entity.kpiId = kpi.id;
119
+ entity.version = version;
120
+ entity.valueDate = valueDate;
121
+ entity.value = value;
122
+ entity.groupId = groupId;
123
+ entity.groupType = groupType;
124
+ entity.inputType = kpi_value_1.KpiValueInputType.AUTO;
125
+ entity.source = 'AUTO';
126
+ entity.domain = kpi.domain;
127
+ entity.creator = context.state?.user;
128
+ entity.updater = context.state?.user;
129
+ entity = await repo.save(entity);
130
+ savedValues.push(entity);
131
+ }
132
+ return savedValues;
133
+ }
134
+ //# sourceMappingURL=aggregate-kpi-metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate-kpi-metric.js","sourceRoot":"","sources":["../../../server/service/kpi-metric/aggregate-kpi-metric.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository } from '@things-factory/shell'\nimport { DataSummary } from '@things-factory/dataset'\nimport { finalizeLatestDataCollection } from '@things-factory/dataset/dist-server/controllers/finalize-data-collection'\nimport { KpiMetric } from './kpi-metric'\nimport { KpiValue, KpiValueInputType } from '../kpi-value/kpi-value'\nimport { Kpi } from '../kpi/kpi'\nimport { KpiFormulaService } from '../kpi/kpi-formula.service'\n\n/**\n * KPI-Metric 집계/자동화 서비스 함수 (formula 지원, KPI Value 저장)\n * @param metricId KPI-Metric ID\n * @param domainId 도메인 ID\n * @param context ResolverContext (state에 domain, user, tx 등 포함)\n * @returns 저장된 KPI Value 배열\n */\nexport async function aggregateKpiMetricValue(metricId: string, domainId: string, context: ResolverContext) {\n const tx = context.state?.tx || getRepository(KpiMetric).manager\n\n // 1. metric 정보 조회\n const metric = await getRepository(KpiMetric).findOne({\n where: { id: metricId, domain: { id: domainId } }\n })\n if (!metric) throw new Error('Metric 정보 없음')\n if (!metric.active) throw new Error('비활성화된 Metric')\n\n // 2. formula가 있으면 산식 계산, 없으면 dataset 집계\n let values: any[] = []\n if (metric.formula) {\n // formula 파싱 및 metric code별 값 계산\n const formulaService = new KpiFormulaService()\n const metricCodes = formulaService.extractMetricCodes(metric.formula)\n // code별 값 집계 (동일 기간/그룹 기준)\n const codeValueMap: Record<string, any[]> = {}\n for (const code of metricCodes) {\n const subMetric = await getRepository(KpiMetric).findOne({ where: { name: code, domain: { id: domainId } } })\n if (!subMetric) throw new Error(`Formula metric '${code}' not found`)\n codeValueMap[code] = await aggregateKpiMetricValue(subMetric.id, domainId, context)\n }\n // group/date/period별로 값 매핑\n // (여기서는 가장 최근 기간 기준, group key 조합으로 매핑)\n const groupKey = v =>\n [v.date, v.period, v.group?.key01, v.group?.key02, v.group?.key03, v.group?.key04, v.group?.key05].join('|')\n const groupMap: Record<string, any> = {}\n for (const code of metricCodes) {\n for (const v of codeValueMap[code]) {\n const key = groupKey(v)\n groupMap[key] = groupMap[key] || { ...v, _values: {} }\n groupMap[key]._values[code] = v.value\n }\n }\n // formula 계산 (js eval, 보안상 제한적 사용)\n for (const key in groupMap) {\n const ctx = groupMap[key]._values\n let value = null\n try {\n value = Function(...Object.keys(ctx), `return (${metric.formula})`)(...Object.values(ctx))\n } catch (e) {\n value = null\n }\n values.push({ ...groupMap[key], value })\n }\n } else {\n // 3. dataset 집계/마감 실행 (최신 기간 기준)\n if (!metric.dataSetId || !metric.fieldName) throw new Error('Metric 매핑 정보 누락')\n await finalizeLatestDataCollection(metric.dataSetId, context)\n // 4. 집계 결과(summary)에서 metric.fieldName 값 추출\n const summaries = await getRepository(DataSummary).find({\n where: { dataSet: { id: metric.dataSetId }, domain: { id: domainId } },\n order: { date: 'DESC', period: 'DESC' }\n })\n values = summaries\n .map(summary => {\n if (summary.summary && metric.fieldName in summary.summary) {\n return {\n date: summary.date,\n period: summary.period,\n value: summary.summary[metric.fieldName],\n group: {\n key01: summary.key01,\n key02: summary.key02,\n key03: summary.key03,\n key04: summary.key04,\n key05: summary.key05\n }\n }\n }\n return null\n })\n .filter(Boolean)\n }\n\n // 5. KPI Value로 저장 (metric 단위, KPI 단위 formula는 후속)\n // metric이 속한 KPI 정보 조회 (여기서는 metric.name == kpi.name인 KPI를 임시로 매핑, 실제 연동 구조에 맞게 보완 필요)\n const kpi = await getRepository(Kpi).findOne({ where: { name: metric.name, domain: { id: domainId } } })\n if (!kpi) throw new Error('KPI 정보 없음 (metric.name과 동일한 KPI name 기준, 실제 연동 구조에 맞게 보완 필요)')\n\n // KPI Value version, valueDate, groupId, groupType 등 매핑\n const savedValues = []\n for (const v of values) {\n const valueDate = v.date\n const groupId = v.group?.key01\n const groupType = v.group?.key02\n const version = kpi.version || 1\n const value = v.value\n if (value == null || isNaN(value)) continue\n // upsert(동일 KPI, valueDate, groupId, groupType, version) 기준으로 저장\n const repo = getRepository(KpiValue, context.state?.tx)\n const existing = await repo.findOne({\n where: { kpi: { id: kpi.id }, valueDate, groupId, groupType, version, domain: { id: domainId } }\n })\n let entity = existing || repo.create()\n entity.kpi = kpi\n entity.kpiId = kpi.id\n entity.version = version\n entity.valueDate = valueDate\n entity.value = value\n entity.groupId = groupId\n entity.groupType = groupType\n entity.inputType = KpiValueInputType.AUTO\n entity.source = 'AUTO'\n entity.domain = kpi.domain\n entity.creator = context.state?.user\n entity.updater = context.state?.user\n entity = await repo.save(entity)\n savedValues.push(entity)\n }\n return savedValues\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  import { KpiMetric } from './kpi-metric';
2
- import { KpiMetricHistoryEntitySubscriber } from './event-subscriber';
3
2
  import { KpiMetricQuery } from './kpi-metric-query';
4
3
  import { KpiMetricMutation } from './kpi-metric-mutation';
5
4
  export declare const entities: (typeof KpiMetric)[];
6
5
  export declare const resolvers: (typeof KpiMetricQuery | typeof KpiMetricMutation)[];
7
- export declare const subscribers: (typeof KpiMetricHistoryEntitySubscriber)[];
6
+ export declare const subscribers: any[];
@@ -2,11 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.subscribers = exports.resolvers = exports.entities = void 0;
4
4
  const kpi_metric_1 = require("./kpi-metric");
5
- const kpi_metric_history_1 = require("./kpi-metric-history");
6
- const event_subscriber_1 = require("./event-subscriber");
7
5
  const kpi_metric_query_1 = require("./kpi-metric-query");
8
6
  const kpi_metric_mutation_1 = require("./kpi-metric-mutation");
9
- exports.entities = [kpi_metric_1.KpiMetric, kpi_metric_history_1.KpiMetricHistory];
7
+ exports.entities = [kpi_metric_1.KpiMetric];
10
8
  exports.resolvers = [kpi_metric_query_1.KpiMetricQuery, kpi_metric_mutation_1.KpiMetricMutation];
11
- exports.subscribers = [event_subscriber_1.KpiMetricHistoryEntitySubscriber];
9
+ exports.subscribers = [];
12
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/kpi-metric/index.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AACxC,6DAAuD;AACvD,yDAAqE;AACrE,yDAAmD;AACnD,+DAAyD;AAE5C,QAAA,QAAQ,GAAG,CAAC,sBAAS,EAAE,qCAAgB,CAAC,CAAA;AACxC,QAAA,SAAS,GAAG,CAAC,iCAAc,EAAE,uCAAiB,CAAC,CAAA;AAC/C,QAAA,WAAW,GAAG,CAAC,mDAAgC,CAAC,CAAA","sourcesContent":["import { KpiMetric } from './kpi-metric'\nimport { KpiMetricHistory } from './kpi-metric-history'\nimport { KpiMetricHistoryEntitySubscriber } from './event-subscriber'\nimport { KpiMetricQuery } from './kpi-metric-query'\nimport { KpiMetricMutation } from './kpi-metric-mutation'\n\nexport const entities = [KpiMetric, KpiMetricHistory]\nexport const resolvers = [KpiMetricQuery, KpiMetricMutation]\nexport const subscribers = [KpiMetricHistoryEntitySubscriber]\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/kpi-metric/index.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AACxC,yDAAmD;AACnD,+DAAyD;AAE5C,QAAA,QAAQ,GAAG,CAAC,sBAAS,CAAC,CAAA;AACtB,QAAA,SAAS,GAAG,CAAC,iCAAc,EAAE,uCAAiB,CAAC,CAAA;AAC/C,QAAA,WAAW,GAAG,EAAE,CAAA","sourcesContent":["import { KpiMetric } from './kpi-metric'\nimport { KpiMetricQuery } from './kpi-metric-query'\nimport { KpiMetricMutation } from './kpi-metric-mutation'\n\nexport const entities = [KpiMetric]\nexport const resolvers = [KpiMetricQuery, KpiMetricMutation]\nexport const subscribers = []\n"]}
@@ -1,7 +1,7 @@
1
1
  import { KpiMetric } from './kpi-metric';
2
2
  import { NewKpiMetric, KpiMetricPatch } from './kpi-metric-type';
3
3
  export declare class KpiMetricMutation {
4
- createKpiMetric(kpiMetric: NewKpiMetric, context: ResolverContext): Promise<KpiMetric>;
4
+ createKpiMetric(metric: NewKpiMetric, context: ResolverContext): Promise<KpiMetric>;
5
5
  updateKpiMetric(id: string, patch: KpiMetricPatch, context: ResolverContext): Promise<KpiMetric>;
6
6
  updateMultipleKpiMetric(patches: KpiMetricPatch[], context: ResolverContext): Promise<KpiMetric[]>;
7
7
  deleteKpiMetric(id: string, context: ResolverContext): Promise<boolean>;
@@ -5,17 +5,73 @@ const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const typeorm_1 = require("typeorm");
7
7
  const shell_1 = require("@things-factory/shell");
8
+ const dataset_1 = require("@things-factory/dataset");
8
9
  const attachment_base_1 = require("@things-factory/attachment-base");
9
10
  const kpi_metric_1 = require("./kpi-metric");
10
11
  const kpi_metric_type_1 = require("./kpi-metric-type");
12
+ const kpi_formula_service_1 = require("../kpi/kpi-formula.service");
13
+ const scheduler_client_1 = require("@things-factory/scheduler-client");
11
14
  let KpiMetricMutation = class KpiMetricMutation {
12
- async createKpiMetric(kpiMetric, context) {
15
+ async createKpiMetric(metric, context) {
13
16
  const { domain, user, tx } = context.state;
14
- const result = await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric, tx).save(Object.assign(Object.assign({}, kpiMetric), { domain, creator: user, updater: user }));
15
- if (kpiMetric.thumbnail) {
17
+ let dataSet = metric.dataSetId
18
+ ? await (0, shell_1.getRepository)(dataset_1.DataSet).findOne({ where: { id: metric.dataSetId } })
19
+ : undefined;
20
+ if (metric.formula) {
21
+ const formulaService = new kpi_formula_service_1.KpiFormulaService();
22
+ const result = await formulaService.validateFormula(metric.formula);
23
+ if (!result.valid) {
24
+ throw new Error(result.errors.join('\n'));
25
+ }
26
+ }
27
+ const result = await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric, tx).save({
28
+ ...metric,
29
+ dataSet,
30
+ domain,
31
+ creator: user,
32
+ updater: user
33
+ });
34
+ // 스케줄러 등록
35
+ if (metric.schedule) {
36
+ const handle = await (0, scheduler_client_1.registerSchedule)({
37
+ name: metric.name,
38
+ client: {
39
+ application: scheduler_client_1.Application,
40
+ group: `${domain.id}`,
41
+ type: 'kpi-metric',
42
+ key: result.id,
43
+ operation: 'aggregate'
44
+ },
45
+ type: 'cron',
46
+ schedule: metric.schedule,
47
+ timezone: metric.timezone,
48
+ task: {
49
+ type: 'rest',
50
+ connection: {
51
+ host: `${scheduler_client_1.CallbackBase}/callback-schedule-for-kpi-metric`,
52
+ headers: {
53
+ 'Content-Type': 'application/json',
54
+ accept: '*/*'
55
+ }
56
+ },
57
+ data: {
58
+ domainId: domain.id,
59
+ metricId: result.id
60
+ },
61
+ history_check: true,
62
+ failed_policy: 'retry_dlq',
63
+ max_retry_count: 3,
64
+ retry_period: 60
65
+ }
66
+ });
67
+ result.scheduleId = handle;
68
+ result.timezone = metric.timezone;
69
+ await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric, tx).save(result);
70
+ }
71
+ if (metric.thumbnail) {
16
72
  await (0, attachment_base_1.createAttachment)(null, {
17
73
  attachment: {
18
- file: kpiMetric.thumbnail,
74
+ file: metric.thumbnail,
19
75
  refType: kpi_metric_1.KpiMetric.name,
20
76
  refBy: result.id
21
77
  }
@@ -29,7 +85,63 @@ let KpiMetricMutation = class KpiMetricMutation {
29
85
  const kpiMetric = await repository.findOne({
30
86
  where: { domain: { id: domain.id }, id }
31
87
  });
32
- const result = await repository.save(Object.assign(Object.assign(Object.assign({}, kpiMetric), patch), { updater: user }));
88
+ let dataSet = patch.dataSetId
89
+ ? await (0, shell_1.getRepository)(dataset_1.DataSet).findOne({ where: { id: patch.dataSetId } })
90
+ : kpiMetric.dataSet;
91
+ if (patch.formula) {
92
+ const formulaService = new kpi_formula_service_1.KpiFormulaService();
93
+ const result = await formulaService.validateFormula(patch.formula);
94
+ if (!result.valid) {
95
+ throw new Error(result.errors.join('\n'));
96
+ }
97
+ }
98
+ const result = await repository.save({
99
+ ...kpiMetric,
100
+ ...patch,
101
+ dataSet,
102
+ updater: user
103
+ });
104
+ // 스케줄러 해제/등록 (변경 시)
105
+ if (kpiMetric.scheduleId && (patch.schedule !== kpiMetric.schedule || !patch.schedule)) {
106
+ await (0, scheduler_client_1.unregisterSchedule)(kpiMetric.scheduleId);
107
+ result.scheduleId = null;
108
+ }
109
+ if (patch.schedule) {
110
+ const handle = await (0, scheduler_client_1.registerSchedule)({
111
+ name: patch.name || kpiMetric.name,
112
+ client: {
113
+ application: scheduler_client_1.Application,
114
+ group: `${domain.id}`,
115
+ type: 'kpi-metric',
116
+ key: result.id,
117
+ operation: 'aggregate'
118
+ },
119
+ type: 'cron',
120
+ schedule: patch.schedule,
121
+ timezone: patch.timezone,
122
+ task: {
123
+ type: 'rest',
124
+ connection: {
125
+ host: `${scheduler_client_1.CallbackBase}/callback-schedule-for-kpi-metric`,
126
+ headers: {
127
+ 'Content-Type': 'application/json',
128
+ accept: '*/*'
129
+ }
130
+ },
131
+ data: {
132
+ domainId: domain.id,
133
+ metricId: result.id
134
+ },
135
+ history_check: true,
136
+ failed_policy: 'retry_dlq',
137
+ max_retry_count: 3,
138
+ retry_period: 60
139
+ }
140
+ });
141
+ result.scheduleId = handle;
142
+ result.timezone = patch.timezone;
143
+ await repository.save(result);
144
+ }
33
145
  if (patch.thumbnail) {
34
146
  await (0, attachment_base_1.deleteAttachmentsByRef)(null, { refBys: [result.id] }, context);
35
147
  await (0, attachment_base_1.createAttachment)(null, {
@@ -51,7 +163,12 @@ let KpiMetricMutation = class KpiMetricMutation {
51
163
  if (_createRecords.length > 0) {
52
164
  for (let i = 0; i < _createRecords.length; i++) {
53
165
  const newRecord = _createRecords[i];
54
- const result = await kpiMetricRepo.save(Object.assign(Object.assign({}, newRecord), { domain, creator: user, updater: user }));
166
+ const result = await kpiMetricRepo.save({
167
+ ...newRecord,
168
+ domain,
169
+ creator: user,
170
+ updater: user
171
+ });
55
172
  if (newRecord.thumbnail) {
56
173
  await (0, attachment_base_1.createAttachment)(null, {
57
174
  attachment: {
@@ -61,14 +178,18 @@ let KpiMetricMutation = class KpiMetricMutation {
61
178
  }
62
179
  }, context);
63
180
  }
64
- results.push(Object.assign(Object.assign({}, result), { cuFlag: '+' }));
181
+ results.push({ ...result, cuFlag: '+' });
65
182
  }
66
183
  }
67
184
  if (_updateRecords.length > 0) {
68
185
  for (let i = 0; i < _updateRecords.length; i++) {
69
186
  const updateRecord = _updateRecords[i];
70
187
  const kpiMetric = await kpiMetricRepo.findOneBy({ id: updateRecord.id });
71
- const result = await kpiMetricRepo.save(Object.assign(Object.assign(Object.assign({}, kpiMetric), updateRecord), { updater: user }));
188
+ const result = await kpiMetricRepo.save({
189
+ ...kpiMetric,
190
+ ...updateRecord,
191
+ updater: user
192
+ });
72
193
  if (updateRecord.thumbnail) {
73
194
  await (0, attachment_base_1.deleteAttachmentsByRef)(null, { refBys: [result.id] }, context);
74
195
  await (0, attachment_base_1.createAttachment)(null, {
@@ -79,14 +200,19 @@ let KpiMetricMutation = class KpiMetricMutation {
79
200
  }
80
201
  }, context);
81
202
  }
82
- results.push(Object.assign(Object.assign({}, result), { cuFlag: 'M' }));
203
+ results.push({ ...result, cuFlag: 'M' });
83
204
  }
84
205
  }
85
206
  return results;
86
207
  }
87
208
  async deleteKpiMetric(id, context) {
88
209
  const { domain, tx } = context.state;
89
- await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric, tx).delete({ domain: { id: domain.id }, id });
210
+ const repo = (0, shell_1.getRepository)(kpi_metric_1.KpiMetric, tx);
211
+ const metric = await repo.findOne({ where: { domain: { id: domain.id }, id } });
212
+ if (metric?.scheduleId) {
213
+ await (0, scheduler_client_1.unregisterSchedule)(metric.scheduleId);
214
+ }
215
+ await repo.delete({ domain: { id: domain.id }, id });
90
216
  await (0, attachment_base_1.deleteAttachmentsByRef)(null, { refBys: [id] }, context);
91
217
  return true;
92
218
  }
@@ -102,7 +228,7 @@ let KpiMetricMutation = class KpiMetricMutation {
102
228
  async importKpiMetrics(kpiMetrics, context) {
103
229
  const { domain, tx } = context.state;
104
230
  await Promise.all(kpiMetrics.map(async (kpiMetric) => {
105
- const createdKpiMetric = await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric, tx).save(Object.assign({ domain }, kpiMetric));
231
+ const createdKpiMetric = await (0, shell_1.getRepository)(kpi_metric_1.KpiMetric, tx).save({ domain, ...kpiMetric });
106
232
  }));
107
233
  return true;
108
234
  }
@@ -110,8 +236,8 @@ let KpiMetricMutation = class KpiMetricMutation {
110
236
  exports.KpiMetricMutation = KpiMetricMutation;
111
237
  tslib_1.__decorate([
112
238
  (0, type_graphql_1.Directive)('@transaction'),
113
- (0, type_graphql_1.Mutation)(returns => kpi_metric_1.KpiMetric, { description: 'To create new KpiMetric' }),
114
- tslib_1.__param(0, (0, type_graphql_1.Arg)('kpiMetric')),
239
+ (0, type_graphql_1.Mutation)(returns => kpi_metric_1.KpiMetric, { description: 'Create a new KPI metric with the provided details.' }),
240
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('metric', { description: 'Input object containing details for the new KPI metric.' })),
115
241
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
116
242
  tslib_1.__metadata("design:type", Function),
117
243
  tslib_1.__metadata("design:paramtypes", [kpi_metric_type_1.NewKpiMetric, Object]),
@@ -1 +1 @@
1
- {"version":3,"file":"kpi-metric-mutation.js","sourceRoot":"","sources":["../../../server/service/kpi-metric/kpi-metric-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { getRepository } from '@things-factory/shell'\n\nimport { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'\nimport { KpiMetric } from './kpi-metric'\nimport { NewKpiMetric, KpiMetricPatch } from './kpi-metric-type'\n\n@Resolver(KpiMetric)\nexport class KpiMetricMutation {\n @Directive('@transaction')\n @Mutation(returns => KpiMetric, { description: 'To create new KpiMetric' })\n async createKpiMetric(@Arg('kpiMetric') kpiMetric: NewKpiMetric, @Ctx() context: ResolverContext): Promise<KpiMetric> {\n const { domain, user, tx } = context.state\n\n const result = await getRepository(KpiMetric, tx).save({\n ...kpiMetric,\n domain,\n creator: user,\n updater: user\n })\n\n if (kpiMetric.thumbnail) {\n await createAttachment(\n null,\n {\n attachment: {\n file: kpiMetric.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => KpiMetric, { description: 'To modify KpiMetric information' })\n async updateKpiMetric(\n @Arg('id') id: string,\n @Arg('patch') patch: KpiMetricPatch,\n @Ctx() context: ResolverContext\n ): Promise<KpiMetric> {\n const { domain, user, tx } = context.state\n\n const repository = getRepository(KpiMetric, tx)\n const kpiMetric = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n const result = await repository.save({\n ...kpiMetric,\n ...patch,\n updater: user\n })\n\n if (patch.thumbnail) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file: patch.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => [KpiMetric], { description: \"To modify multiple KpiMetrics' information\" })\n async updateMultipleKpiMetric(\n @Arg('patches', type => [KpiMetricPatch]) patches: KpiMetricPatch[],\n @Ctx() context: ResolverContext\n ): Promise<KpiMetric[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const kpiMetricRepo = getRepository(KpiMetric, tx)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await kpiMetricRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\n })\n\n if (newRecord.thumbnail) {\n await createAttachment(\n null,\n {\n attachment: {\n file: newRecord.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n const kpiMetric = await kpiMetricRepo.findOneBy({ id: updateRecord.id })\n\n const result = await kpiMetricRepo.save({\n ...kpiMetric,\n ...updateRecord,\n updater: user\n })\n\n if (updateRecord.thumbnail) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file: updateRecord.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete KpiMetric' })\n async deleteKpiMetric(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await getRepository(KpiMetric, tx).delete({ domain: { id: domain.id }, id })\n await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple KpiMetrics' })\n async deleteKpiMetrics(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await getRepository(KpiMetric, tx).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n await deleteAttachmentsByRef(null, { refBys: ids }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To import multiple KpiMetrics' })\n async importKpiMetrics(\n @Arg('kpiMetrics', type => [KpiMetricPatch]) kpiMetrics: KpiMetricPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n kpiMetrics.map(async (kpiMetric: KpiMetricPatch) => {\n const createdKpiMetric: KpiMetric = await getRepository(KpiMetric, tx).save({ domain, ...kpiMetric })\n })\n )\n\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"kpi-metric-mutation.js","sourceRoot":"","sources":["../../../server/service/kpi-metric/kpi-metric-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AACtE,qCAA4B;AAC5B,iDAAqD;AACrD,qDAAiD;AAEjD,qEAA0F;AAC1F,6CAAwC;AACxC,uDAAgE;AAChE,oEAA8D;AAC9D,uEAAkH;AAG3G,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAGtB,AAAN,KAAK,CAAC,eAAe,CACwE,MAAoB,EACxG,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS;YAC5B,CAAC,CAAC,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;YAC3E,CAAC,CAAC,SAAS,CAAA;QAEb,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,cAAc,GAAG,IAAI,uCAAiB,EAAE,CAAA;YAC9C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACnE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAa,EAAC,sBAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;YACrD,GAAG,MAAM;YACT,OAAO;YACP,MAAM;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QAEF,UAAU;QACV,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAA,mCAAgB,EAAC;gBACpC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE;oBACN,WAAW,EAAE,8BAAW;oBACxB,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE;oBACrB,IAAI,EAAE,YAAY;oBAClB,GAAG,EAAE,MAAM,CAAC,EAAE;oBACd,SAAS,EAAE,WAAW;iBACvB;gBACD,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM;oBACZ,UAAU,EAAE;wBACV,IAAI,EAAE,GAAG,+BAAY,mCAAmC;wBACxD,OAAO,EAAE;4BACP,cAAc,EAAE,kBAAkB;4BAClC,MAAM,EAAE,KAAK;yBACd;qBACF;oBACD,IAAI,EAAE;wBACJ,QAAQ,EAAE,MAAM,CAAC,EAAE;wBACnB,QAAQ,EAAE,MAAM,CAAC,EAAE;qBACpB;oBACD,aAAa,EAAE,IAAI;oBACnB,aAAa,EAAE,WAAW;oBAC1B,eAAe,EAAE,CAAC;oBAClB,YAAY,EAAE,EAAE;iBACjB;aACF,CAAC,CAAA;YACF,MAAM,CAAC,UAAU,GAAG,MAAM,CAAA;YAC1B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YACjC,MAAM,IAAA,qBAAa,EAAC,sBAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACjD,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,IAAA,kCAAgB,EACpB,IAAI,EACJ;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,MAAM,CAAC,SAAS;oBACtB,OAAO,EAAE,sBAAS,CAAC,IAAI;oBACvB,KAAK,EAAE,MAAM,CAAC,EAAE;iBACjB;aACF,EACD,OAAO,CACR,CAAA;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAIK,AAAN,KAAK,CAAC,eAAe,CACR,EAAU,EACP,KAAqB,EAC5B,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,sBAAS,EAAE,EAAE,CAAC,CAAA;QAC/C,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YACzC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;QAEF,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS;YAC3B,CAAC,CAAC,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1E,CAAC,CAAC,SAAS,CAAC,OAAO,CAAA;QAErB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,cAAc,GAAG,IAAI,uCAAiB,EAAE,CAAA;YAC9C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;YACnC,GAAG,SAAS;YACZ,GAAG,KAAK;YACR,OAAO;YACP,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QAEF,oBAAoB;QACpB,IAAI,SAAS,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvF,MAAM,IAAA,qCAAkB,EAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAC9C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;QAC1B,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,IAAA,mCAAgB,EAAC;gBACpC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI;gBAClC,MAAM,EAAE;oBACN,WAAW,EAAE,8BAAW;oBACxB,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE;oBACrB,IAAI,EAAE,YAAY;oBAClB,GAAG,EAAE,MAAM,CAAC,EAAE;oBACd,SAAS,EAAE,WAAW;iBACvB;gBACD,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM;oBACZ,UAAU,EAAE;wBACV,IAAI,EAAE,GAAG,+BAAY,mCAAmC;wBACxD,OAAO,EAAE;4BACP,cAAc,EAAE,kBAAkB;4BAClC,MAAM,EAAE,KAAK;yBACd;qBACF;oBACD,IAAI,EAAE;wBACJ,QAAQ,EAAE,MAAM,CAAC,EAAE;wBACnB,QAAQ,EAAE,MAAM,CAAC,EAAE;qBACpB;oBACD,aAAa,EAAE,IAAI;oBACnB,aAAa,EAAE,WAAW;oBAC1B,eAAe,EAAE,CAAC;oBAClB,YAAY,EAAE,EAAE;iBACjB;aACF,CAAC,CAAA;YACF,MAAM,CAAC,UAAU,GAAG,MAAM,CAAA;YAC1B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;YAChC,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC/B,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAA,wCAAsB,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YACpE,MAAM,IAAA,kCAAgB,EACpB,IAAI,EACJ;gBACE,UAAU,EAAE;oBACV,IAAI,EAAE,KAAK,CAAC,SAAS;oBACrB,OAAO,EAAE,sBAAS,CAAC,IAAI;oBACvB,KAAK,EAAE,MAAM,CAAC,EAAE;iBACjB;aACF,EACD,OAAO,CACR,CAAA;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAIK,AAAN,KAAK,CAAC,uBAAuB,CACe,OAAyB,EAC5D,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAA;QACzF,MAAM,aAAa,GAAG,IAAA,qBAAa,EAAC,sBAAS,EAAE,EAAE,CAAC,CAAA;QAElD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBAEnC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;oBACtC,GAAG,SAAS;oBACZ,MAAM;oBACN,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI;iBACd,CAAC,CAAA;gBAEF,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oBACxB,MAAM,IAAA,kCAAgB,EACpB,IAAI,EACJ;wBACE,UAAU,EAAE;4BACV,IAAI,EAAE,SAAS,CAAC,SAAS;4BACzB,OAAO,EAAE,sBAAS,CAAC,IAAI;4BACvB,KAAK,EAAE,MAAM,CAAC,EAAE;yBACjB;qBACF,EACD,OAAO,CACR,CAAA;gBACH,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBACtC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAA;gBAExE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;oBACtC,GAAG,SAAS;oBACZ,GAAG,YAAY;oBACf,OAAO,EAAE,IAAI;iBACd,CAAC,CAAA;gBAEF,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;oBAC3B,MAAM,IAAA,wCAAsB,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;oBACpE,MAAM,IAAA,kCAAgB,EACpB,IAAI,EACJ;wBACE,UAAU,EAAE;4BACV,IAAI,EAAE,YAAY,CAAC,SAAS;4BAC5B,OAAO,EAAE,sBAAS,CAAC,IAAI;4BACvB,KAAK,EAAE,MAAM,CAAC,EAAE;yBACjB;qBACF,EACD,OAAO,CACR,CAAA;gBACH,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAIK,AAAN,KAAK,CAAC,eAAe,CAAY,EAAU,EAAS,OAAwB;QAC1E,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QACpC,MAAM,IAAI,GAAG,IAAA,qBAAa,EAAC,sBAAS,EAAE,EAAE,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAC/E,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;YACvB,MAAM,IAAA,qCAAkB,EAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC7C,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QACpD,MAAM,IAAA,wCAAsB,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAE7D,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,gBAAgB,CACU,GAAa,EACpC,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,IAAA,qBAAa,EAAC,sBAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;YACzB,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QAEF,MAAM,IAAA,wCAAsB,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAE5D,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,gBAAgB,CACyB,UAA4B,EAClE,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAyB,EAAE,EAAE;YACjD,MAAM,gBAAgB,GAAc,MAAM,IAAA,qBAAa,EAAC,sBAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;QACvG,CAAC,CAAC,CACH,CAAA;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AA7SY,8CAAiB;AAGtB;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,sBAAS,EAAE,EAAE,WAAW,EAAE,oDAAoD,EAAE,CAAC;IAEnG,mBAAA,IAAA,kBAAG,EAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,yDAAyD,EAAE,CAAC,CAAA;IACzF,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAD6F,8BAAY;;wDA8EhH;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,sBAAS,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;IAEhF,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IACT,mBAAA,IAAA,kBAAG,EAAC,OAAO,CAAC,CAAA;IACZ,mBAAA,IAAA,kBAAG,GAAE,CAAA;;qDADe,gCAAc;;wDAuFpC;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,sBAAS,CAAC,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE,CAAC;IAE7F,mBAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,gCAAc,CAAC,CAAC,CAAA;IACxC,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;gEAqEP;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IAC9C,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;wDAWlD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IAE5E,mBAAA,IAAA,kBAAG,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;yDAYP;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IAE5E,mBAAA,IAAA,kBAAG,EAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,gCAAc,CAAC,CAAC,CAAA;IAC3C,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;yDAWP;4BA5SU,iBAAiB;IAD7B,IAAA,uBAAQ,EAAC,sBAAS,CAAC;GACP,iBAAiB,CA6S7B","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { getRepository } from '@things-factory/shell'\nimport { DataSet } from '@things-factory/dataset'\n\nimport { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'\nimport { KpiMetric } from './kpi-metric'\nimport { NewKpiMetric, KpiMetricPatch } from './kpi-metric-type'\nimport { KpiFormulaService } from '../kpi/kpi-formula.service'\nimport { registerSchedule, unregisterSchedule, CallbackBase, Application } from '@things-factory/scheduler-client'\n\n@Resolver(KpiMetric)\nexport class KpiMetricMutation {\n @Directive('@transaction')\n @Mutation(returns => KpiMetric, { description: 'Create a new KPI metric with the provided details.' })\n async createKpiMetric(\n @Arg('metric', { description: 'Input object containing details for the new KPI metric.' }) metric: NewKpiMetric,\n @Ctx() context: ResolverContext\n ): Promise<KpiMetric> {\n const { domain, user, tx } = context.state\n\n let dataSet = metric.dataSetId\n ? await getRepository(DataSet).findOne({ where: { id: metric.dataSetId } })\n : undefined\n\n if (metric.formula) {\n const formulaService = new KpiFormulaService()\n const result = await formulaService.validateFormula(metric.formula)\n if (!result.valid) {\n throw new Error(result.errors.join('\\n'))\n }\n }\n\n const result = await getRepository(KpiMetric, tx).save({\n ...metric,\n dataSet,\n domain,\n creator: user,\n updater: user\n })\n\n // 스케줄러 등록\n if (metric.schedule) {\n const handle = await registerSchedule({\n name: metric.name,\n client: {\n application: Application,\n group: `${domain.id}`,\n type: 'kpi-metric',\n key: result.id,\n operation: 'aggregate'\n },\n type: 'cron',\n schedule: metric.schedule,\n timezone: metric.timezone,\n task: {\n type: 'rest',\n connection: {\n host: `${CallbackBase}/callback-schedule-for-kpi-metric`,\n headers: {\n 'Content-Type': 'application/json',\n accept: '*/*'\n }\n },\n data: {\n domainId: domain.id,\n metricId: result.id\n },\n history_check: true,\n failed_policy: 'retry_dlq',\n max_retry_count: 3,\n retry_period: 60\n }\n })\n result.scheduleId = handle\n result.timezone = metric.timezone\n await getRepository(KpiMetric, tx).save(result)\n }\n\n if (metric.thumbnail) {\n await createAttachment(\n null,\n {\n attachment: {\n file: metric.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => KpiMetric, { description: 'To modify KpiMetric information' })\n async updateKpiMetric(\n @Arg('id') id: string,\n @Arg('patch') patch: KpiMetricPatch,\n @Ctx() context: ResolverContext\n ): Promise<KpiMetric> {\n const { domain, user, tx } = context.state\n\n const repository = getRepository(KpiMetric, tx)\n const kpiMetric = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n let dataSet = patch.dataSetId\n ? await getRepository(DataSet).findOne({ where: { id: patch.dataSetId } })\n : kpiMetric.dataSet\n\n if (patch.formula) {\n const formulaService = new KpiFormulaService()\n const result = await formulaService.validateFormula(patch.formula)\n if (!result.valid) {\n throw new Error(result.errors.join('\\n'))\n }\n }\n\n const result = await repository.save({\n ...kpiMetric,\n ...patch,\n dataSet,\n updater: user\n })\n\n // 스케줄러 해제/등록 (변경 시)\n if (kpiMetric.scheduleId && (patch.schedule !== kpiMetric.schedule || !patch.schedule)) {\n await unregisterSchedule(kpiMetric.scheduleId)\n result.scheduleId = null\n }\n if (patch.schedule) {\n const handle = await registerSchedule({\n name: patch.name || kpiMetric.name,\n client: {\n application: Application,\n group: `${domain.id}`,\n type: 'kpi-metric',\n key: result.id,\n operation: 'aggregate'\n },\n type: 'cron',\n schedule: patch.schedule,\n timezone: patch.timezone,\n task: {\n type: 'rest',\n connection: {\n host: `${CallbackBase}/callback-schedule-for-kpi-metric`,\n headers: {\n 'Content-Type': 'application/json',\n accept: '*/*'\n }\n },\n data: {\n domainId: domain.id,\n metricId: result.id\n },\n history_check: true,\n failed_policy: 'retry_dlq',\n max_retry_count: 3,\n retry_period: 60\n }\n })\n result.scheduleId = handle\n result.timezone = patch.timezone\n await repository.save(result)\n }\n\n if (patch.thumbnail) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file: patch.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => [KpiMetric], { description: \"To modify multiple KpiMetrics' information\" })\n async updateMultipleKpiMetric(\n @Arg('patches', type => [KpiMetricPatch]) patches: KpiMetricPatch[],\n @Ctx() context: ResolverContext\n ): Promise<KpiMetric[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const kpiMetricRepo = getRepository(KpiMetric, tx)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await kpiMetricRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\n })\n\n if (newRecord.thumbnail) {\n await createAttachment(\n null,\n {\n attachment: {\n file: newRecord.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n const kpiMetric = await kpiMetricRepo.findOneBy({ id: updateRecord.id })\n\n const result = await kpiMetricRepo.save({\n ...kpiMetric,\n ...updateRecord,\n updater: user\n })\n\n if (updateRecord.thumbnail) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file: updateRecord.thumbnail,\n refType: KpiMetric.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete KpiMetric' })\n async deleteKpiMetric(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n const repo = getRepository(KpiMetric, tx)\n const metric = await repo.findOne({ where: { domain: { id: domain.id }, id } })\n if (metric?.scheduleId) {\n await unregisterSchedule(metric.scheduleId)\n }\n await repo.delete({ domain: { id: domain.id }, id })\n await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple KpiMetrics' })\n async deleteKpiMetrics(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await getRepository(KpiMetric, tx).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n await deleteAttachmentsByRef(null, { refBys: ids }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To import multiple KpiMetrics' })\n async importKpiMetrics(\n @Arg('kpiMetrics', type => [KpiMetricPatch]) kpiMetrics: KpiMetricPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n kpiMetrics.map(async (kpiMetric: KpiMetricPatch) => {\n const createdKpiMetric: KpiMetric = await getRepository(KpiMetric, tx).save({ domain, ...kpiMetric })\n })\n )\n\n return true\n }\n}\n"]}
@@ -34,7 +34,7 @@ let KpiMetricQuery = class KpiMetricQuery {
34
34
  refBy: kpiMetric.id
35
35
  }
36
36
  });
37
- return attachment === null || attachment === void 0 ? void 0 : attachment.fullpath;
37
+ return attachment?.fullpath;
38
38
  }
39
39
  async domain(kpiMetric) {
40
40
  return kpiMetric.domainId && (await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({ id: kpiMetric.domainId }));
@@ -48,8 +48,8 @@ let KpiMetricQuery = class KpiMetricQuery {
48
48
  };
49
49
  exports.KpiMetricQuery = KpiMetricQuery;
50
50
  tslib_1.__decorate([
51
- (0, type_graphql_1.Query)(returns => kpi_metric_1.KpiMetric, { nullable: true, description: 'To fetch a KpiMetric' }),
52
- tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
51
+ (0, type_graphql_1.Query)(returns => kpi_metric_1.KpiMetric, { nullable: true, description: 'Fetch a single KPI metric by its unique identifier.' }),
52
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('id', { description: 'Unique identifier of the KPI metric to fetch.' })),
53
53
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
54
54
  tslib_1.__metadata("design:type", Function),
55
55
  tslib_1.__metadata("design:paramtypes", [String, Object]),
@@ -1 +1 @@
1
- {"version":3,"file":"kpi-metric-query.js","sourceRoot":"","sources":["../../../server/service/kpi-metric/kpi-metric-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { KpiMetric } from './kpi-metric'\nimport { KpiMetricList } from './kpi-metric-type'\n\n@Resolver(KpiMetric)\nexport class KpiMetricQuery {\n @Query(returns => KpiMetric!, { nullable: true, description: 'To fetch a KpiMetric' })\n async kpiMetric(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<KpiMetric> {\n const { domain } = context.state\n\n return await getRepository(KpiMetric).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => KpiMetricList, { description: 'To fetch multiple KpiMetrics' })\n async kpiMetrics(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<KpiMetricList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiMetric),\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => String)\n async thumbnail(@Root() kpiMetric: KpiMetric): Promise<string | undefined> {\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: kpiMetric.domainId },\n refType: KpiMetric.name,\n refBy: kpiMetric.id\n }\n })\n\n return attachment?.fullpath\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() kpiMetric: KpiMetric): Promise<Domain> {\n return kpiMetric.domainId && (await getRepository(Domain).findOneBy({ id: kpiMetric.domainId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() kpiMetric: KpiMetric): Promise<User> {\n return kpiMetric.updaterId && (await getRepository(User).findOneBy({ id: kpiMetric.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() kpiMetric: KpiMetric): Promise<User> {\n return kpiMetric.creatorId && (await getRepository(User).findOneBy({ id: kpiMetric.creatorId }))\n }\n}\n"]}
1
+ {"version":3,"file":"kpi-metric-query.js","sourceRoot":"","sources":["../../../server/service/kpi-metric/kpi-metric-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { KpiMetric } from './kpi-metric'\nimport { KpiMetricList } from './kpi-metric-type'\n\n@Resolver(KpiMetric)\nexport class KpiMetricQuery {\n @Query(returns => KpiMetric!, { nullable: true, description: 'Fetch a single KPI metric by its unique identifier.' })\n async kpiMetric(\n @Arg('id', { description: 'Unique identifier of the KPI metric to fetch.' }) id: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiMetric> {\n const { domain } = context.state\n\n return await getRepository(KpiMetric).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => KpiMetricList, { description: 'To fetch multiple KpiMetrics' })\n async kpiMetrics(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<KpiMetricList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiMetric),\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => String)\n async thumbnail(@Root() kpiMetric: KpiMetric): Promise<string | undefined> {\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: kpiMetric.domainId },\n refType: KpiMetric.name,\n refBy: kpiMetric.id\n }\n })\n\n return attachment?.fullpath\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() kpiMetric: KpiMetric): Promise<Domain> {\n return kpiMetric.domainId && (await getRepository(Domain).findOneBy({ id: kpiMetric.domainId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() kpiMetric: KpiMetric): Promise<User> {\n return kpiMetric.updaterId && (await getRepository(User).findOneBy({ id: kpiMetric.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() kpiMetric: KpiMetric): Promise<User> {\n return kpiMetric.creatorId && (await getRepository(User).findOneBy({ id: kpiMetric.creatorId }))\n }\n}\n"]}
@@ -1,21 +1,34 @@
1
1
  import type { FileUpload } from 'graphql-upload/GraphQLUpload.js';
2
- import { KpiMetric, KpiMetricStatus } from './kpi-metric';
2
+ import { KpiMetric } from './kpi-metric';
3
3
  export declare class NewKpiMetric {
4
4
  name: string;
5
5
  description?: string;
6
- state?: KpiMetricStatus;
6
+ unit?: string;
7
+ source?: string;
8
+ dataSetId?: string;
9
+ fieldName?: string;
7
10
  active?: boolean;
8
- params?: string;
11
+ formula?: string;
12
+ schedule?: string;
9
13
  thumbnail?: FileUpload;
14
+ timezone?: string;
15
+ scheduleId?: string;
10
16
  }
11
17
  export declare class KpiMetricPatch {
12
18
  id?: string;
13
19
  name?: string;
14
20
  description?: string;
15
- state?: KpiMetricStatus;
21
+ unit?: string;
22
+ source?: string;
23
+ dataSetId?: string;
24
+ fieldName?: string;
16
25
  active?: boolean;
26
+ formula?: string;
27
+ schedule?: string;
17
28
  thumbnail?: FileUpload;
18
29
  cuFlag?: string;
30
+ timezone?: string;
31
+ scheduleId?: string;
19
32
  }
20
33
  export declare class KpiMetricList {
21
34
  items: KpiMetric[];