@things-factory/kpi 10.1.248 → 10.1.249

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 (409) hide show
  1. package/dist-client/bootstrap.d.ts +2 -0
  2. package/dist-client/bootstrap.js +7 -0
  3. package/dist-client/bootstrap.js.map +1 -0
  4. package/dist-client/charts/kpi-boxplot-chart.d.ts +24 -0
  5. package/dist-client/charts/kpi-boxplot-chart.js +324 -0
  6. package/dist-client/charts/kpi-boxplot-chart.js.map +1 -0
  7. package/dist-client/charts/kpi-mini-trend-chart.d.ts +14 -0
  8. package/dist-client/charts/kpi-mini-trend-chart.js +148 -0
  9. package/dist-client/charts/kpi-mini-trend-chart.js.map +1 -0
  10. package/dist-client/charts/kpi-radar-chart.d.ts +16 -0
  11. package/dist-client/charts/kpi-radar-chart.js +138 -0
  12. package/dist-client/charts/kpi-radar-chart.js.map +1 -0
  13. package/dist-client/charts/kpi-trend-chart.d.ts +25 -0
  14. package/dist-client/charts/kpi-trend-chart.js +186 -0
  15. package/dist-client/charts/kpi-trend-chart.js.map +1 -0
  16. package/dist-client/google-map/common-google-map.d.ts +34 -0
  17. package/dist-client/google-map/common-google-map.js +333 -0
  18. package/dist-client/google-map/common-google-map.js.map +1 -0
  19. package/dist-client/google-map/google-map-loader.d.ts +8 -0
  20. package/dist-client/google-map/google-map-loader.js +22 -0
  21. package/dist-client/google-map/google-map-loader.js.map +1 -0
  22. package/dist-client/index.d.ts +1 -0
  23. package/dist-client/index.js +2 -0
  24. package/dist-client/index.js.map +1 -0
  25. package/dist-client/pages/kpi/kpi-grade-editor.d.ts +35 -0
  26. package/dist-client/pages/kpi/kpi-grade-editor.js +165 -0
  27. package/dist-client/pages/kpi/kpi-grade-editor.js.map +1 -0
  28. package/dist-client/pages/kpi/kpi-importer.d.ts +23 -0
  29. package/dist-client/pages/kpi/kpi-importer.js +92 -0
  30. package/dist-client/pages/kpi/kpi-importer.js.map +1 -0
  31. package/dist-client/pages/kpi/kpi-list-page.d.ts +136 -0
  32. package/dist-client/pages/kpi/kpi-list-page.js +948 -0
  33. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -0
  34. package/dist-client/pages/kpi/kpi-overview-sample.d.ts +36 -0
  35. package/dist-client/pages/kpi/kpi-overview-sample.js +264 -0
  36. package/dist-client/pages/kpi/kpi-overview-sample.js.map +1 -0
  37. package/dist-client/pages/kpi/kpi-overview.d.ts +14 -0
  38. package/dist-client/pages/kpi/kpi-overview.js +361 -0
  39. package/dist-client/pages/kpi/kpi-overview.js.map +1 -0
  40. package/dist-client/pages/kpi/kpi-tree-page.d.ts +51 -0
  41. package/dist-client/pages/kpi/kpi-tree-page.js +355 -0
  42. package/dist-client/pages/kpi/kpi-tree-page.js.map +1 -0
  43. package/dist-client/pages/kpi/kpi-view.d.ts +12 -0
  44. package/dist-client/pages/kpi/kpi-view.js +193 -0
  45. package/dist-client/pages/kpi/kpi-view.js.map +1 -0
  46. package/dist-client/pages/kpi/kpi-viz-editor.d.ts +19 -0
  47. package/dist-client/pages/kpi/kpi-viz-editor.js +562 -0
  48. package/dist-client/pages/kpi/kpi-viz-editor.js.map +1 -0
  49. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +17 -0
  50. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +279 -0
  51. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -0
  52. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +19 -0
  53. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +385 -0
  54. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -0
  55. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +23 -0
  56. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +465 -0
  57. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -0
  58. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.d.ts +8 -0
  59. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js +78 -0
  60. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js.map +1 -0
  61. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +24 -0
  62. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +440 -0
  63. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -0
  64. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +33 -0
  65. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +444 -0
  66. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -0
  67. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +23 -0
  68. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +369 -0
  69. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -0
  70. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +18 -0
  71. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +128 -0
  72. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +1 -0
  73. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +31 -0
  74. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +493 -0
  75. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -0
  76. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +50 -0
  77. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +884 -0
  78. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -0
  79. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +12 -0
  80. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +82 -0
  81. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +1 -0
  82. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +11 -0
  83. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +65 -0
  84. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +1 -0
  85. package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +13 -0
  86. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +115 -0
  87. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +1 -0
  88. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +15 -0
  89. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +146 -0
  90. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -0
  91. package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +7 -0
  92. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +86 -0
  93. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +1 -0
  94. package/dist-client/pages/kpi-history/kpi-history-list-page.d.ts +21 -0
  95. package/dist-client/pages/kpi-history/kpi-history-list-page.js +160 -0
  96. package/dist-client/pages/kpi-history/kpi-history-list-page.js.map +1 -0
  97. package/dist-client/pages/kpi-metric/kpi-metric-importer.d.ts +23 -0
  98. package/dist-client/pages/kpi-metric/kpi-metric-importer.js +92 -0
  99. package/dist-client/pages/kpi-metric/kpi-metric-importer.js.map +1 -0
  100. package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +65 -0
  101. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +415 -0
  102. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +1 -0
  103. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +52 -0
  104. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +678 -0
  105. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -0
  106. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +23 -0
  107. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +75 -0
  108. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -0
  109. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +64 -0
  110. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +311 -0
  111. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -0
  112. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +12 -0
  113. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +175 -0
  114. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -0
  115. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +35 -0
  116. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +161 -0
  117. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +1 -0
  118. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.d.ts +47 -0
  119. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js +655 -0
  120. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js.map +1 -0
  121. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.d.ts +23 -0
  122. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js +92 -0
  123. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js.map +1 -0
  124. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.d.ts +65 -0
  125. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js +416 -0
  126. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js.map +1 -0
  127. package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +50 -0
  128. package/dist-client/pages/kpi-value/kpi-value-editor-page.js +700 -0
  129. package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +1 -0
  130. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +23 -0
  131. package/dist-client/pages/kpi-value/kpi-value-importer.js +92 -0
  132. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -0
  133. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +73 -0
  134. package/dist-client/pages/kpi-value/kpi-value-list-page.js +403 -0
  135. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -0
  136. package/dist-client/route.d.ts +1 -0
  137. package/dist-client/route.js +47 -0
  138. package/dist-client/route.js.map +1 -0
  139. package/dist-client/tsconfig.tsbuildinfo +1 -0
  140. package/dist-client/viewparts/kpi-metric-input.d.ts +23 -0
  141. package/dist-client/viewparts/kpi-metric-input.js +140 -0
  142. package/dist-client/viewparts/kpi-metric-input.js.map +1 -0
  143. package/dist-client/viewparts/kpi-metric-meta-editor.d.ts +36 -0
  144. package/dist-client/viewparts/kpi-metric-meta-editor.js +321 -0
  145. package/dist-client/viewparts/kpi-metric-meta-editor.js.map +1 -0
  146. package/dist-client/viewparts/metric-input-hint.d.ts +26 -0
  147. package/dist-client/viewparts/metric-input-hint.js +19 -0
  148. package/dist-client/viewparts/metric-input-hint.js.map +1 -0
  149. package/dist-client/viewparts/metric-input.test.d.ts +1 -0
  150. package/dist-client/viewparts/metric-input.test.js +43 -0
  151. package/dist-client/viewparts/metric-input.test.js.map +1 -0
  152. package/dist-client/viewparts/metric-renderer-registry.d.ts +18 -0
  153. package/dist-client/viewparts/metric-renderer-registry.js +29 -0
  154. package/dist-client/viewparts/metric-renderer-registry.js.map +1 -0
  155. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.d.ts +19 -0
  156. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js +76 -0
  157. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js.map +1 -0
  158. package/dist-server/calculator/calculator.test.d.ts +1 -0
  159. package/dist-server/calculator/calculator.test.js +126 -0
  160. package/dist-server/calculator/calculator.test.js.map +1 -0
  161. package/dist-server/calculator/evaluator.d.ts +8 -0
  162. package/dist-server/calculator/evaluator.js +42 -0
  163. package/dist-server/calculator/evaluator.js.map +1 -0
  164. package/dist-server/calculator/functions.d.ts +3 -0
  165. package/dist-server/calculator/functions.js +62 -0
  166. package/dist-server/calculator/functions.js.map +1 -0
  167. package/dist-server/calculator/index.d.ts +6 -0
  168. package/dist-server/calculator/index.js +10 -0
  169. package/dist-server/calculator/index.js.map +1 -0
  170. package/dist-server/calculator/parser.d.ts +34 -0
  171. package/dist-server/calculator/parser.js +185 -0
  172. package/dist-server/calculator/parser.js.map +1 -0
  173. package/dist-server/calculator/provider.d.ts +8 -0
  174. package/dist-server/calculator/provider.js +13 -0
  175. package/dist-server/calculator/provider.js.map +1 -0
  176. package/dist-server/calculator/score.d.ts +21 -0
  177. package/dist-server/calculator/score.js +36 -0
  178. package/dist-server/calculator/score.js.map +1 -0
  179. package/dist-server/calculator/score.test.d.ts +1 -0
  180. package/dist-server/calculator/score.test.js +47 -0
  181. package/dist-server/calculator/score.test.js.map +1 -0
  182. package/dist-server/calculator/validate.d.ts +15 -0
  183. package/dist-server/calculator/validate.js +30 -0
  184. package/dist-server/calculator/validate.js.map +1 -0
  185. package/dist-server/calculator/validate.test.d.ts +1 -0
  186. package/dist-server/calculator/validate.test.js +45 -0
  187. package/dist-server/calculator/validate.test.js.map +1 -0
  188. package/dist-server/controllers/index.d.ts +2 -0
  189. package/dist-server/controllers/index.js +6 -0
  190. package/dist-server/controllers/index.js.map +1 -0
  191. package/dist-server/controllers/kpi-metric-value-provider.d.ts +11 -0
  192. package/dist-server/controllers/kpi-metric-value-provider.js +97 -0
  193. package/dist-server/controllers/kpi-metric-value-provider.js.map +1 -0
  194. package/dist-server/controllers/kpi-value-provider.d.ts +11 -0
  195. package/dist-server/controllers/kpi-value-provider.js +50 -0
  196. package/dist-server/controllers/kpi-value-provider.js.map +1 -0
  197. package/dist-server/index.d.ts +5 -0
  198. package/dist-server/index.js +9 -0
  199. package/dist-server/index.js.map +1 -0
  200. package/dist-server/migrations/1752190849680-seed-kpi-metrics.d.ts +6 -0
  201. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js +102 -0
  202. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js.map +1 -0
  203. package/dist-server/migrations/1752190849681-seed-kpi.d.ts +5 -0
  204. package/dist-server/migrations/1752190849681-seed-kpi.js +315 -0
  205. package/dist-server/migrations/1752190849681-seed-kpi.js.map +1 -0
  206. package/dist-server/migrations/1752192090123-add-grades-to-kpi.d.ts +7 -0
  207. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js +51 -0
  208. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js.map +1 -0
  209. package/dist-server/migrations/1752192090124-add-kpi-statistics.d.ts +5 -0
  210. package/dist-server/migrations/1752192090124-add-kpi-statistics.js +710 -0
  211. package/dist-server/migrations/1752192090124-add-kpi-statistics.js.map +1 -0
  212. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.d.ts +6 -0
  213. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js +111 -0
  214. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js.map +1 -0
  215. package/dist-server/migrations/1752192090129-seed-kpi-values.d.ts +6 -0
  216. package/dist-server/migrations/1752192090129-seed-kpi-values.js +187 -0
  217. package/dist-server/migrations/1752192090129-seed-kpi-values.js.map +1 -0
  218. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.d.ts +10 -0
  219. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js +26 -0
  220. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js.map +1 -0
  221. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.d.ts +11 -0
  222. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js +54 -0
  223. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js.map +1 -0
  224. package/dist-server/migrations/grade-data/x11-performance-table.json +962 -0
  225. package/dist-server/migrations/grade-data/x12-performance-table.json +611 -0
  226. package/dist-server/migrations/grade-data/x14-performance-table.json +42 -0
  227. package/dist-server/migrations/grade-data/x21-performance-table.json +889 -0
  228. package/dist-server/migrations/grade-data/x22-performance-table.json +1064 -0
  229. package/dist-server/migrations/grade-data/x23-performance-table.json +42 -0
  230. package/dist-server/migrations/grade-data/x31-performance-table.json +644 -0
  231. package/dist-server/migrations/grade-data/x32-performance-table.json +993 -0
  232. package/dist-server/migrations/grade-data/x33-performance-table.json +195 -0
  233. package/dist-server/migrations/grade-data/x34-performance-table.json +12 -0
  234. package/dist-server/migrations/grade-data/x35-performance-table.json +42 -0
  235. package/dist-server/migrations/grade-data/x41-performance-table.json +825 -0
  236. package/dist-server/migrations/grade-data/x42-performance-table.json +786 -0
  237. package/dist-server/migrations/grade-data/x43-performance-table.json +12 -0
  238. package/dist-server/migrations/grade-data/x44-performance-table.json +42 -0
  239. package/dist-server/migrations/grade-data/x51-performance-table.json +924 -0
  240. package/dist-server/migrations/grade-data/x52-performance-table.json +42 -0
  241. package/dist-server/migrations/grade-data/x61-performance-table.json +261 -0
  242. package/dist-server/migrations/grade-data/x62-performance-table.json +42 -0
  243. package/dist-server/migrations/index.d.ts +1 -0
  244. package/dist-server/migrations/index.js +12 -0
  245. package/dist-server/migrations/index.js.map +1 -0
  246. package/dist-server/migrations/seed-data/kpi-metrics-seed.json +517 -0
  247. package/dist-server/migrations/seed-data/kpi-org-scope-seed.json +1676 -0
  248. package/dist-server/migrations/seed-data/kpi-scopes-seed.json +121 -0
  249. package/dist-server/migrations/seed-data/kpi-values-seed.json +402 -0
  250. package/dist-server/migrations/seed-data/kpis-seed.json +488 -0
  251. package/dist-server/migrations/seed-data/scope-definitions-seed.json +90 -0
  252. package/dist-server/routes.d.ts +1 -0
  253. package/dist-server/routes.js +72 -0
  254. package/dist-server/routes.js.map +1 -0
  255. package/dist-server/service/index.d.ts +15 -0
  256. package/dist-server/service/index.js +49 -0
  257. package/dist-server/service/index.js.map +1 -0
  258. package/dist-server/service/kpi/aggregate-kpi.d.ts +8 -0
  259. package/dist-server/service/kpi/aggregate-kpi.js +123 -0
  260. package/dist-server/service/kpi/aggregate-kpi.js.map +1 -0
  261. package/dist-server/service/kpi/event-subscriber.d.ts +9 -0
  262. package/dist-server/service/kpi/event-subscriber.js +31 -0
  263. package/dist-server/service/kpi/event-subscriber.js.map +1 -0
  264. package/dist-server/service/kpi/index.d.ts +8 -0
  265. package/dist-server/service/kpi/index.js +12 -0
  266. package/dist-server/service/kpi/index.js.map +1 -0
  267. package/dist-server/service/kpi/kpi-formula.service.d.ts +49 -0
  268. package/dist-server/service/kpi/kpi-formula.service.js +165 -0
  269. package/dist-server/service/kpi/kpi-formula.service.js.map +1 -0
  270. package/dist-server/service/kpi/kpi-grade.types.d.ts +22 -0
  271. package/dist-server/service/kpi/kpi-grade.types.js +3 -0
  272. package/dist-server/service/kpi/kpi-grade.types.js.map +1 -0
  273. package/dist-server/service/kpi/kpi-history.d.ts +29 -0
  274. package/dist-server/service/kpi/kpi-history.js +148 -0
  275. package/dist-server/service/kpi/kpi-history.js.map +1 -0
  276. package/dist-server/service/kpi/kpi-mutation.d.ts +14 -0
  277. package/dist-server/service/kpi/kpi-mutation.js +553 -0
  278. package/dist-server/service/kpi/kpi-mutation.js.map +1 -0
  279. package/dist-server/service/kpi/kpi-query.d.ts +24 -0
  280. package/dist-server/service/kpi/kpi-query.js +309 -0
  281. package/dist-server/service/kpi/kpi-query.js.map +1 -0
  282. package/dist-server/service/kpi/kpi-type.d.ts +48 -0
  283. package/dist-server/service/kpi/kpi-type.js +221 -0
  284. package/dist-server/service/kpi/kpi-type.js.map +1 -0
  285. package/dist-server/service/kpi/kpi.d.ts +130 -0
  286. package/dist-server/service/kpi/kpi.js +356 -0
  287. package/dist-server/service/kpi/kpi.js.map +1 -0
  288. package/dist-server/service/kpi-alert/index.d.ts +2 -0
  289. package/dist-server/service/kpi-alert/index.js +6 -0
  290. package/dist-server/service/kpi-alert/index.js.map +1 -0
  291. package/dist-server/service/kpi-alert/kpi-alert-query.d.ts +4 -0
  292. package/dist-server/service/kpi-alert/kpi-alert-query.js +72 -0
  293. package/dist-server/service/kpi-alert/kpi-alert-query.js.map +1 -0
  294. package/dist-server/service/kpi-alert/kpi-alert-type.d.ts +8 -0
  295. package/dist-server/service/kpi-alert/kpi-alert-type.js +33 -0
  296. package/dist-server/service/kpi-alert/kpi-alert-type.js.map +1 -0
  297. package/dist-server/service/kpi-metric/aggregate-kpi-metric.d.ts +8 -0
  298. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js +126 -0
  299. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js.map +1 -0
  300. package/dist-server/service/kpi-metric/index.d.ts +6 -0
  301. package/dist-server/service/kpi-metric/index.js +10 -0
  302. package/dist-server/service/kpi-metric/index.js.map +1 -0
  303. package/dist-server/service/kpi-metric/kpi-metric-meta.d.ts +46 -0
  304. package/dist-server/service/kpi-metric/kpi-metric-meta.js +27 -0
  305. package/dist-server/service/kpi-metric/kpi-metric-meta.js.map +1 -0
  306. package/dist-server/service/kpi-metric/kpi-metric-meta.test.d.ts +1 -0
  307. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js +43 -0
  308. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js.map +1 -0
  309. package/dist-server/service/kpi-metric/kpi-metric-mutation.d.ts +10 -0
  310. package/dist-server/service/kpi-metric/kpi-metric-mutation.js +296 -0
  311. package/dist-server/service/kpi-metric/kpi-metric-mutation.js.map +1 -0
  312. package/dist-server/service/kpi-metric/kpi-metric-query.d.ts +14 -0
  313. package/dist-server/service/kpi-metric/kpi-metric-query.js +126 -0
  314. package/dist-server/service/kpi-metric/kpi-metric-query.js.map +1 -0
  315. package/dist-server/service/kpi-metric/kpi-metric-type.d.ts +45 -0
  316. package/dist-server/service/kpi-metric/kpi-metric-type.js +177 -0
  317. package/dist-server/service/kpi-metric/kpi-metric-type.js.map +1 -0
  318. package/dist-server/service/kpi-metric/kpi-metric.d.ts +39 -0
  319. package/dist-server/service/kpi-metric/kpi-metric.js +174 -0
  320. package/dist-server/service/kpi-metric/kpi-metric.js.map +1 -0
  321. package/dist-server/service/kpi-metric-value/index.d.ts +6 -0
  322. package/dist-server/service/kpi-metric-value/index.js +10 -0
  323. package/dist-server/service/kpi-metric-value/index.js.map +1 -0
  324. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +11 -0
  325. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +283 -0
  326. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -0
  327. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +13 -0
  328. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +106 -0
  329. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +1 -0
  330. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.d.ts +26 -0
  331. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js +112 -0
  332. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js.map +1 -0
  333. package/dist-server/service/kpi-metric-value/kpi-metric-value.d.ts +23 -0
  334. package/dist-server/service/kpi-metric-value/kpi-metric-value.js +107 -0
  335. package/dist-server/service/kpi-metric-value/kpi-metric-value.js.map +1 -0
  336. package/dist-server/service/kpi-org-scope/index.d.ts +5 -0
  337. package/dist-server/service/kpi-org-scope/index.js +9 -0
  338. package/dist-server/service/kpi-org-scope/index.js.map +1 -0
  339. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.d.ts +8 -0
  340. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js +170 -0
  341. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js.map +1 -0
  342. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.d.ts +14 -0
  343. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js +152 -0
  344. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js.map +1 -0
  345. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.d.ts +26 -0
  346. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js +101 -0
  347. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js.map +1 -0
  348. package/dist-server/service/kpi-org-scope/kpi-org-scope.d.ts +26 -0
  349. package/dist-server/service/kpi-org-scope/kpi-org-scope.js +135 -0
  350. package/dist-server/service/kpi-org-scope/kpi-org-scope.js.map +1 -0
  351. package/dist-server/service/kpi-scope/index.d.ts +9 -0
  352. package/dist-server/service/kpi-scope/index.js +14 -0
  353. package/dist-server/service/kpi-scope/index.js.map +1 -0
  354. package/dist-server/service/kpi-scope/kpi-scope-mutation.d.ts +9 -0
  355. package/dist-server/service/kpi-scope/kpi-scope-mutation.js +140 -0
  356. package/dist-server/service/kpi-scope/kpi-scope-mutation.js.map +1 -0
  357. package/dist-server/service/kpi-scope/kpi-scope-query.d.ts +11 -0
  358. package/dist-server/service/kpi-scope/kpi-scope-query.js +89 -0
  359. package/dist-server/service/kpi-scope/kpi-scope-query.js.map +1 -0
  360. package/dist-server/service/kpi-scope/kpi-scope-type.d.ts +35 -0
  361. package/dist-server/service/kpi-scope/kpi-scope-type.js +138 -0
  362. package/dist-server/service/kpi-scope/kpi-scope-type.js.map +1 -0
  363. package/dist-server/service/kpi-scope/kpi-scope.d.ts +38 -0
  364. package/dist-server/service/kpi-scope/kpi-scope.js +144 -0
  365. package/dist-server/service/kpi-scope/kpi-scope.js.map +1 -0
  366. package/dist-server/service/kpi-statistic/index.d.ts +6 -0
  367. package/dist-server/service/kpi-statistic/index.js +10 -0
  368. package/dist-server/service/kpi-statistic/index.js.map +1 -0
  369. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.d.ts +43 -0
  370. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js +181 -0
  371. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js.map +1 -0
  372. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.d.ts +50 -0
  373. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js +324 -0
  374. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js.map +1 -0
  375. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.d.ts +14 -0
  376. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js +279 -0
  377. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js.map +1 -0
  378. package/dist-server/service/kpi-statistic/kpi-statistic-query.d.ts +17 -0
  379. package/dist-server/service/kpi-statistic/kpi-statistic-query.js +183 -0
  380. package/dist-server/service/kpi-statistic/kpi-statistic-query.js.map +1 -0
  381. package/dist-server/service/kpi-statistic/kpi-statistic-type.d.ts +59 -0
  382. package/dist-server/service/kpi-statistic/kpi-statistic-type.js +200 -0
  383. package/dist-server/service/kpi-statistic/kpi-statistic-type.js.map +1 -0
  384. package/dist-server/service/kpi-statistic/kpi-statistic.d.ts +42 -0
  385. package/dist-server/service/kpi-statistic/kpi-statistic.js +210 -0
  386. package/dist-server/service/kpi-statistic/kpi-statistic.js.map +1 -0
  387. package/dist-server/service/kpi-value/index.d.ts +6 -0
  388. package/dist-server/service/kpi-value/index.js +10 -0
  389. package/dist-server/service/kpi-value/index.js.map +1 -0
  390. package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +13 -0
  391. package/dist-server/service/kpi-value/kpi-value-mutation.js +447 -0
  392. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -0
  393. package/dist-server/service/kpi-value/kpi-value-query.d.ts +22 -0
  394. package/dist-server/service/kpi-value/kpi-value-query.js +149 -0
  395. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
  396. package/dist-server/service/kpi-value/kpi-value-score.service.d.ts +24 -0
  397. package/dist-server/service/kpi-value/kpi-value-score.service.js +61 -0
  398. package/dist-server/service/kpi-value/kpi-value-score.service.js.map +1 -0
  399. package/dist-server/service/kpi-value/kpi-value-type.d.ts +33 -0
  400. package/dist-server/service/kpi-value/kpi-value-type.js +156 -0
  401. package/dist-server/service/kpi-value/kpi-value-type.js.map +1 -0
  402. package/dist-server/service/kpi-value/kpi-value.d.ts +32 -0
  403. package/dist-server/service/kpi-value/kpi-value.js +175 -0
  404. package/dist-server/service/kpi-value/kpi-value.js.map +1 -0
  405. package/dist-server/service/utils/value-date-util.d.ts +4 -0
  406. package/dist-server/service/utils/value-date-util.js +117 -0
  407. package/dist-server/service/utils/value-date-util.js.map +1 -0
  408. package/dist-server/tsconfig.tsbuildinfo +1 -0
  409. package/package.json +3 -3
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KpiMetricValue = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const type_graphql_1 = require("type-graphql");
7
+ const shell_1 = require("@things-factory/shell");
8
+ const kpi_metric_1 = require("../kpi-metric/kpi-metric");
9
+ const kpi_1 = require("../kpi/kpi");
10
+ const auth_base_1 = require("@things-factory/auth-base");
11
+ let KpiMetricValue = class KpiMetricValue {
12
+ };
13
+ exports.KpiMetricValue = KpiMetricValue;
14
+ tslib_1.__decorate([
15
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
16
+ (0, type_graphql_1.Field)(type => type_graphql_1.ID),
17
+ tslib_1.__metadata("design:type", String)
18
+ ], KpiMetricValue.prototype, "id", void 0);
19
+ tslib_1.__decorate([
20
+ (0, typeorm_1.ManyToOne)(() => shell_1.Domain),
21
+ (0, type_graphql_1.Field)(type => shell_1.Domain, { nullable: true }),
22
+ tslib_1.__metadata("design:type", shell_1.Domain)
23
+ ], KpiMetricValue.prototype, "domain", void 0);
24
+ tslib_1.__decorate([
25
+ (0, typeorm_1.RelationId)((entity) => entity.domain),
26
+ (0, type_graphql_1.Field)({ nullable: true }),
27
+ tslib_1.__metadata("design:type", String)
28
+ ], KpiMetricValue.prototype, "domainId", void 0);
29
+ tslib_1.__decorate([
30
+ (0, typeorm_1.ManyToOne)(() => kpi_metric_1.KpiMetric, { nullable: false, onDelete: 'CASCADE' }),
31
+ (0, typeorm_1.JoinColumn)({ name: 'metricId' }),
32
+ (0, type_graphql_1.Field)(type => kpi_metric_1.KpiMetric),
33
+ tslib_1.__metadata("design:type", kpi_metric_1.KpiMetric)
34
+ ], KpiMetricValue.prototype, "metric", void 0);
35
+ tslib_1.__decorate([
36
+ (0, typeorm_1.RelationId)((entity) => entity.metric),
37
+ (0, type_graphql_1.Field)(),
38
+ tslib_1.__metadata("design:type", String)
39
+ ], KpiMetricValue.prototype, "metricId", void 0);
40
+ tslib_1.__decorate([
41
+ (0, typeorm_1.Column)('float'),
42
+ (0, type_graphql_1.Field)(type => type_graphql_1.Float),
43
+ tslib_1.__metadata("design:type", Number)
44
+ ], KpiMetricValue.prototype, "value", void 0);
45
+ tslib_1.__decorate([
46
+ (0, typeorm_1.Column)({ nullable: true }),
47
+ (0, type_graphql_1.Field)({ nullable: true }),
48
+ tslib_1.__metadata("design:type", String)
49
+ ], KpiMetricValue.prototype, "unit", void 0);
50
+ tslib_1.__decorate([
51
+ (0, typeorm_1.Column)(),
52
+ (0, type_graphql_1.Field)({
53
+ description: 'Date or period for which this metric value is recorded (e.g., day: YYYY-MM-DD, month: YYYY-MM, range: YYYY-MM-DD~YYYY-MM-DD).'
54
+ }),
55
+ tslib_1.__metadata("design:type", String)
56
+ ], KpiMetricValue.prototype, "valueDate", void 0);
57
+ tslib_1.__decorate([
58
+ (0, typeorm_1.Column)({ default: 'DAY' }),
59
+ (0, type_graphql_1.Field)(type => kpi_1.KpiPeriodType),
60
+ tslib_1.__metadata("design:type", String)
61
+ ], KpiMetricValue.prototype, "periodType", void 0);
62
+ tslib_1.__decorate([
63
+ (0, typeorm_1.Column)({ default: '' }),
64
+ (0, type_graphql_1.Field)({ nullable: true, description: 'Organizational unit for this value (project, department, company, employee, etc.)' }),
65
+ tslib_1.__metadata("design:type", String)
66
+ ], KpiMetricValue.prototype, "org", void 0);
67
+ tslib_1.__decorate([
68
+ (0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
69
+ (0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
70
+ tslib_1.__metadata("design:type", Object)
71
+ ], KpiMetricValue.prototype, "meta", void 0);
72
+ tslib_1.__decorate([
73
+ (0, typeorm_1.CreateDateColumn)(),
74
+ (0, type_graphql_1.Field)({ nullable: true }),
75
+ tslib_1.__metadata("design:type", Date)
76
+ ], KpiMetricValue.prototype, "createdAt", void 0);
77
+ tslib_1.__decorate([
78
+ (0, typeorm_1.UpdateDateColumn)(),
79
+ (0, type_graphql_1.Field)({ nullable: true }),
80
+ tslib_1.__metadata("design:type", Date)
81
+ ], KpiMetricValue.prototype, "updatedAt", void 0);
82
+ tslib_1.__decorate([
83
+ (0, typeorm_1.ManyToOne)(() => auth_base_1.User, { nullable: true }),
84
+ (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
85
+ tslib_1.__metadata("design:type", auth_base_1.User)
86
+ ], KpiMetricValue.prototype, "creator", void 0);
87
+ tslib_1.__decorate([
88
+ (0, typeorm_1.RelationId)((entity) => entity.creator),
89
+ (0, type_graphql_1.Field)({ nullable: true }),
90
+ tslib_1.__metadata("design:type", String)
91
+ ], KpiMetricValue.prototype, "creatorId", void 0);
92
+ tslib_1.__decorate([
93
+ (0, typeorm_1.ManyToOne)(() => auth_base_1.User, { nullable: true }),
94
+ (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
95
+ tslib_1.__metadata("design:type", auth_base_1.User)
96
+ ], KpiMetricValue.prototype, "updater", void 0);
97
+ tslib_1.__decorate([
98
+ (0, typeorm_1.RelationId)((entity) => entity.updater),
99
+ (0, type_graphql_1.Field)({ nullable: true }),
100
+ tslib_1.__metadata("design:type", String)
101
+ ], KpiMetricValue.prototype, "updaterId", void 0);
102
+ exports.KpiMetricValue = KpiMetricValue = tslib_1.__decorate([
103
+ (0, typeorm_1.Entity)(),
104
+ (0, typeorm_1.Index)('ix_kpi_metric_value_latest', ['domain', 'metric', 'valueDate', 'org'], { unique: true }),
105
+ (0, type_graphql_1.ObjectType)({ description: 'Current value for each KPI metric (can be used for both state and history).' })
106
+ ], KpiMetricValue);
107
+ //# sourceMappingURL=kpi-metric-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-metric-value.js","sourceRoot":"","sources":["../../../server/service/kpi-metric-value/kpi-metric-value.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Entity,\n PrimaryGeneratedColumn,\n Column,\n ManyToOne,\n Index,\n JoinColumn,\n CreateDateColumn,\n UpdateDateColumn,\n RelationId\n} from 'typeorm'\nimport { ObjectType, Field, ID, Float } from 'type-graphql'\nimport { Domain, ScalarObject } from '@things-factory/shell'\nimport { KpiMetric } from '../kpi-metric/kpi-metric'\nimport { KpiPeriodType } from '../kpi/kpi'\nimport { User } from '@things-factory/auth-base'\n\n@Entity()\n@Index('ix_kpi_metric_value_latest', ['domain', 'metric', 'valueDate', 'org'], { unique: true })\n@ObjectType({ description: 'Current value for each KPI metric (can be used for both state and history).' })\nexport class KpiMetricValue {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n id: string\n\n @ManyToOne(() => Domain)\n @Field(type => Domain, { nullable: true })\n domain?: Domain\n\n @RelationId((entity: KpiMetricValue) => entity.domain)\n @Field({ nullable: true })\n domainId?: string\n\n @ManyToOne(() => KpiMetric, { nullable: false, onDelete: 'CASCADE' })\n @JoinColumn({ name: 'metricId' })\n @Field(type => KpiMetric)\n metric: KpiMetric\n\n @RelationId((entity: KpiMetricValue) => entity.metric)\n @Field()\n metricId: string\n\n @Column('float')\n @Field(type => Float)\n value: number\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n unit?: string\n\n @Column()\n @Field({\n description:\n 'Date or period for which this metric value is recorded (e.g., day: YYYY-MM-DD, month: YYYY-MM, range: YYYY-MM-DD~YYYY-MM-DD).'\n })\n valueDate: string\n\n @Column({ default: 'DAY' })\n @Field(type => KpiPeriodType)\n periodType: KpiPeriodType\n\n @Column({ default: '' })\n @Field({ nullable: true, description: 'Organizational unit for this value (project, department, company, employee, etc.)' })\n org?: string\n\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => ScalarObject, { nullable: true })\n meta?: any\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @ManyToOne(() => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((entity: KpiMetricValue) => entity.creator)\n @Field({ nullable: true })\n creatorId?: string\n\n @ManyToOne(() => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((entity: KpiMetricValue) => entity.updater)\n @Field({ nullable: true })\n updaterId?: string\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { KpiOrgScope } from './kpi-org-scope';
2
+ import { KpiOrgScopeQuery } from './kpi-org-scope-query';
3
+ import { KpiOrgScopeMutation } from './kpi-org-scope-mutation';
4
+ export declare const entities: (typeof KpiOrgScope)[];
5
+ export declare const resolvers: (typeof KpiOrgScopeQuery | typeof KpiOrgScopeMutation)[];
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvers = exports.entities = void 0;
4
+ const kpi_org_scope_1 = require("./kpi-org-scope");
5
+ const kpi_org_scope_query_1 = require("./kpi-org-scope-query");
6
+ const kpi_org_scope_mutation_1 = require("./kpi-org-scope-mutation");
7
+ exports.entities = [kpi_org_scope_1.KpiOrgScope];
8
+ exports.resolvers = [kpi_org_scope_query_1.KpiOrgScopeQuery, kpi_org_scope_mutation_1.KpiOrgScopeMutation];
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/kpi-org-scope/index.ts"],"names":[],"mappings":";;;AAAA,mDAA6C;AAC7C,+DAAwD;AACxD,qEAA8D;AAEjD,QAAA,QAAQ,GAAG,CAAC,2BAAW,CAAC,CAAA;AACxB,QAAA,SAAS,GAAG,CAAC,sCAAgB,EAAE,4CAAmB,CAAC,CAAA","sourcesContent":["import { KpiOrgScope } from './kpi-org-scope'\nimport { KpiOrgScopeQuery } from './kpi-org-scope-query'\nimport { KpiOrgScopeMutation } from './kpi-org-scope-mutation'\n\nexport const entities = [KpiOrgScope]\nexport const resolvers = [KpiOrgScopeQuery, KpiOrgScopeMutation]\n"]}
@@ -0,0 +1,8 @@
1
+ import { KpiOrgScope } from './kpi-org-scope';
2
+ import { NewKpiOrgScope, KpiOrgScopePatch } from './kpi-org-scope-type';
3
+ export declare class KpiOrgScopeMutation {
4
+ createKpiOrgScope(kpiOrgScope: NewKpiOrgScope, context: ResolverContext): Promise<KpiOrgScope>;
5
+ updateMultipleKpiOrgScope(patches: KpiOrgScopePatch[], context: ResolverContext): Promise<KpiOrgScope[]>;
6
+ deleteKpiOrgScopes(ids: string[], context: ResolverContext): Promise<boolean>;
7
+ bulkUpsertKpiOrgScopes(orgScopes: NewKpiOrgScope[], context: ResolverContext): Promise<KpiOrgScope[]>;
8
+ }
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KpiOrgScopeMutation = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const typeorm_1 = require("typeorm");
7
+ const shell_1 = require("@things-factory/shell");
8
+ const kpi_org_scope_1 = require("./kpi-org-scope");
9
+ const kpi_org_scope_type_1 = require("./kpi-org-scope-type");
10
+ let KpiOrgScopeMutation = class KpiOrgScopeMutation {
11
+ async createKpiOrgScope(kpiOrgScope, context) {
12
+ const { domain, user, tx } = context.state;
13
+ // Check if org already exists for this domain
14
+ const existingOrgScope = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).findOne({
15
+ where: { domain: { id: domain.id }, org: kpiOrgScope.org }
16
+ });
17
+ if (existingOrgScope) {
18
+ throw new Error(`Organization '${kpiOrgScope.org}' already has a scope mapping in this domain`);
19
+ }
20
+ const entity = {
21
+ ...kpiOrgScope,
22
+ domain,
23
+ creator: user,
24
+ updater: user
25
+ };
26
+ return await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).save(entity);
27
+ }
28
+ async updateMultipleKpiOrgScope(patches, context) {
29
+ const { domain, user, tx } = context.state;
30
+ const ids = patches.map(patch => patch.id);
31
+ const existingOrgScopes = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).find({
32
+ where: {
33
+ domain: { id: domain.id },
34
+ id: (0, typeorm_1.In)(ids)
35
+ }
36
+ });
37
+ if (existingOrgScopes.length !== patches.length) {
38
+ throw new Error('Some org-scope mappings not found or not accessible');
39
+ }
40
+ const updatedOrgScopes = [];
41
+ for (const patch of patches) {
42
+ const existingOrgScope = existingOrgScopes.find(os => os.id === patch.id);
43
+ if (!existingOrgScope)
44
+ continue;
45
+ // Check if org is being changed and if new org already exists
46
+ if (patch.org && patch.org !== existingOrgScope.org) {
47
+ const duplicateOrgScope = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).findOne({
48
+ where: {
49
+ domain: { id: domain.id },
50
+ org: patch.org,
51
+ id: (0, typeorm_1.In)(ids.filter(id => id !== patch.id))
52
+ }
53
+ });
54
+ if (duplicateOrgScope) {
55
+ throw new Error(`Organization '${patch.org}' already has a scope mapping in this domain`);
56
+ }
57
+ }
58
+ const updatedEntity = {
59
+ ...existingOrgScope,
60
+ ...patch,
61
+ updater: user,
62
+ updatedAt: new Date()
63
+ };
64
+ const savedOrgScope = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).save(updatedEntity);
65
+ updatedOrgScopes.push(savedOrgScope);
66
+ }
67
+ return updatedOrgScopes;
68
+ }
69
+ async deleteKpiOrgScopes(ids, context) {
70
+ const { domain, tx } = context.state;
71
+ const existingOrgScopes = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).find({
72
+ where: {
73
+ domain: { id: domain.id },
74
+ id: (0, typeorm_1.In)(ids)
75
+ }
76
+ });
77
+ if (existingOrgScopes.length === 0) {
78
+ throw new Error('No org-scope mappings found to delete');
79
+ }
80
+ // Soft delete
81
+ await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).softDelete(existingOrgScopes.map(os => os.id));
82
+ return true;
83
+ }
84
+ async bulkUpsertKpiOrgScopes(orgScopes, context) {
85
+ const { domain, user, tx } = context.state;
86
+ const orgs = orgScopes.map(os => os.org);
87
+ const existingOrgScopes = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).find({
88
+ where: {
89
+ domain: { id: domain.id },
90
+ org: (0, typeorm_1.In)(orgs)
91
+ }
92
+ });
93
+ const results = [];
94
+ for (const orgScopeData of orgScopes) {
95
+ const existing = existingOrgScopes.find(os => os.org === orgScopeData.org);
96
+ if (existing) {
97
+ // Update existing
98
+ const updatedEntity = {
99
+ ...existing,
100
+ ...orgScopeData,
101
+ updater: user,
102
+ updatedAt: new Date()
103
+ };
104
+ const updated = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).save(updatedEntity);
105
+ results.push(updated);
106
+ }
107
+ else {
108
+ // Create new
109
+ const newEntity = {
110
+ ...orgScopeData,
111
+ domain,
112
+ creator: user,
113
+ updater: user
114
+ };
115
+ const saved = await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope, tx).save(newEntity);
116
+ results.push(saved);
117
+ }
118
+ }
119
+ return results;
120
+ }
121
+ };
122
+ exports.KpiOrgScopeMutation = KpiOrgScopeMutation;
123
+ tslib_1.__decorate([
124
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
125
+ (0, type_graphql_1.Directive)('@transaction'),
126
+ (0, type_graphql_1.Mutation)(returns => kpi_org_scope_1.KpiOrgScope, { description: 'Create a new KPI org-scope mapping with the provided details.' }),
127
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('kpiOrgScope', { description: 'Input object containing details for the new org-scope mapping.' })),
128
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
129
+ tslib_1.__metadata("design:type", Function),
130
+ tslib_1.__metadata("design:paramtypes", [kpi_org_scope_type_1.NewKpiOrgScope, Object]),
131
+ tslib_1.__metadata("design:returntype", Promise)
132
+ ], KpiOrgScopeMutation.prototype, "createKpiOrgScope", null);
133
+ tslib_1.__decorate([
134
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
135
+ (0, type_graphql_1.Directive)('@transaction'),
136
+ (0, type_graphql_1.Mutation)(returns => [kpi_org_scope_1.KpiOrgScope], {
137
+ description: 'Update multiple KPI org-scope mappings with the provided patches.'
138
+ }),
139
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [kpi_org_scope_type_1.KpiOrgScopePatch], {
140
+ description: 'Array of patch objects for updating org-scope mappings.'
141
+ })),
142
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
143
+ tslib_1.__metadata("design:type", Function),
144
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
145
+ tslib_1.__metadata("design:returntype", Promise)
146
+ ], KpiOrgScopeMutation.prototype, "updateMultipleKpiOrgScope", null);
147
+ tslib_1.__decorate([
148
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
149
+ (0, type_graphql_1.Directive)('@transaction'),
150
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'Delete KPI org-scope mappings by their IDs.' }),
151
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('ids', type => [String], { description: 'Array of org-scope mapping IDs to delete.' })),
152
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
153
+ tslib_1.__metadata("design:type", Function),
154
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
155
+ tslib_1.__metadata("design:returntype", Promise)
156
+ ], KpiOrgScopeMutation.prototype, "deleteKpiOrgScopes", null);
157
+ tslib_1.__decorate([
158
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "mutation", domainOwnerGranted: true, superUserGranted: true)'),
159
+ (0, type_graphql_1.Directive)('@transaction'),
160
+ (0, type_graphql_1.Mutation)(returns => [kpi_org_scope_1.KpiOrgScope], { description: 'Bulk create or update KPI org-scope mappings.' }),
161
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('orgScopes', type => [kpi_org_scope_type_1.NewKpiOrgScope], { description: 'Array of org-scope mapping data for bulk upsert.' })),
162
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
163
+ tslib_1.__metadata("design:type", Function),
164
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
165
+ tslib_1.__metadata("design:returntype", Promise)
166
+ ], KpiOrgScopeMutation.prototype, "bulkUpsertKpiOrgScopes", null);
167
+ exports.KpiOrgScopeMutation = KpiOrgScopeMutation = tslib_1.__decorate([
168
+ (0, type_graphql_1.Resolver)(kpi_org_scope_1.KpiOrgScope)
169
+ ], KpiOrgScopeMutation);
170
+ //# sourceMappingURL=kpi-org-scope-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-org-scope-mutation.js","sourceRoot":"","sources":["../../../server/service/kpi-org-scope/kpi-org-scope-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 { KpiOrgScope } from './kpi-org-scope'\nimport { NewKpiOrgScope, KpiOrgScopePatch } from './kpi-org-scope-type'\n\n@Resolver(KpiOrgScope)\nexport class KpiOrgScopeMutation {\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => KpiOrgScope, { description: 'Create a new KPI org-scope mapping with the provided details.' })\n async createKpiOrgScope(\n @Arg('kpiOrgScope', { description: 'Input object containing details for the new org-scope mapping.' })\n kpiOrgScope: NewKpiOrgScope,\n @Ctx() context: ResolverContext\n ): Promise<KpiOrgScope> {\n const { domain, user, tx } = context.state\n\n // Check if org already exists for this domain\n const existingOrgScope = await getRepository(KpiOrgScope, tx).findOne({\n where: { domain: { id: domain.id }, org: kpiOrgScope.org }\n })\n\n if (existingOrgScope) {\n throw new Error(`Organization '${kpiOrgScope.org}' already has a scope mapping in this domain`)\n }\n\n const entity: Partial<KpiOrgScope> = {\n ...kpiOrgScope,\n domain,\n creator: user,\n updater: user\n }\n\n return await getRepository(KpiOrgScope, tx).save(entity)\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [KpiOrgScope], {\n description: 'Update multiple KPI org-scope mappings with the provided patches.'\n })\n async updateMultipleKpiOrgScope(\n @Arg('patches', type => [KpiOrgScopePatch], {\n description: 'Array of patch objects for updating org-scope mappings.'\n })\n patches: KpiOrgScopePatch[],\n @Ctx() context: ResolverContext\n ): Promise<KpiOrgScope[]> {\n const { domain, user, tx } = context.state\n\n const ids = patches.map(patch => patch.id)\n const existingOrgScopes = await getRepository(KpiOrgScope, tx).find({\n where: {\n domain: { id: domain.id },\n id: In(ids)\n }\n })\n\n if (existingOrgScopes.length !== patches.length) {\n throw new Error('Some org-scope mappings not found or not accessible')\n }\n\n const updatedOrgScopes: KpiOrgScope[] = []\n\n for (const patch of patches) {\n const existingOrgScope = existingOrgScopes.find(os => os.id === patch.id)\n if (!existingOrgScope) continue\n\n // Check if org is being changed and if new org already exists\n if (patch.org && patch.org !== existingOrgScope.org) {\n const duplicateOrgScope = await getRepository(KpiOrgScope, tx).findOne({\n where: {\n domain: { id: domain.id },\n org: patch.org,\n id: In(ids.filter(id => id !== patch.id))\n }\n })\n if (duplicateOrgScope) {\n throw new Error(`Organization '${patch.org}' already has a scope mapping in this domain`)\n }\n }\n\n const updatedEntity: Partial<KpiOrgScope> = {\n ...existingOrgScope,\n ...patch,\n updater: user,\n updatedAt: new Date()\n }\n\n const savedOrgScope = await getRepository(KpiOrgScope, tx).save(updatedEntity)\n updatedOrgScopes.push(savedOrgScope)\n }\n\n return updatedOrgScopes\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'Delete KPI org-scope mappings by their IDs.' })\n async deleteKpiOrgScopes(\n @Arg('ids', type => [String], { description: 'Array of org-scope mapping IDs to delete.' }) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n const existingOrgScopes = await getRepository(KpiOrgScope, tx).find({\n where: {\n domain: { id: domain.id },\n id: In(ids)\n }\n })\n\n if (existingOrgScopes.length === 0) {\n throw new Error('No org-scope mappings found to delete')\n }\n\n // Soft delete\n await getRepository(KpiOrgScope, tx).softDelete(existingOrgScopes.map(os => os.id))\n\n return true\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"mutation\", domainOwnerGranted: true, superUserGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [KpiOrgScope], { description: 'Bulk create or update KPI org-scope mappings.' })\n async bulkUpsertKpiOrgScopes(\n @Arg('orgScopes', type => [NewKpiOrgScope], { description: 'Array of org-scope mapping data for bulk upsert.' })\n orgScopes: NewKpiOrgScope[],\n @Ctx() context: ResolverContext\n ): Promise<KpiOrgScope[]> {\n const { domain, user, tx } = context.state\n\n const orgs = orgScopes.map(os => os.org)\n const existingOrgScopes = await getRepository(KpiOrgScope, tx).find({\n where: {\n domain: { id: domain.id },\n org: In(orgs)\n }\n })\n\n const results: KpiOrgScope[] = []\n\n for (const orgScopeData of orgScopes) {\n const existing = existingOrgScopes.find(os => os.org === orgScopeData.org)\n\n if (existing) {\n // Update existing\n const updatedEntity: Partial<KpiOrgScope> = {\n ...existing,\n ...orgScopeData,\n updater: user,\n updatedAt: new Date()\n }\n const updated = await getRepository(KpiOrgScope, tx).save(updatedEntity)\n results.push(updated)\n } else {\n // Create new\n const newEntity: Partial<KpiOrgScope> = {\n ...orgScopeData,\n domain,\n creator: user,\n updater: user\n }\n const saved = await getRepository(KpiOrgScope, tx).save(newEntity)\n results.push(saved)\n }\n }\n\n return results\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { Domain, ListParam } from '@things-factory/shell';
2
+ import { User } from '@things-factory/auth-base';
3
+ import { KpiOrgScope } from './kpi-org-scope';
4
+ import { KpiOrgScopeList } from './kpi-org-scope-type';
5
+ export declare class KpiOrgScopeQuery {
6
+ kpiOrgScope(id: string, context: ResolverContext): Promise<KpiOrgScope>;
7
+ kpiOrgScopes(params: ListParam, context: ResolverContext): Promise<KpiOrgScopeList>;
8
+ kpiOrgScopeValues(scopeField: 'scope01' | 'scope02' | 'scope03' | 'scope04' | 'scope05', context: ResolverContext, searchTerm?: string): Promise<string[]>;
9
+ kpiOrgValues(context: ResolverContext, searchTerm?: string): Promise<string[]>;
10
+ kpiOrgScopeByOrg(org: string, context: ResolverContext): Promise<KpiOrgScope | undefined>;
11
+ domain(kpiOrgScope: KpiOrgScope): Promise<Domain>;
12
+ creator(kpiOrgScope: KpiOrgScope): Promise<User>;
13
+ updater(kpiOrgScope: KpiOrgScope): Promise<User>;
14
+ }
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KpiOrgScopeQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const shell_1 = require("@things-factory/shell");
7
+ const auth_base_1 = require("@things-factory/auth-base");
8
+ const kpi_org_scope_1 = require("./kpi-org-scope");
9
+ const kpi_org_scope_type_1 = require("./kpi-org-scope-type");
10
+ let KpiOrgScopeQuery = class KpiOrgScopeQuery {
11
+ async kpiOrgScope(id, context) {
12
+ const { domain } = context.state;
13
+ return await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope).findOne({
14
+ where: { domain: { id: domain.id }, id }
15
+ });
16
+ }
17
+ async kpiOrgScopes(params, context) {
18
+ const { domain } = context.state;
19
+ const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
20
+ domain,
21
+ params,
22
+ repository: await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope),
23
+ searchables: ['org', 'scope01', 'scope02', 'scope03', 'scope04', 'scope05']
24
+ });
25
+ const [items, total] = await queryBuilder.getManyAndCount();
26
+ return { items, total };
27
+ }
28
+ async kpiOrgScopeValues(scopeField, context, searchTerm) {
29
+ const { domain } = context.state;
30
+ const queryBuilder = (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope)
31
+ .createQueryBuilder('orgScope')
32
+ .select(`DISTINCT orgScope.${scopeField}`, 'value')
33
+ .where('orgScope.domain_id = :domainId', { domainId: domain.id })
34
+ .andWhere(`orgScope.${scopeField} IS NOT NULL`)
35
+ .andWhere(`orgScope.${scopeField} != ''`)
36
+ .andWhere('orgScope.active = true');
37
+ if (searchTerm) {
38
+ queryBuilder.andWhere(`orgScope.${scopeField} ILIKE :searchTerm`, {
39
+ searchTerm: `%${searchTerm}%`
40
+ });
41
+ }
42
+ const results = await queryBuilder.getRawMany();
43
+ return results.map(r => r.value).filter(v => v);
44
+ }
45
+ async kpiOrgValues(context, searchTerm) {
46
+ const { domain } = context.state;
47
+ const queryBuilder = (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope)
48
+ .createQueryBuilder('orgScope')
49
+ .select('DISTINCT orgScope.org', 'value')
50
+ .where('orgScope.domain_id = :domainId', { domainId: domain.id })
51
+ .andWhere('orgScope.active = true');
52
+ if (searchTerm) {
53
+ queryBuilder.andWhere('orgScope.org ILIKE :searchTerm', {
54
+ searchTerm: `%${searchTerm}%`
55
+ });
56
+ }
57
+ const results = await queryBuilder.getRawMany();
58
+ return results.map(r => r.value);
59
+ }
60
+ async kpiOrgScopeByOrg(org, context) {
61
+ const { domain } = context.state;
62
+ return await (0, shell_1.getRepository)(kpi_org_scope_1.KpiOrgScope).findOne({
63
+ where: { domain: { id: domain.id }, org }
64
+ });
65
+ }
66
+ async domain(kpiOrgScope) {
67
+ return kpiOrgScope.domainId && (await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({ id: kpiOrgScope.domainId }));
68
+ }
69
+ async creator(kpiOrgScope) {
70
+ return kpiOrgScope.creatorId && (await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: kpiOrgScope.creatorId }));
71
+ }
72
+ async updater(kpiOrgScope) {
73
+ return kpiOrgScope.updaterId && (await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: kpiOrgScope.updaterId }));
74
+ }
75
+ };
76
+ exports.KpiOrgScopeQuery = KpiOrgScopeQuery;
77
+ tslib_1.__decorate([
78
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
79
+ (0, type_graphql_1.Query)(returns => kpi_org_scope_1.KpiOrgScope, {
80
+ nullable: true,
81
+ description: 'Fetch a single KPI org-scope mapping by its unique identifier.'
82
+ }),
83
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('id', { description: 'Unique identifier of the org-scope mapping to fetch.' })),
84
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
85
+ tslib_1.__metadata("design:type", Function),
86
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
87
+ tslib_1.__metadata("design:returntype", Promise)
88
+ ], KpiOrgScopeQuery.prototype, "kpiOrgScope", null);
89
+ tslib_1.__decorate([
90
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
91
+ (0, type_graphql_1.Query)(returns => kpi_org_scope_type_1.KpiOrgScopeList, {
92
+ description: 'Fetch multiple KPI org-scope mappings with filters and pagination'
93
+ }),
94
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
95
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
96
+ tslib_1.__metadata("design:type", Function),
97
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
98
+ tslib_1.__metadata("design:returntype", Promise)
99
+ ], KpiOrgScopeQuery.prototype, "kpiOrgScopes", null);
100
+ tslib_1.__decorate([
101
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
102
+ (0, type_graphql_1.Query)(returns => [String], { description: 'Get distinct values for a specific scope field' }),
103
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('scopeField', { description: 'Scope field to get distinct values from' })),
104
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
105
+ tslib_1.__param(2, (0, type_graphql_1.Arg)('searchTerm', { nullable: true, description: 'Optional search term to filter values' })),
106
+ tslib_1.__metadata("design:type", Function),
107
+ tslib_1.__metadata("design:paramtypes", [String, Object, String]),
108
+ tslib_1.__metadata("design:returntype", Promise)
109
+ ], KpiOrgScopeQuery.prototype, "kpiOrgScopeValues", null);
110
+ tslib_1.__decorate([
111
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
112
+ (0, type_graphql_1.Query)(returns => [String], { description: 'Get distinct org values' }),
113
+ tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
114
+ tslib_1.__param(1, (0, type_graphql_1.Arg)('searchTerm', { nullable: true, description: 'Optional search term to filter org values' })),
115
+ tslib_1.__metadata("design:type", Function),
116
+ tslib_1.__metadata("design:paramtypes", [Object, String]),
117
+ tslib_1.__metadata("design:returntype", Promise)
118
+ ], KpiOrgScopeQuery.prototype, "kpiOrgValues", null);
119
+ tslib_1.__decorate([
120
+ (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
121
+ (0, type_graphql_1.Query)(returns => kpi_org_scope_1.KpiOrgScope, { nullable: true, description: 'Find org-scope mapping by org identifier' }),
122
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('org', { description: 'Organization identifier to search for' })),
123
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
124
+ tslib_1.__metadata("design:type", Function),
125
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
126
+ tslib_1.__metadata("design:returntype", Promise)
127
+ ], KpiOrgScopeQuery.prototype, "kpiOrgScopeByOrg", null);
128
+ tslib_1.__decorate([
129
+ (0, type_graphql_1.FieldResolver)(type => shell_1.Domain),
130
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
131
+ tslib_1.__metadata("design:type", Function),
132
+ tslib_1.__metadata("design:paramtypes", [kpi_org_scope_1.KpiOrgScope]),
133
+ tslib_1.__metadata("design:returntype", Promise)
134
+ ], KpiOrgScopeQuery.prototype, "domain", null);
135
+ tslib_1.__decorate([
136
+ (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
137
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
138
+ tslib_1.__metadata("design:type", Function),
139
+ tslib_1.__metadata("design:paramtypes", [kpi_org_scope_1.KpiOrgScope]),
140
+ tslib_1.__metadata("design:returntype", Promise)
141
+ ], KpiOrgScopeQuery.prototype, "creator", null);
142
+ tslib_1.__decorate([
143
+ (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
144
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
145
+ tslib_1.__metadata("design:type", Function),
146
+ tslib_1.__metadata("design:paramtypes", [kpi_org_scope_1.KpiOrgScope]),
147
+ tslib_1.__metadata("design:returntype", Promise)
148
+ ], KpiOrgScopeQuery.prototype, "updater", null);
149
+ exports.KpiOrgScopeQuery = KpiOrgScopeQuery = tslib_1.__decorate([
150
+ (0, type_graphql_1.Resolver)(kpi_org_scope_1.KpiOrgScope)
151
+ ], KpiOrgScopeQuery);
152
+ //# sourceMappingURL=kpi-org-scope-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kpi-org-scope-query.js","sourceRoot":"","sources":["../../../server/service/kpi-org-scope/kpi-org-scope-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\nimport { KpiOrgScope } from './kpi-org-scope'\nimport { KpiOrgScopeList } from './kpi-org-scope-type'\n\n@Resolver(KpiOrgScope)\nexport class KpiOrgScopeQuery {\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => KpiOrgScope!, {\n nullable: true,\n description: 'Fetch a single KPI org-scope mapping by its unique identifier.'\n })\n async kpiOrgScope(\n @Arg('id', { description: 'Unique identifier of the org-scope mapping to fetch.' }) id: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiOrgScope> {\n const { domain } = context.state\n\n return await getRepository(KpiOrgScope).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => KpiOrgScopeList, {\n description: 'Fetch multiple KPI org-scope mappings with filters and pagination'\n })\n async kpiOrgScopes(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<KpiOrgScopeList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiOrgScope),\n searchables: ['org', 'scope01', 'scope02', 'scope03', 'scope04', 'scope05']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => [String], { description: 'Get distinct values for a specific scope field' })\n async kpiOrgScopeValues(\n @Arg('scopeField', { description: 'Scope field to get distinct values from' })\n scopeField: 'scope01' | 'scope02' | 'scope03' | 'scope04' | 'scope05',\n @Ctx() context: ResolverContext,\n @Arg('searchTerm', { nullable: true, description: 'Optional search term to filter values' }) searchTerm?: string\n ): Promise<string[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository(KpiOrgScope)\n .createQueryBuilder('orgScope')\n .select(`DISTINCT orgScope.${scopeField}`, 'value')\n .where('orgScope.domain_id = :domainId', { domainId: domain.id })\n .andWhere(`orgScope.${scopeField} IS NOT NULL`)\n .andWhere(`orgScope.${scopeField} != ''`)\n .andWhere('orgScope.active = true')\n\n if (searchTerm) {\n queryBuilder.andWhere(`orgScope.${scopeField} ILIKE :searchTerm`, {\n searchTerm: `%${searchTerm}%`\n })\n }\n\n const results = await queryBuilder.getRawMany()\n return results.map(r => r.value).filter(v => v)\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => [String], { description: 'Get distinct org values' })\n async kpiOrgValues(\n @Ctx() context: ResolverContext,\n @Arg('searchTerm', { nullable: true, description: 'Optional search term to filter org values' }) searchTerm?: string\n ): Promise<string[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository(KpiOrgScope)\n .createQueryBuilder('orgScope')\n .select('DISTINCT orgScope.org', 'value')\n .where('orgScope.domain_id = :domainId', { domainId: domain.id })\n .andWhere('orgScope.active = true')\n\n if (searchTerm) {\n queryBuilder.andWhere('orgScope.org ILIKE :searchTerm', {\n searchTerm: `%${searchTerm}%`\n })\n }\n\n const results = await queryBuilder.getRawMany()\n return results.map(r => r.value)\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => KpiOrgScope, { nullable: true, description: 'Find org-scope mapping by org identifier' })\n async kpiOrgScopeByOrg(\n @Arg('org', { description: 'Organization identifier to search for' }) org: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiOrgScope | undefined> {\n const { domain } = context.state\n\n return await getRepository(KpiOrgScope).findOne({\n where: { domain: { id: domain.id }, org }\n })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() kpiOrgScope: KpiOrgScope): Promise<Domain> {\n return kpiOrgScope.domainId && (await getRepository(Domain).findOneBy({ id: kpiOrgScope.domainId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() kpiOrgScope: KpiOrgScope): Promise<User> {\n return kpiOrgScope.creatorId && (await getRepository(User).findOneBy({ id: kpiOrgScope.creatorId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() kpiOrgScope: KpiOrgScope): Promise<User> {\n return kpiOrgScope.updaterId && (await getRepository(User).findOneBy({ id: kpiOrgScope.updaterId }))\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { KpiOrgScope } from './kpi-org-scope';
2
+ export declare class NewKpiOrgScope {
3
+ org: string;
4
+ scope01?: string;
5
+ scope02?: string;
6
+ scope03?: string;
7
+ scope04?: string;
8
+ scope05?: string;
9
+ displayName?: string;
10
+ active?: boolean;
11
+ }
12
+ export declare class KpiOrgScopePatch {
13
+ id: string;
14
+ org?: string;
15
+ scope01?: string;
16
+ scope02?: string;
17
+ scope03?: string;
18
+ scope04?: string;
19
+ scope05?: string;
20
+ displayName?: string;
21
+ active?: boolean;
22
+ }
23
+ export declare class KpiOrgScopeList {
24
+ items: KpiOrgScope[];
25
+ total: number;
26
+ }