@dssp/dkpi 1.0.0-alpha.7 → 1.0.0-alpha.70
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.
- package/KPI-STATISTICS-SERVICE.md +233 -0
- package/_index.html +0 -5
- package/assets/favicon.ico +0 -0
- package/assets/images/project-image.png +0 -0
- package/assets/manifest/apple-1024.png +0 -0
- package/assets/manifest/apple-120.png +0 -0
- package/assets/manifest/apple-152.png +0 -0
- package/assets/manifest/apple-167.png +0 -0
- package/assets/manifest/apple-180.png +0 -0
- package/assets/manifest/apple-touch-icon.png +0 -0
- package/assets/manifest/badge-128x128.png +0 -0
- package/assets/manifest/chrome-splashscreen-icon-384x384.png +0 -0
- package/assets/manifest/chrome-touch-icon-192x192.png +0 -0
- package/assets/manifest/icon-128x128.png +0 -0
- package/assets/manifest/icon-192x192.png +0 -0
- package/assets/manifest/icon-512x512.png +0 -0
- package/assets/manifest/icon-72x72.png +0 -0
- package/assets/manifest/icon-96x96.png +0 -0
- package/assets/manifest/image-metaog.png +0 -0
- package/assets/manifest/maskable_icon.png +0 -0
- package/assets/manifest/ms-icon-144x144.png +0 -0
- package/assets/manifest/ms-touch-icon-144x144-precomposed.png +0 -0
- package/assets/videos/intro.mp4 +0 -0
- package/dist-client/bootstrap.js +64 -4
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/components/kpi-2d-lookup-chart.d.ts +43 -0
- package/dist-client/components/kpi-2d-lookup-chart.js +253 -0
- package/dist-client/components/kpi-2d-lookup-chart.js.map +1 -0
- package/dist-client/components/kpi-boxplot-chart.d.ts +24 -0
- package/dist-client/components/kpi-boxplot-chart.js +291 -0
- package/dist-client/components/kpi-boxplot-chart.js.map +1 -0
- package/dist-client/components/kpi-lookup-chart.d.ts +53 -0
- package/dist-client/components/kpi-lookup-chart.js +430 -0
- package/dist-client/components/kpi-lookup-chart.js.map +1 -0
- package/dist-client/components/kpi-mini-trend-chart.d.ts +14 -0
- package/dist-client/components/kpi-mini-trend-chart.js +148 -0
- package/dist-client/components/kpi-mini-trend-chart.js.map +1 -0
- package/dist-client/components/kpi-radar-chart.d.ts +17 -0
- package/dist-client/components/kpi-radar-chart.js +259 -0
- package/dist-client/components/kpi-radar-chart.js.map +1 -0
- package/dist-client/components/kpi-single-boxplot-chart.d.ts +24 -0
- package/dist-client/components/kpi-single-boxplot-chart.js +391 -0
- package/dist-client/components/kpi-single-boxplot-chart.js.map +1 -0
- package/dist-client/components/kpi-trend-chart.d.ts +25 -0
- package/dist-client/components/kpi-trend-chart.js +220 -0
- package/dist-client/components/kpi-trend-chart.js.map +1 -0
- package/dist-client/components/sv-pagenation-control.d.ts +18 -0
- package/dist-client/components/sv-pagenation-control.js +142 -0
- package/dist-client/components/sv-pagenation-control.js.map +1 -0
- package/dist-client/google-map/common-google-map.d.ts +35 -0
- package/dist-client/google-map/common-google-map.js +345 -0
- package/dist-client/google-map/common-google-map.js.map +1 -0
- package/dist-client/google-map/google-map-loader.d.ts +6 -0
- package/dist-client/google-map/google-map-loader.js +23 -0
- package/dist-client/google-map/google-map-loader.js.map +1 -0
- package/dist-client/icons/menu-icons.d.ts +6 -0
- package/dist-client/icons/menu-icons.js +42 -0
- package/dist-client/icons/menu-icons.js.map +1 -1
- package/dist-client/pages/kpi-admin/dssp-kpi-list-page.d.ts +22 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-list-page.js +57 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-list-page.js.map +1 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.d.ts +46 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.js +378 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.js.map +1 -0
- package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.d.ts +20 -0
- package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.js +445 -0
- package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.js.map +1 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.d.ts +18 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.js +535 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +18 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +259 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +22 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +346 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +26 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +433 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.d.ts +8 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js +78 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +38 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +851 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +42 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +316 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +28 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +497 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +18 -0
- package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +131 -0
- package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +52 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +798 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +63 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +1089 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +12 -0
- package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +82 -0
- package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +11 -0
- package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +65 -0
- package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +13 -0
- package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +115 -0
- package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +15 -0
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +147 -0
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +7 -0
- package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +86 -0
- package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +57 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +719 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +23 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +76 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +68 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +380 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +12 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +174 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +40 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +190 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +1 -0
- package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +23 -0
- package/dist-client/pages/kpi-value/kpi-value-importer.js +93 -0
- package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +71 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.js +464 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +14 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +339 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +14 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +276 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.d.ts +18 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +307 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.d.ts +18 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js +433 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js.map +1 -0
- package/dist-client/pages/sv-project-complete.d.ts +21 -0
- package/dist-client/pages/sv-project-complete.js +213 -0
- package/dist-client/pages/sv-project-complete.js.map +1 -0
- package/dist-client/pages/sv-project-completed-list.d.ts +27 -0
- package/dist-client/pages/sv-project-completed-list.js +416 -0
- package/dist-client/pages/sv-project-completed-list.js.map +1 -0
- package/dist-client/pages/sv-project-detail.d.ts +46 -0
- package/dist-client/pages/sv-project-detail.js +1236 -0
- package/dist-client/pages/sv-project-detail.js.map +1 -0
- package/dist-client/pages/sv-project-list.d.ts +165 -0
- package/dist-client/pages/sv-project-list.js +488 -0
- package/dist-client/pages/sv-project-list.js.map +1 -0
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +35 -1
- package/dist-client/route.js.map +1 -1
- package/dist-client/shared/complete-api.d.ts +8 -0
- package/dist-client/shared/complete-api.js +177 -0
- package/dist-client/shared/complete-api.js.map +1 -0
- package/dist-client/shared/func.d.ts +2 -0
- package/dist-client/shared/func.js +22 -0
- package/dist-client/shared/func.js.map +1 -0
- package/dist-client/themes/dark.css +24 -24
- package/dist-client/themes/light.css +23 -23
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/viewparts/menu-tools.d.ts +40 -5
- package/dist-client/viewparts/menu-tools.js +289 -34
- package/dist-client/viewparts/menu-tools.js.map +1 -1
- package/dist-server/index.d.ts +2 -0
- package/dist-server/index.js +5 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/migrations/index.d.ts +1 -0
- package/dist-server/migrations/index.js +12 -0
- package/dist-server/migrations/index.js.map +1 -0
- package/dist-server/scripts/calculate-kpi-scores.d.ts +10 -0
- package/dist-server/scripts/calculate-kpi-scores.js +333 -0
- package/dist-server/scripts/calculate-kpi-scores.js.map +1 -0
- package/dist-server/scripts/load-grade-data-migration.d.ts +14 -0
- package/dist-server/scripts/load-grade-data-migration.js +279 -0
- package/dist-server/scripts/load-grade-data-migration.js.map +1 -0
- package/dist-server/scripts/propagate-parent-kpi-values.d.ts +14 -0
- package/dist-server/scripts/propagate-parent-kpi-values.js +786 -0
- package/dist-server/scripts/propagate-parent-kpi-values.js.map +1 -0
- package/dist-server/scripts/recalculate-by-project-name.d.ts +2 -0
- package/dist-server/scripts/recalculate-by-project-name.js +72 -0
- package/dist-server/scripts/recalculate-by-project-name.js.map +1 -0
- package/dist-server/service/index.d.ts +4 -0
- package/dist-server/service/index.js +20 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/kpi-metric-value/index.d.ts +4 -0
- package/dist-server/service/kpi-metric-value/index.js +8 -0
- package/dist-server/service/kpi-metric-value/index.js.map +1 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +74 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +687 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +7 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +52 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +1 -0
- package/dist-server/service/kpi-stat/index.d.ts +4 -0
- package/dist-server/service/kpi-stat/index.js +8 -0
- package/dist-server/service/kpi-stat/index.js.map +1 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.d.ts +12 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.js +662 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.js.map +1 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.d.ts +32 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.js +180 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.js.map +1 -0
- package/dist-server/service/kpi-value/index.d.ts +3 -0
- package/dist-server/service/kpi-value/index.js +7 -0
- package/dist-server/service/kpi-value/index.js.map +1 -0
- package/dist-server/service/kpi-value/kpi-value-query.d.ts +8 -0
- package/dist-server/service/kpi-value/kpi-value-query.js +69 -0
- package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/kpi-module-service-tests.md +1286 -0
- package/kpi-module-test-report.md +676 -0
- package/kpi-module-unit-test-detailed-report.md +925 -0
- package/kpi-module-unit-tests-detailed.md +1452 -0
- package/package.json +65 -55
- package/recalculate-batch.sh +64 -0
- package/recalculate-projects-range.sh +98 -0
- package/schema.graphql +2514 -455
- package/things-factory.config.js +11 -1
- package/views/auth-page.html +0 -1
- package/views/public/home.html +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-stat-query.js","sourceRoot":"","sources":["../../../server/service/kpi-stat/kpi-stat-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, Arg, Ctx, Directive } from 'type-graphql'\nimport { getRepository } from '@things-factory/shell'\nimport type ResolverContext from '@things-factory/auth-base'\nimport { KpiStatistic } from '@things-factory/kpi'\nimport { KpiComprehensiveStats, KpiComprehensiveStatsByGeoGroup, KpiMonthlyTrend, KpiProjectStat } from './kpi-stat-types'\n\n@Resolver(KpiStatistic)\nexport class KpiStatQuery {\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiComprehensiveStats], { description: 'Get KPI box plot statistics for Z-category KPIs for all projects' })\n async totalKpiZValueComprehensiveStats(\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Arg('sectorType', { nullable: true }) sectorType?: string,\n @Arg('buildingUsage', { nullable: true }) buildingUsage?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiComprehensiveStats[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n 'k.name as kpiName',\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'AVG(kv.score) as avgVal',\n 'MAX(kv.score) as maxVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('k.name LIKE :pattern', { pattern: 'Z%' })\n .andWhere('p.end_date IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n // 기간 필터\n if (startYearMonth && startYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth && endYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n if (sectorType?.trim()) {\n queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType })\n }\n if (buildingUsage?.trim()) {\n queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage })\n }\n\n queryBuilder.groupBy('k.name')\n\n const results = await queryBuilder.getRawMany()\n\n return results.map(result => {\n const kpiName = result.kpiname\n const minVal = Math.min(Math.max(Number(result.minval), 0), 1)\n const q1Val = Math.min(Math.max(Number(result.q1val), 0), 1)\n const medVal = Math.min(Math.max(Number(result.medval), 0), 1)\n const q3Val = Math.min(Math.max(Number(result.q3val), 0), 1)\n const avgVal = Math.min(Math.max(Number(result.avgval), 0), 1)\n const maxVal = Math.min(Math.max(Number(result.maxval), 0), 1)\n const projectCount = Number(result.projectcount)\n\n return {\n kpiName: kpiName,\n minVal: isNaN(minVal) ? 0 : minVal,\n q1Val: isNaN(q1Val) ? 0 : q1Val,\n medVal: isNaN(medVal) ? 0 : medVal,\n q3Val: isNaN(q3Val) ? 0 : q3Val,\n maxVal: isNaN(maxVal) ? 0 : maxVal,\n avgVal: isNaN(avgVal) ? 0 : avgVal,\n projectCount: isNaN(projectCount) ? 0 : projectCount\n }\n })\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiComprehensiveStats], { description: 'Get KPI box plot statistics for Y-category KPIs for all projects' })\n async totalKpiYValueComprehensiveStats(\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Arg('sectorType', { nullable: true }) sectorType?: string,\n @Arg('buildingUsage', { nullable: true }) buildingUsage?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiComprehensiveStats[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n 'k.name as kpiName',\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'AVG(kv.score) as avgVal',\n 'MAX(kv.score) as maxVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('k.name LIKE :pattern', { pattern: 'Y%' })\n .andWhere('p.end_date IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n // 기간 필터\n if (startYearMonth && startYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth && endYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n if (sectorType?.trim()) {\n queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType })\n }\n if (buildingUsage?.trim()) {\n queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage })\n }\n\n queryBuilder.groupBy('k.name').orderBy('k.name', 'ASC')\n\n const results = await queryBuilder.getRawMany()\n\n return results.map(result => {\n const kpiName = result.kpiname\n const minVal = Math.min(Math.max(Number(result.minval), 0), 1)\n const q1Val = Math.min(Math.max(Number(result.q1val), 0), 1)\n const medVal = Math.min(Math.max(Number(result.medval), 0), 1)\n const q3Val = Math.min(Math.max(Number(result.q3val), 0), 1)\n const avgVal = Math.min(Math.max(Number(result.avgval), 0), 1)\n const maxVal = Math.min(Math.max(Number(result.maxval), 0), 1)\n const projectCount = Number(result.projectcount)\n\n return {\n kpiName: kpiName,\n minVal: isNaN(minVal) ? 0 : minVal,\n q1Val: isNaN(q1Val) ? 0 : q1Val,\n medVal: isNaN(medVal) ? 0 : medVal,\n q3Val: isNaN(q3Val) ? 0 : q3Val,\n maxVal: isNaN(maxVal) ? 0 : maxVal,\n avgVal: isNaN(avgVal) ? 0 : avgVal,\n projectCount: isNaN(projectCount) ? 0 : projectCount\n }\n })\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiComprehensiveStatsByGeoGroup], {\n description: 'Get KPI box plot statistics for Z-category KPIs by metro area'\n })\n async kpiZValueComprehensiveStatsByGeoGroup(\n @Arg('geoGroup', { nullable: true }) geoGroup?: string,\n @Arg('kpiName', { nullable: true }) kpiName?: string,\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Arg('sectorType', { nullable: true }) sectorType?: string,\n @Arg('buildingUsage', { nullable: true }) buildingUsage?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiComprehensiveStatsByGeoGroup[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n `CASE\n WHEN p.geo_group IN ('01','02','03','04','05','06','07','08') THEN '서울특별시'\n WHEN p.geo_group IN ('46','47','48','49') THEN '부산광역시'\n WHEN p.geo_group IN ('41','42','43') THEN '대구광역시'\n WHEN p.geo_group IN ('21','22','23') THEN '인천광역시'\n WHEN p.geo_group IN ('61','62') THEN '광주광역시'\n WHEN p.geo_group IN ('34','35') THEN '대전광역시'\n WHEN p.geo_group IN ('44','45') THEN '울산광역시'\n WHEN p.geo_group = '30' THEN '세종특별자치시'\n WHEN p.geo_group IN ('10','11','12','13','14','15','16','17','18') THEN '경기도'\n WHEN p.geo_group IN ('24','25','26','33') THEN '강원도'\n WHEN p.geo_group IN ('27','28','29') THEN '충청북도'\n WHEN p.geo_group IN ('31','32') THEN '충청남도'\n WHEN p.geo_group IN ('54','55','56') THEN '전라북도'\n WHEN p.geo_group IN ('57','58','59') THEN '전라남도'\n WHEN p.geo_group IN ('36','37','38','39','40') THEN '경상북도'\n WHEN p.geo_group IN ('50','51','52','53') THEN '경상남도'\n WHEN p.geo_group = '63' THEN '제주특별자치도'\n END as geoGroup`,\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'MAX(kv.score) as maxVal',\n 'AVG(kv.score) as avgVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('p.end_date IS NOT NULL')\n .andWhere('p.geo_group IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n // 기간 필터\n if (startYearMonth && startYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth && endYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n if (sectorType?.trim()) {\n queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType })\n }\n if (buildingUsage?.trim()) {\n queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage })\n }\n\n // KPI 필터: kpiName이 지정되면 해당 Y-level KPI만, 없으면 Z-level KPI 전체\n if (kpiName && kpiName.trim() !== '') {\n queryBuilder.andWhere('k.name = :kpiName', { kpiName })\n } else {\n queryBuilder.andWhere('k.name LIKE :pattern', { pattern: 'Z%' })\n }\n\n queryBuilder.groupBy('geoGroup')\n\n if (geoGroup && geoGroup.trim() !== '') {\n queryBuilder.having('geoGroup = :geoGroup', { geoGroup })\n }\n\n const results = await queryBuilder.getRawMany()\n return results\n .map(result => {\n const kpiName = result.kpiname\n const minVal = Math.min(Math.max(Number(result.minval), 0), 1)\n const q1Val = Math.min(Math.max(Number(result.q1val), 0), 1)\n const medVal = Math.min(Math.max(Number(result.medval), 0), 1)\n const q3Val = Math.min(Math.max(Number(result.q3val), 0), 1)\n const maxVal = Math.min(Math.max(Number(result.maxval), 0), 1)\n const avgVal = Math.min(Math.max(Number(result.avgval), 0), 1)\n const projectCount = Number(result.projectcount)\n\n return {\n kpiName: kpiName,\n geoGroup: result.geogroup || null,\n minVal: isNaN(minVal) ? 0 : minVal,\n q1Val: isNaN(q1Val) ? 0 : q1Val,\n medVal: isNaN(medVal) ? 0 : medVal,\n q3Val: isNaN(q3Val) ? 0 : q3Val,\n maxVal: isNaN(maxVal) ? 0 : maxVal,\n avgVal: isNaN(avgVal) ? 0 : avgVal,\n projectCount: isNaN(projectCount) ? 0 : projectCount\n }\n })\n .filter(result => result.geoGroup !== null)\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiComprehensiveStatsByGeoGroup], { description: 'Get KPI box plot statistics for Y-category KPIs by geo group' })\n async kpiYValueComprehensiveStatsByGeoGroup(\n @Arg('geoGroup', { nullable: true }) geoGroup?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiComprehensiveStatsByGeoGroup[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n 'p.geo_group as geoGroup',\n 'k.name as kpiName',\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'MAX(kv.score) as maxVal',\n 'AVG(kv.score) as avgVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('k.name LIKE :pattern', { pattern: 'Y%' })\n .andWhere('p.end_date IS NOT NULL')\n .andWhere('p.geo_group IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n .groupBy('p.geo_group, k.name')\n\n if (geoGroup && geoGroup.trim() !== '') {\n queryBuilder.andWhere('p.geo_group LIKE :geoGroup', { geoGroup: `%${geoGroup}%` })\n }\n\n const results = await queryBuilder.getRawMany()\n return results\n .map(result => {\n const kpiName = result.kpiname\n const minVal = Math.min(Math.max(Number(result.minval), 0), 1)\n const q1Val = Math.min(Math.max(Number(result.q1val), 0), 1)\n const medVal = Math.min(Math.max(Number(result.medval), 0), 1)\n const q3Val = Math.min(Math.max(Number(result.q3val), 0), 1)\n const maxVal = Math.min(Math.max(Number(result.maxval), 0), 1)\n const avgVal = Math.min(Math.max(Number(result.avgval), 0), 1)\n const projectCount = Number(result.projectcount)\n\n return {\n kpiName: kpiName,\n geoGroup: result.geogroup || null,\n minVal: isNaN(minVal) ? 0 : minVal,\n q1Val: isNaN(q1Val) ? 0 : q1Val,\n medVal: isNaN(medVal) ? 0 : medVal,\n q3Val: isNaN(q3Val) ? 0 : q3Val,\n maxVal: isNaN(maxVal) ? 0 : maxVal,\n avgVal: isNaN(avgVal) ? 0 : avgVal,\n projectCount: isNaN(projectCount) ? 0 : projectCount\n }\n })\n .filter(result => result.geoGroup !== null)\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiMonthlyTrend], { description: 'Get monthly KPI trend for Z-category KPIs by metro area' })\n async kpiZValueMonthlyTrendByGeoGroup(\n @Arg('kpiName', { nullable: true }) kpiName?: string,\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Arg('sectorType', { nullable: true }) sectorType?: string,\n @Arg('buildingUsage', { nullable: true }) buildingUsage?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiMonthlyTrend[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n `CASE\n WHEN p.geo_group IN ('01','02','03','04','05','06','07','08') THEN '서울특별시'\n WHEN p.geo_group IN ('46','47','48','49') THEN '부산광역시'\n WHEN p.geo_group IN ('41','42','43') THEN '대구광역시'\n WHEN p.geo_group IN ('21','22','23') THEN '인천광역시'\n WHEN p.geo_group IN ('61','62') THEN '광주광역시'\n WHEN p.geo_group IN ('34','35') THEN '대전광역시'\n WHEN p.geo_group IN ('44','45') THEN '울산광역시'\n WHEN p.geo_group = '30' THEN '세종특별자치시'\n WHEN p.geo_group IN ('10','11','12','13','14','15','16','17','18') THEN '경기도'\n WHEN p.geo_group IN ('24','25','26','33') THEN '강원도'\n WHEN p.geo_group IN ('27','28','29') THEN '충청북도'\n WHEN p.geo_group IN ('31','32') THEN '충청남도'\n WHEN p.geo_group IN ('54','55','56') THEN '전라북도'\n WHEN p.geo_group IN ('57','58','59') THEN '전라남도'\n WHEN p.geo_group IN ('36','37','38','39','40') THEN '경상북도'\n WHEN p.geo_group IN ('50','51','52','53') THEN '경상남도'\n WHEN p.geo_group = '63' THEN '제주특별자치도'\n END as geoGroup`,\n `TO_CHAR(p.end_date, 'YYYY-MM') as yearMonth`,\n 'AVG(kv.score) as avgVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('p.end_date IS NOT NULL')\n .andWhere('p.geo_group IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n // 기간 필터\n if (startYearMonth && startYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth && endYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n if (sectorType?.trim()) {\n queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType })\n }\n if (buildingUsage?.trim()) {\n queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage })\n }\n\n // KPI 필터: kpiName이 지정되면 해당 Y-level KPI만, 없으면 Z-level KPI 전체\n if (kpiName && kpiName.trim() !== '') {\n queryBuilder.andWhere('k.name = :kpiName', { kpiName })\n } else {\n queryBuilder.andWhere('k.name LIKE :pattern', { pattern: 'Z%' })\n }\n\n queryBuilder.groupBy('geoGroup, yearMonth').orderBy('yearMonth', 'ASC')\n\n const results = await queryBuilder.getRawMany()\n return results\n .map(result => {\n const avgVal = Math.min(Math.max(Number(result.avgval), 0), 1)\n const projectCount = Number(result.projectcount)\n\n return {\n geoGroup: result.geogroup || null,\n yearMonth: result.yearmonth,\n avgVal: isNaN(avgVal) ? 0 : avgVal,\n projectCount: isNaN(projectCount) ? 0 : projectCount\n }\n })\n .filter(result => result.geoGroup !== null)\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiProjectStat], { description: 'Get KPI stats aggregated from project data with optional sectorType/buildingUsage filters' })\n async kpiProjectStats(\n @Arg('sectorType', { nullable: true }) sectorType?: string,\n @Arg('buildingUsage', { nullable: true }) buildingUsage?: string,\n @Arg('kpiNamePattern', { nullable: true }) kpiNamePattern?: string,\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiProjectStat[]> {\n const { domain } = context.state\n\n const qb = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n 'k.name as kpiName',\n 'pk.name as categoryName',\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'MAX(kv.score) as maxVal',\n 'AVG(kv.score) as avgVal',\n 'STDDEV_POP(kv.score) as stddevVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .leftJoin('kpis', 'pk', 'k.parent_id = pk.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('p.end_date IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n if (sectorType?.trim()) {\n qb.andWhere('p.sector_type = :sectorType', { sectorType })\n }\n if (buildingUsage?.trim()) {\n qb.andWhere('p.building_usage = :buildingUsage', { buildingUsage })\n }\n if (kpiNamePattern?.trim()) {\n qb.andWhere('k.name LIKE :kpiNamePattern', { kpiNamePattern: `${kpiNamePattern}%` })\n }\n if (startYearMonth?.trim()) {\n qb.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth?.trim()) {\n qb.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n\n qb.groupBy('k.name, pk.name').orderBy('k.name', 'ASC')\n\n const results = await qb.getRawMany()\n const clamp = (v: number) => Math.min(Math.max(isNaN(v) ? 0 : v, 0), 1)\n return results.map(r => ({\n kpiName: r.kpiname,\n categoryName: r.categoryname || undefined,\n minVal: clamp(Number(r.minval)),\n q1Val: clamp(Number(r.q1val)),\n medVal: clamp(Number(r.medval)),\n q3Val: clamp(Number(r.q3val)),\n maxVal: clamp(Number(r.maxval)),\n avgVal: clamp(Number(r.avgval)),\n stddevVal: isNaN(Number(r.stddevval)) ? 0 : Math.max(0, Number(r.stddevval)),\n projectCount: isNaN(Number(r.projectcount)) ? 0 : Number(r.projectcount)\n }))\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiComprehensiveStatsByGeoGroup], {\n description: 'Get KPI statistics by sigungu (geo_group code) level'\n })\n async kpiZValueStatsBySigungu(\n @Arg('kpiName', { nullable: true }) kpiName?: string,\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Arg('sectorType', { nullable: true }) sectorType?: string,\n @Arg('buildingUsage', { nullable: true }) buildingUsage?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiComprehensiveStatsByGeoGroup[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n 'p.geo_group as geoGroup',\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'MAX(kv.score) as maxVal',\n 'AVG(kv.score) as avgVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('p.end_date IS NOT NULL')\n .andWhere('p.geo_group IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n if (startYearMonth?.trim()) {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth?.trim()) {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n if (sectorType?.trim()) {\n queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType })\n }\n if (buildingUsage?.trim()) {\n queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage })\n }\n\n if (kpiName?.trim()) {\n queryBuilder.andWhere('k.name = :kpiName', { kpiName })\n } else {\n queryBuilder.andWhere('k.name LIKE :pattern', { pattern: 'Z%' })\n }\n\n queryBuilder.groupBy('p.geo_group')\n\n const results = await queryBuilder.getRawMany()\n const clamp = (v: number) => Math.min(Math.max(isNaN(v) ? 0 : v, 0), 1)\n return results\n .map(r => ({\n kpiName: r.kpiname || undefined,\n geoGroup: r.geogroup || null,\n minVal: clamp(Number(r.minval)),\n q1Val: clamp(Number(r.q1val)),\n medVal: clamp(Number(r.medval)),\n q3Val: clamp(Number(r.q3val)),\n maxVal: clamp(Number(r.maxval)),\n avgVal: clamp(Number(r.avgval)),\n projectCount: isNaN(Number(r.projectcount)) ? 0 : Number(r.projectcount)\n }))\n .filter(r => r.geoGroup !== null)\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiComprehensiveStats], { description: 'Get Y-level KPI statistics by geo_group code (sigungu)' })\n async kpiYValueStatsByGeoGroup(\n @Arg('geoGroup') geoGroup: string,\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiComprehensiveStats[]> {\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n 'k.name as kpiName',\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'MAX(kv.score) as maxVal',\n 'AVG(kv.score) as avgVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('k.name LIKE :pattern', { pattern: 'Y%' })\n .andWhere('p.end_date IS NOT NULL')\n .andWhere('p.geo_group = :geoGroup', { geoGroup })\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n if (startYearMonth?.trim()) {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth?.trim()) {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n\n queryBuilder.groupBy('k.name').orderBy('k.name', 'ASC')\n\n const results = await queryBuilder.getRawMany()\n const clamp = (v: number) => Math.min(Math.max(isNaN(v) ? 0 : v, 0), 1)\n return results.map(r => ({\n kpiName: r.kpiname,\n minVal: clamp(Number(r.minval)),\n q1Val: clamp(Number(r.q1val)),\n medVal: clamp(Number(r.medval)),\n q3Val: clamp(Number(r.q3val)),\n maxVal: clamp(Number(r.maxval)),\n avgVal: clamp(Number(r.avgval)),\n projectCount: isNaN(Number(r.projectcount)) ? 0 : Number(r.projectcount)\n }))\n }\n\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(() => [KpiComprehensiveStats], { description: 'Get KPI statistics for Y-category KPIs by specific metro area' })\n async kpiYValueStatsByMetroArea(\n @Arg('metroArea') metroArea: string,\n @Arg('startYearMonth', { nullable: true }) startYearMonth?: string,\n @Arg('endYearMonth', { nullable: true }) endYearMonth?: string,\n @Ctx() context?: ResolverContext\n ): Promise<KpiComprehensiveStats[]> {\n if (!context || !context.state) {\n console.error('Context is undefined or missing state')\n return []\n }\n\n const { domain } = context.state\n\n const queryBuilder = getRepository('kpi_values')\n .createQueryBuilder('kv')\n .select([\n 'k.name as kpiName',\n 'MIN(kv.score) as minVal',\n 'PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY kv.score) as q1Val',\n 'PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kv.score) as medVal',\n 'PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY kv.score) as q3Val',\n 'MAX(kv.score) as maxVal',\n 'AVG(kv.score) as avgVal',\n 'COUNT(DISTINCT p.id) as projectCount'\n ])\n .innerJoin('kpis', 'k', 'kv.kpi_id = k.id')\n .innerJoin('projects', 'p', 'kv.kpi_org_scope_id = p.id')\n .where('k.name LIKE :pattern', { pattern: 'Y%' })\n .andWhere('p.end_date IS NOT NULL')\n .andWhere('p.geo_group IS NOT NULL')\n .andWhere('kv.domain_id = :domainId', { domainId: domain.id })\n\n // 기간 필터\n if (startYearMonth && startYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') >= :startYearMonth`, { startYearMonth })\n }\n if (endYearMonth && endYearMonth.trim() !== '') {\n queryBuilder.andWhere(`TO_CHAR(p.end_date, 'YYYY-MM') <= :endYearMonth`, { endYearMonth })\n }\n\n queryBuilder\n .andWhere(\n `CASE\n WHEN p.geo_group IN ('01','02','03','04','05','06','07','08') THEN '서울특별시'\n WHEN p.geo_group IN ('46','47','48','49') THEN '부산광역시'\n WHEN p.geo_group IN ('41','42','43') THEN '대구광역시'\n WHEN p.geo_group IN ('21','22','23') THEN '인천광역시'\n WHEN p.geo_group IN ('61','62') THEN '광주광역시'\n WHEN p.geo_group IN ('34','35') THEN '대전광역시'\n WHEN p.geo_group IN ('44','45') THEN '울산광역시'\n WHEN p.geo_group = '30' THEN '세종특별자치시'\n WHEN p.geo_group IN ('10','11','12','13','14','15','16','17','18') THEN '경기도'\n WHEN p.geo_group IN ('24','25','26','33') THEN '강원도'\n WHEN p.geo_group IN ('27','28','29') THEN '충청북도'\n WHEN p.geo_group IN ('31','32') THEN '충청남도'\n WHEN p.geo_group IN ('54','55','56') THEN '전라북도'\n WHEN p.geo_group IN ('57','58','59') THEN '전라남도'\n WHEN p.geo_group IN ('36','37','38','39','40') THEN '경상북도'\n WHEN p.geo_group IN ('50','51','52','53') THEN '경상남도'\n WHEN p.geo_group = '63' THEN '제주특별자치도'\n END = :metroArea`,\n { metroArea }\n )\n .groupBy('k.name')\n .orderBy('k.name', 'ASC')\n\n const results = await queryBuilder.getRawMany()\n\n return results.map(result => {\n const kpiName = result.kpiname\n const minVal = Math.min(Math.max(Number(result.minval), 0), 1)\n const q1Val = Math.min(Math.max(Number(result.q1val), 0), 1)\n const medVal = Math.min(Math.max(Number(result.medval), 0), 1)\n const q3Val = Math.min(Math.max(Number(result.q3val), 0), 1)\n const avgVal = Math.min(Math.max(Number(result.avgval), 0), 1)\n const maxVal = Math.min(Math.max(Number(result.maxval), 0), 1)\n const projectCount = Number(result.projectcount)\n\n return {\n kpiName: kpiName,\n minVal: isNaN(minVal) ? 0 : minVal,\n q1Val: isNaN(q1Val) ? 0 : q1Val,\n medVal: isNaN(medVal) ? 0 : medVal,\n q3Val: isNaN(q3Val) ? 0 : q3Val,\n maxVal: isNaN(maxVal) ? 0 : maxVal,\n avgVal: isNaN(avgVal) ? 0 : avgVal,\n projectCount: isNaN(projectCount) ? 0 : projectCount\n }\n })\n }\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare class KpiComprehensiveStats {
|
|
2
|
+
kpiName: string;
|
|
3
|
+
minVal: number;
|
|
4
|
+
q1Val: number;
|
|
5
|
+
medVal: number;
|
|
6
|
+
q3Val: number;
|
|
7
|
+
maxVal: number;
|
|
8
|
+
avgVal: number;
|
|
9
|
+
projectCount: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class KpiComprehensiveStatsByGeoGroup extends KpiComprehensiveStats {
|
|
12
|
+
geoGroup?: string;
|
|
13
|
+
address?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class KpiMonthlyTrend {
|
|
16
|
+
geoGroup?: string;
|
|
17
|
+
yearMonth: string;
|
|
18
|
+
avgVal: number;
|
|
19
|
+
projectCount: number;
|
|
20
|
+
}
|
|
21
|
+
export declare class KpiProjectStat {
|
|
22
|
+
kpiName: string;
|
|
23
|
+
categoryName?: string;
|
|
24
|
+
minVal: number;
|
|
25
|
+
q1Val: number;
|
|
26
|
+
medVal: number;
|
|
27
|
+
q3Val: number;
|
|
28
|
+
maxVal: number;
|
|
29
|
+
avgVal: number;
|
|
30
|
+
stddevVal: number;
|
|
31
|
+
projectCount: number;
|
|
32
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KpiProjectStat = exports.KpiMonthlyTrend = exports.KpiComprehensiveStatsByGeoGroup = exports.KpiComprehensiveStats = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const type_graphql_1 = require("type-graphql");
|
|
6
|
+
// @ObjectType()
|
|
7
|
+
// export class KpiBoxPlotStats {
|
|
8
|
+
// @Field({ nullable: true })
|
|
9
|
+
// kpiName?: string
|
|
10
|
+
// @Field(() => Float)
|
|
11
|
+
// minVal: number
|
|
12
|
+
// @Field(() => Float)
|
|
13
|
+
// q1Val: number
|
|
14
|
+
// @Field(() => Float)
|
|
15
|
+
// medVal: number
|
|
16
|
+
// @Field(() => Float)
|
|
17
|
+
// q3Val: number
|
|
18
|
+
// @Field(() => Float)
|
|
19
|
+
// maxVal: number
|
|
20
|
+
// }
|
|
21
|
+
// @ObjectType()
|
|
22
|
+
// export class KpiBoxPlotStatsByGeoGroup extends KpiBoxPlotStats {
|
|
23
|
+
// @Field({ nullable: true })
|
|
24
|
+
// geoGroup: string
|
|
25
|
+
// // @Field({ nullable: true })
|
|
26
|
+
// // kpiName?: string
|
|
27
|
+
// // @Field(() => Float)
|
|
28
|
+
// // minVal: number
|
|
29
|
+
// // @Field(() => Float)
|
|
30
|
+
// // q1Val: number
|
|
31
|
+
// // @Field(() => Float)
|
|
32
|
+
// // medVal: number
|
|
33
|
+
// // @Field(() => Float)
|
|
34
|
+
// // q3Val: number
|
|
35
|
+
// // @Field(() => Float)
|
|
36
|
+
// // maxVal: number
|
|
37
|
+
// }
|
|
38
|
+
// @ObjectType()
|
|
39
|
+
// export class KpiRadarStats {
|
|
40
|
+
// @Field({ nullable: true })
|
|
41
|
+
// geoGroup: string
|
|
42
|
+
// @Field()
|
|
43
|
+
// kpiName: string
|
|
44
|
+
// @Field(() => Float)
|
|
45
|
+
// avgScore: number
|
|
46
|
+
// @Field(() => Int)
|
|
47
|
+
// projectCount: number
|
|
48
|
+
// }
|
|
49
|
+
// @ObjectType()
|
|
50
|
+
// export class KpiRadarStatsByGeoGroup extends KpiRadarStats {
|
|
51
|
+
// @Field({ nullable: true })
|
|
52
|
+
// geoGroup: string
|
|
53
|
+
// // @Field()
|
|
54
|
+
// // kpiName: string
|
|
55
|
+
// // @Field(() => Float)
|
|
56
|
+
// // avgScore: number
|
|
57
|
+
// // @Field(() => Int)
|
|
58
|
+
// // projectCount: number
|
|
59
|
+
// }
|
|
60
|
+
let KpiComprehensiveStats = class KpiComprehensiveStats {
|
|
61
|
+
};
|
|
62
|
+
exports.KpiComprehensiveStats = KpiComprehensiveStats;
|
|
63
|
+
tslib_1.__decorate([
|
|
64
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
65
|
+
tslib_1.__metadata("design:type", String)
|
|
66
|
+
], KpiComprehensiveStats.prototype, "kpiName", void 0);
|
|
67
|
+
tslib_1.__decorate([
|
|
68
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
69
|
+
tslib_1.__metadata("design:type", Number)
|
|
70
|
+
], KpiComprehensiveStats.prototype, "minVal", void 0);
|
|
71
|
+
tslib_1.__decorate([
|
|
72
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
73
|
+
tslib_1.__metadata("design:type", Number)
|
|
74
|
+
], KpiComprehensiveStats.prototype, "q1Val", void 0);
|
|
75
|
+
tslib_1.__decorate([
|
|
76
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
77
|
+
tslib_1.__metadata("design:type", Number)
|
|
78
|
+
], KpiComprehensiveStats.prototype, "medVal", void 0);
|
|
79
|
+
tslib_1.__decorate([
|
|
80
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
81
|
+
tslib_1.__metadata("design:type", Number)
|
|
82
|
+
], KpiComprehensiveStats.prototype, "q3Val", void 0);
|
|
83
|
+
tslib_1.__decorate([
|
|
84
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
85
|
+
tslib_1.__metadata("design:type", Number)
|
|
86
|
+
], KpiComprehensiveStats.prototype, "maxVal", void 0);
|
|
87
|
+
tslib_1.__decorate([
|
|
88
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
89
|
+
tslib_1.__metadata("design:type", Number)
|
|
90
|
+
], KpiComprehensiveStats.prototype, "avgVal", void 0);
|
|
91
|
+
tslib_1.__decorate([
|
|
92
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Int),
|
|
93
|
+
tslib_1.__metadata("design:type", Number)
|
|
94
|
+
], KpiComprehensiveStats.prototype, "projectCount", void 0);
|
|
95
|
+
exports.KpiComprehensiveStats = KpiComprehensiveStats = tslib_1.__decorate([
|
|
96
|
+
(0, type_graphql_1.ObjectType)()
|
|
97
|
+
], KpiComprehensiveStats);
|
|
98
|
+
let KpiComprehensiveStatsByGeoGroup = class KpiComprehensiveStatsByGeoGroup extends KpiComprehensiveStats {
|
|
99
|
+
};
|
|
100
|
+
exports.KpiComprehensiveStatsByGeoGroup = KpiComprehensiveStatsByGeoGroup;
|
|
101
|
+
tslib_1.__decorate([
|
|
102
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
103
|
+
tslib_1.__metadata("design:type", String)
|
|
104
|
+
], KpiComprehensiveStatsByGeoGroup.prototype, "geoGroup", void 0);
|
|
105
|
+
tslib_1.__decorate([
|
|
106
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
107
|
+
tslib_1.__metadata("design:type", String)
|
|
108
|
+
], KpiComprehensiveStatsByGeoGroup.prototype, "address", void 0);
|
|
109
|
+
exports.KpiComprehensiveStatsByGeoGroup = KpiComprehensiveStatsByGeoGroup = tslib_1.__decorate([
|
|
110
|
+
(0, type_graphql_1.ObjectType)()
|
|
111
|
+
], KpiComprehensiveStatsByGeoGroup);
|
|
112
|
+
let KpiMonthlyTrend = class KpiMonthlyTrend {
|
|
113
|
+
};
|
|
114
|
+
exports.KpiMonthlyTrend = KpiMonthlyTrend;
|
|
115
|
+
tslib_1.__decorate([
|
|
116
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
117
|
+
tslib_1.__metadata("design:type", String)
|
|
118
|
+
], KpiMonthlyTrend.prototype, "geoGroup", void 0);
|
|
119
|
+
tslib_1.__decorate([
|
|
120
|
+
(0, type_graphql_1.Field)(),
|
|
121
|
+
tslib_1.__metadata("design:type", String)
|
|
122
|
+
], KpiMonthlyTrend.prototype, "yearMonth", void 0);
|
|
123
|
+
tslib_1.__decorate([
|
|
124
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
125
|
+
tslib_1.__metadata("design:type", Number)
|
|
126
|
+
], KpiMonthlyTrend.prototype, "avgVal", void 0);
|
|
127
|
+
tslib_1.__decorate([
|
|
128
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Int),
|
|
129
|
+
tslib_1.__metadata("design:type", Number)
|
|
130
|
+
], KpiMonthlyTrend.prototype, "projectCount", void 0);
|
|
131
|
+
exports.KpiMonthlyTrend = KpiMonthlyTrend = tslib_1.__decorate([
|
|
132
|
+
(0, type_graphql_1.ObjectType)()
|
|
133
|
+
], KpiMonthlyTrend);
|
|
134
|
+
let KpiProjectStat = class KpiProjectStat {
|
|
135
|
+
};
|
|
136
|
+
exports.KpiProjectStat = KpiProjectStat;
|
|
137
|
+
tslib_1.__decorate([
|
|
138
|
+
(0, type_graphql_1.Field)(),
|
|
139
|
+
tslib_1.__metadata("design:type", String)
|
|
140
|
+
], KpiProjectStat.prototype, "kpiName", void 0);
|
|
141
|
+
tslib_1.__decorate([
|
|
142
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
143
|
+
tslib_1.__metadata("design:type", String)
|
|
144
|
+
], KpiProjectStat.prototype, "categoryName", void 0);
|
|
145
|
+
tslib_1.__decorate([
|
|
146
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
147
|
+
tslib_1.__metadata("design:type", Number)
|
|
148
|
+
], KpiProjectStat.prototype, "minVal", void 0);
|
|
149
|
+
tslib_1.__decorate([
|
|
150
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
151
|
+
tslib_1.__metadata("design:type", Number)
|
|
152
|
+
], KpiProjectStat.prototype, "q1Val", void 0);
|
|
153
|
+
tslib_1.__decorate([
|
|
154
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
155
|
+
tslib_1.__metadata("design:type", Number)
|
|
156
|
+
], KpiProjectStat.prototype, "medVal", void 0);
|
|
157
|
+
tslib_1.__decorate([
|
|
158
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
159
|
+
tslib_1.__metadata("design:type", Number)
|
|
160
|
+
], KpiProjectStat.prototype, "q3Val", void 0);
|
|
161
|
+
tslib_1.__decorate([
|
|
162
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
163
|
+
tslib_1.__metadata("design:type", Number)
|
|
164
|
+
], KpiProjectStat.prototype, "maxVal", void 0);
|
|
165
|
+
tslib_1.__decorate([
|
|
166
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
167
|
+
tslib_1.__metadata("design:type", Number)
|
|
168
|
+
], KpiProjectStat.prototype, "avgVal", void 0);
|
|
169
|
+
tslib_1.__decorate([
|
|
170
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Float),
|
|
171
|
+
tslib_1.__metadata("design:type", Number)
|
|
172
|
+
], KpiProjectStat.prototype, "stddevVal", void 0);
|
|
173
|
+
tslib_1.__decorate([
|
|
174
|
+
(0, type_graphql_1.Field)(() => type_graphql_1.Int),
|
|
175
|
+
tslib_1.__metadata("design:type", Number)
|
|
176
|
+
], KpiProjectStat.prototype, "projectCount", void 0);
|
|
177
|
+
exports.KpiProjectStat = KpiProjectStat = tslib_1.__decorate([
|
|
178
|
+
(0, type_graphql_1.ObjectType)()
|
|
179
|
+
], KpiProjectStat);
|
|
180
|
+
//# sourceMappingURL=kpi-stat-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-stat-types.js","sourceRoot":"","sources":["../../../server/service/kpi-stat/kpi-stat-types.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObjectType, Field, Float, Int } from 'type-graphql'\n\n// @ObjectType()\n// export class KpiBoxPlotStats {\n// @Field({ nullable: true })\n// kpiName?: string\n\n// @Field(() => Float)\n// minVal: number\n\n// @Field(() => Float)\n// q1Val: number\n\n// @Field(() => Float)\n// medVal: number\n\n// @Field(() => Float)\n// q3Val: number\n\n// @Field(() => Float)\n// maxVal: number\n// }\n\n// @ObjectType()\n// export class KpiBoxPlotStatsByGeoGroup extends KpiBoxPlotStats {\n// @Field({ nullable: true })\n// geoGroup: string\n\n// // @Field({ nullable: true })\n// // kpiName?: string\n\n// // @Field(() => Float)\n// // minVal: number\n\n// // @Field(() => Float)\n// // q1Val: number\n\n// // @Field(() => Float)\n// // medVal: number\n\n// // @Field(() => Float)\n// // q3Val: number\n\n// // @Field(() => Float)\n// // maxVal: number\n// }\n\n// @ObjectType()\n// export class KpiRadarStats {\n// @Field({ nullable: true })\n// geoGroup: string\n\n// @Field()\n// kpiName: string\n\n// @Field(() => Float)\n// avgScore: number\n\n// @Field(() => Int)\n// projectCount: number\n// }\n\n// @ObjectType()\n// export class KpiRadarStatsByGeoGroup extends KpiRadarStats {\n// @Field({ nullable: true })\n// geoGroup: string\n\n// // @Field()\n// // kpiName: string\n\n// // @Field(() => Float)\n// // avgScore: number\n\n// // @Field(() => Int)\n// // projectCount: number\n// }\n\n@ObjectType()\nexport class KpiComprehensiveStats {\n @Field({ nullable: true })\n kpiName: string\n\n @Field(() => Float)\n minVal: number\n\n @Field(() => Float)\n q1Val: number\n\n @Field(() => Float)\n medVal: number\n\n @Field(() => Float)\n q3Val: number\n\n @Field(() => Float)\n maxVal: number\n\n @Field(() => Float)\n avgVal: number\n\n @Field(() => Int)\n projectCount: number\n}\n\n@ObjectType()\nexport class KpiComprehensiveStatsByGeoGroup extends KpiComprehensiveStats {\n @Field({ nullable: true })\n geoGroup?: string\n\n @Field({ nullable: true })\n address?: string\n}\n\n@ObjectType()\nexport class KpiMonthlyTrend {\n @Field({ nullable: true })\n geoGroup?: string\n\n @Field()\n yearMonth: string\n\n @Field(() => Float)\n avgVal: number\n\n @Field(() => Int)\n projectCount: number\n}\n\n@ObjectType()\nexport class KpiProjectStat {\n @Field()\n kpiName: string\n\n @Field({ nullable: true })\n categoryName?: string\n\n @Field(() => Float)\n minVal: number\n\n @Field(() => Float)\n q1Val: number\n\n @Field(() => Float)\n medVal: number\n\n @Field(() => Float)\n q3Val: number\n\n @Field(() => Float)\n maxVal: number\n\n @Field(() => Float)\n avgVal: number\n\n @Field(() => Float)\n stddevVal: number\n\n @Field(() => Int)\n projectCount: number\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subscribers = exports.resolvers = void 0;
|
|
4
|
+
const kpi_value_query_1 = require("./kpi-value-query");
|
|
5
|
+
exports.resolvers = [kpi_value_query_1.KpiValueQueryForProject];
|
|
6
|
+
exports.subscribers = [];
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/kpi-value/index.ts"],"names":[],"mappings":";;;AAAA,uDAA2D;AAE9C,QAAA,SAAS,GAAG,CAAC,yCAAuB,CAAC,CAAA;AACrC,QAAA,WAAW,GAAG,EAAE,CAAA","sourcesContent":["import { KpiValueQueryForProject } from './kpi-value-query'\n\nexport const resolvers = [KpiValueQueryForProject]\nexport const subscribers = []\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ListParam } from '@things-factory/shell';
|
|
2
|
+
import { KpiValue, KpiValueList } from '@things-factory/kpi';
|
|
3
|
+
import { Project } from '@dssp/project/dist-server/service/project/project';
|
|
4
|
+
export declare class KpiValueQueryForProject {
|
|
5
|
+
kpiValues(params: ListParam, context: ResolverContext): Promise<KpiValueList>;
|
|
6
|
+
projectXKpiValues(projectId: string, context: ResolverContext): Promise<KpiValue[]>;
|
|
7
|
+
project(kpiValue: KpiValue): Promise<Project | null>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KpiValueQueryForProject = 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 kpi_1 = require("@things-factory/kpi");
|
|
8
|
+
const project_1 = require("@dssp/project/dist-server/service/project/project");
|
|
9
|
+
let KpiValueQueryForProject = class KpiValueQueryForProject {
|
|
10
|
+
async kpiValues(params, context) {
|
|
11
|
+
const { domain } = context.state;
|
|
12
|
+
const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
|
|
13
|
+
domain,
|
|
14
|
+
params,
|
|
15
|
+
repository: await (0, shell_1.getRepository)(kpi_1.KpiValue),
|
|
16
|
+
searchables: ['kpi', 'group', 'valueDate']
|
|
17
|
+
});
|
|
18
|
+
const [items, total] = await queryBuilder.getManyAndCount();
|
|
19
|
+
return { items, total };
|
|
20
|
+
}
|
|
21
|
+
async projectXKpiValues(projectId, context) {
|
|
22
|
+
const { domain } = context.state;
|
|
23
|
+
const repository = await (0, shell_1.getRepository)(kpi_1.KpiValue);
|
|
24
|
+
const kpiValues = await repository
|
|
25
|
+
.createQueryBuilder('kpiValue')
|
|
26
|
+
.leftJoinAndSelect('kpiValue.kpi', 'kpi')
|
|
27
|
+
.where('kpiValue.domain = :domain', { domain: domain.id })
|
|
28
|
+
.andWhere('kpiValue.group = :projectId', { projectId })
|
|
29
|
+
.andWhere('kpi.name LIKE :namePrefix', { namePrefix: 'X%' })
|
|
30
|
+
.orderBy('kpi.name', 'ASC')
|
|
31
|
+
.getMany();
|
|
32
|
+
return kpiValues;
|
|
33
|
+
}
|
|
34
|
+
async project(kpiValue) {
|
|
35
|
+
if (!kpiValue.group)
|
|
36
|
+
return null;
|
|
37
|
+
return await (0, shell_1.getRepository)(project_1.Project).findOneBy({ id: kpiValue.group });
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.KpiValueQueryForProject = KpiValueQueryForProject;
|
|
41
|
+
tslib_1.__decorate([
|
|
42
|
+
(0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
|
|
43
|
+
(0, type_graphql_1.Query)(returns => kpi_1.KpiValueList, { description: 'To fetch multiple KpiValues' }),
|
|
44
|
+
tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
|
|
45
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
46
|
+
tslib_1.__metadata("design:type", Function),
|
|
47
|
+
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
|
|
48
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
49
|
+
], KpiValueQueryForProject.prototype, "kpiValues", null);
|
|
50
|
+
tslib_1.__decorate([
|
|
51
|
+
(0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
|
|
52
|
+
(0, type_graphql_1.Query)(returns => [kpi_1.KpiValue], { description: 'To fetch KpiValues by project group with X prefix kpi names' }),
|
|
53
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId', type => String)),
|
|
54
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
55
|
+
tslib_1.__metadata("design:type", Function),
|
|
56
|
+
tslib_1.__metadata("design:paramtypes", [String, Object]),
|
|
57
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
58
|
+
], KpiValueQueryForProject.prototype, "projectXKpiValues", null);
|
|
59
|
+
tslib_1.__decorate([
|
|
60
|
+
(0, type_graphql_1.FieldResolver)(type => project_1.Project),
|
|
61
|
+
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
62
|
+
tslib_1.__metadata("design:type", Function),
|
|
63
|
+
tslib_1.__metadata("design:paramtypes", [kpi_1.KpiValue]),
|
|
64
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
65
|
+
], KpiValueQueryForProject.prototype, "project", null);
|
|
66
|
+
exports.KpiValueQueryForProject = KpiValueQueryForProject = tslib_1.__decorate([
|
|
67
|
+
(0, type_graphql_1.Resolver)(kpi_1.KpiValue)
|
|
68
|
+
], KpiValueQueryForProject);
|
|
69
|
+
//# sourceMappingURL=kpi-value-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-value-query.js","sourceRoot":"","sources":["../../../server/service/kpi-value/kpi-value-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAqG;AACrG,iDAAuG;AAEvG,6CAAiE;AACjE,+EAA2E;AAGpE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAG5B,AAAN,KAAK,CAAC,SAAS,CAA0B,MAAiB,EAAS,OAAwB;QACzF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,cAAQ,CAAC;YACzC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC;SAC3C,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAIK,AAAN,KAAK,CAAC,iBAAiB,CACa,SAAiB,EAC5C,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,cAAQ,CAAC,CAAA;QAEhD,MAAM,SAAS,GAAG,MAAM,UAAU;aAC/B,kBAAkB,CAAC,UAAU,CAAC;aAC9B,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC;aACxC,KAAK,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;aACzD,QAAQ,CAAC,6BAA6B,EAAE,EAAE,SAAS,EAAE,CAAC;aACtD,QAAQ,CAAC,2BAA2B,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;aAC3D,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;aAC1B,OAAO,EAAE,CAAA;QAEZ,OAAO,SAAS,CAAA;IAClB,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,QAAkB;QACtC,IAAI,CAAC,QAAQ,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QAChC,OAAO,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACvE,CAAC;CACF,CAAA;AA7CY,0DAAuB;AAG5B;IAFL,IAAA,wBAAS,EAAC,mGAAmG,CAAC;IAC9G,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,kBAAY,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAC9D,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;wDAazD;AAIK;IAFL,IAAA,wBAAS,EAAC,mGAAmG,CAAC;IAC9G,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,cAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,6DAA6D,EAAE,CAAC;IAE1G,mBAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;IAChC,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;gEAgBP;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAO,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAW,cAAQ;;sDAGvC;kCA5CU,uBAAuB;IADnC,IAAA,uBAAQ,EAAC,cAAQ,CAAC;GACN,uBAAuB,CA6CnC","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive, Float } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Kpi, KpiValue, KpiValueList } from '@things-factory/kpi'\nimport { Project } from '@dssp/project/dist-server/service/project/project'\n\n@Resolver(KpiValue)\nexport class KpiValueQueryForProject {\n @Directive('@privilege(category: \"kpi\", privilege: \"query\", domainOwnerGranted: true, superUserGranted: true)')\n @Query(returns => KpiValueList, { description: 'To fetch multiple KpiValues' })\n async kpiValues(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<KpiValueList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiValue),\n searchables: ['kpi', 'group', 'valueDate']\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 => [KpiValue], { description: 'To fetch KpiValues by project group with X prefix kpi names' })\n async projectXKpiValues(\n @Arg('projectId', type => String) projectId: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiValue[]> {\n const { domain } = context.state\n\n const repository = await getRepository(KpiValue)\n\n const kpiValues = await repository\n .createQueryBuilder('kpiValue')\n .leftJoinAndSelect('kpiValue.kpi', 'kpi')\n .where('kpiValue.domain = :domain', { domain: domain.id })\n .andWhere('kpiValue.group = :projectId', { projectId })\n .andWhere('kpi.name LIKE :namePrefix', { namePrefix: 'X%' })\n .orderBy('kpi.name', 'ASC')\n .getMany()\n\n return kpiValues\n }\n\n @FieldResolver(type => Project)\n async project(@Root() kpiValue: KpiValue): Promise<Project | null> {\n if (!kpiValue.group) return null\n return await getRepository(Project).findOneBy({ id: kpiValue.group })\n }\n}\n"]}
|