@things-factory/kpi 9.0.23 → 9.0.25
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/client/pages/kpi/kpi-viz-editor.ts +1 -1
- package/client/pages/kpi-category-value/kpi-category-value-list-page.ts +404 -0
- package/client/pages/kpi-metric-value/kpi-metric-value-editor-page.ts +763 -0
- package/client/pages/kpi-metric-value/kpi-metric-value-list-page.ts +12 -0
- package/client/pages/kpi-value/kpi-value-editor-page.ts +774 -0
- package/client/pages/kpi-value/kpi-value-list-page.ts +13 -0
- package/client/route.ts +16 -0
- package/dist-client/pages/kpi/kpi-viz-editor.d.ts +0 -1
- package/dist-client/pages/kpi/kpi-viz-editor.js +1 -1
- package/dist-client/pages/kpi/kpi-viz-editor.js.map +1 -1
- package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.d.ts +63 -0
- package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.js +393 -0
- package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +58 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +736 -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-list-page.d.ts +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +11 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -1
- package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +55 -0
- package/dist-client/pages/kpi-value/kpi-value-editor-page.js +748 -0
- package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +1 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +9 -2
- package/dist-client/pages/kpi-value/kpi-value-list-page.js +12 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +12 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/index.d.ts +4 -2
- package/dist-server/service/index.js +5 -0
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/kpi-category/kpi-category-mutation.d.ts +2 -3
- package/dist-server/service/kpi-category/kpi-category-mutation.js +149 -78
- package/dist-server/service/kpi-category/kpi-category-mutation.js.map +1 -1
- package/dist-server/service/kpi-category/kpi-category-query.d.ts +1 -9
- package/dist-server/service/kpi-category/kpi-category-query.js +3 -165
- package/dist-server/service/kpi-category/kpi-category-query.js.map +1 -1
- package/dist-server/service/kpi-category-value/index.d.ts +6 -0
- package/dist-server/service/kpi-category-value/index.js +10 -0
- package/dist-server/service/kpi-category-value/index.js.map +1 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-mutation.d.ts +8 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-mutation.js +102 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-mutation.js.map +1 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-query.d.ts +13 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-query.js +91 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-query.js.map +1 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-type.d.ts +19 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-type.js +73 -0
- package/dist-server/service/kpi-category-value/kpi-category-value-type.js.map +1 -0
- package/dist-server/service/kpi-category-value/kpi-category-value.d.ts +19 -0
- package/dist-server/service/kpi-category-value/kpi-category-value.js +91 -0
- package/dist-server/service/kpi-category-value/kpi-category-value.js.map +1 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +20 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -1
- package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +1 -0
- package/dist-server/service/kpi-value/kpi-value-mutation.js +60 -0
- package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/server/service/index.ts +5 -0
- package/server/service/kpi-category/kpi-category-mutation.ts +154 -81
- package/server/service/kpi-category/kpi-category-query.ts +1 -155
- package/server/service/kpi-category-value/index.ts +7 -0
- package/server/service/kpi-category-value/kpi-category-value-mutation.ts +88 -0
- package/server/service/kpi-category-value/kpi-category-value-query.ts +62 -0
- package/server/service/kpi-category-value/kpi-category-value-type.ts +48 -0
- package/server/service/kpi-category-value/kpi-category-value.ts +79 -0
- package/server/service/kpi-metric-value/kpi-metric-value-mutation.ts +28 -0
- package/server/service/kpi-value/kpi-value-mutation.ts +66 -0
- package/things-factory.config.js +3 -0
- package/translations/en.json +3 -0
- package/translations/ja.json +3 -0
- package/translations/ko.json +3 -0
- package/translations/ms.json +3 -0
- package/translations/zh.json +3 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KpiCategoryQuery = void 0;
|
|
3
|
+
exports.KpiCategoryQuery = exports.KpiCategoryValueResult = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const type_graphql_1 = require("type-graphql");
|
|
6
6
|
const shell_1 = require("@things-factory/shell");
|
|
@@ -8,33 +8,9 @@ const auth_base_1 = require("@things-factory/auth-base");
|
|
|
8
8
|
const kpi_category_1 = require("./kpi-category");
|
|
9
9
|
const kpi_category_type_1 = require("./kpi-category-type");
|
|
10
10
|
const kpi_1 = require("../kpi/kpi");
|
|
11
|
-
const kpi_value_1 = require("../kpi-value/kpi-value");
|
|
12
|
-
const parser_1 = require("../../calculator/parser");
|
|
13
|
-
const evaluator_1 = require("../../calculator/evaluator");
|
|
14
|
-
const functions_1 = require("../../calculator/functions");
|
|
15
|
-
const kpi_value_provider_1 = require("../../controllers/kpi-value-provider");
|
|
16
|
-
const value_date_util_1 = require("../utils/value-date-util");
|
|
17
|
-
const kpi_2 = require("../kpi/kpi");
|
|
18
|
-
const kpi_value_score_service_1 = require("../kpi-value/kpi-value-score.service");
|
|
19
|
-
let KpiValueItem = class KpiValueItem {
|
|
20
|
-
};
|
|
21
|
-
tslib_1.__decorate([
|
|
22
|
-
(0, type_graphql_1.Field)(),
|
|
23
|
-
tslib_1.__metadata("design:type", String)
|
|
24
|
-
], KpiValueItem.prototype, "kpiId", void 0);
|
|
25
|
-
tslib_1.__decorate([
|
|
26
|
-
(0, type_graphql_1.Field)(type => type_graphql_1.Float, { nullable: true }),
|
|
27
|
-
tslib_1.__metadata("design:type", Number)
|
|
28
|
-
], KpiValueItem.prototype, "value", void 0);
|
|
29
|
-
KpiValueItem = tslib_1.__decorate([
|
|
30
|
-
(0, type_graphql_1.ObjectType)()
|
|
31
|
-
], KpiValueItem);
|
|
32
11
|
let KpiCategoryValueResult = class KpiCategoryValueResult {
|
|
33
12
|
};
|
|
34
|
-
|
|
35
|
-
(0, type_graphql_1.Field)(type => type_graphql_1.Float, { nullable: true }),
|
|
36
|
-
tslib_1.__metadata("design:type", Number)
|
|
37
|
-
], KpiCategoryValueResult.prototype, "value", void 0);
|
|
13
|
+
exports.KpiCategoryValueResult = KpiCategoryValueResult;
|
|
38
14
|
tslib_1.__decorate([
|
|
39
15
|
(0, type_graphql_1.Field)(type => type_graphql_1.Float, { nullable: true, description: 'Performance score for this category (0-1 range)' }),
|
|
40
16
|
tslib_1.__metadata("design:type", Number)
|
|
@@ -47,11 +23,7 @@ tslib_1.__decorate([
|
|
|
47
23
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
48
24
|
tslib_1.__metadata("design:type", String)
|
|
49
25
|
], KpiCategoryValueResult.prototype, "group", void 0);
|
|
50
|
-
tslib_1.__decorate([
|
|
51
|
-
(0, type_graphql_1.Field)(type => [KpiValueItem]),
|
|
52
|
-
tslib_1.__metadata("design:type", Array)
|
|
53
|
-
], KpiCategoryValueResult.prototype, "kpiValues", void 0);
|
|
54
|
-
KpiCategoryValueResult = tslib_1.__decorate([
|
|
26
|
+
exports.KpiCategoryValueResult = KpiCategoryValueResult = tslib_1.__decorate([
|
|
55
27
|
(0, type_graphql_1.ObjectType)()
|
|
56
28
|
], KpiCategoryValueResult);
|
|
57
29
|
let KpiCategoryQuery = class KpiCategoryQuery {
|
|
@@ -72,130 +44,6 @@ let KpiCategoryQuery = class KpiCategoryQuery {
|
|
|
72
44
|
const [items, total] = await queryBuilder.getManyAndCount();
|
|
73
45
|
return { items, total };
|
|
74
46
|
}
|
|
75
|
-
async calculateKpiValue(categoryId, valueDate, group, context) {
|
|
76
|
-
const { domain, tx } = context.state;
|
|
77
|
-
// 1. 카테고리 정보 조회 (formula 포함)
|
|
78
|
-
const category = await (0, shell_1.getRepository)(kpi_category_1.KpiCategory).findOne({
|
|
79
|
-
where: { domain: { id: domain.id }, id: categoryId }
|
|
80
|
-
});
|
|
81
|
-
if (!category)
|
|
82
|
-
return { value: null, score: null, kpiValues: [] };
|
|
83
|
-
// 기본 계산 기준일 설정 (카테고리 periodType 사용)
|
|
84
|
-
const defaultDate = valueDate || (0, value_date_util_1.getDefaultValueDate)(category.periodType || kpi_2.KpiPeriodType.DAY, 'last');
|
|
85
|
-
// 2. 카테고리 formula가 있으면 formula로 계산
|
|
86
|
-
if (category.formula) {
|
|
87
|
-
const ast = (0, parser_1.parseFormula)(category.formula);
|
|
88
|
-
const provider = new kpi_value_provider_1.KpiValueProvider({
|
|
89
|
-
valueDate: defaultDate,
|
|
90
|
-
group,
|
|
91
|
-
domainId: domain.id,
|
|
92
|
-
tx
|
|
93
|
-
});
|
|
94
|
-
const evalContext = { functions: functions_1.builtinFunctions, provider };
|
|
95
|
-
const value = await (0, evaluator_1.evaluateFormula)(ast, evalContext);
|
|
96
|
-
// 카테고리 formula 결과를 score로 변환 (0-1 범위)
|
|
97
|
-
const score = value !== null && value !== undefined && !isNaN(value) ? Math.max(0, Math.min(1, value)) : null;
|
|
98
|
-
return {
|
|
99
|
-
value,
|
|
100
|
-
score,
|
|
101
|
-
valueDate: defaultDate,
|
|
102
|
-
group,
|
|
103
|
-
kpiValues: [] // 카테고리 formula 기반이므로 개별 KPI 값은 제공하지 않음
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
// 3. formula가 없으면 KPI score들의 가중 평균으로 category score 계산
|
|
107
|
-
const kpis = await (0, shell_1.getRepository)(kpi_1.Kpi).find({
|
|
108
|
-
where: { domain: { id: domain.id }, category: { id: categoryId } }
|
|
109
|
-
});
|
|
110
|
-
if (!kpis.length)
|
|
111
|
-
return { value: null, score: null, kpiValues: [] };
|
|
112
|
-
let totalWeight = 0;
|
|
113
|
-
let weightedScoreSum = 0;
|
|
114
|
-
const kpiValues = [];
|
|
115
|
-
for (const kpi of kpis) {
|
|
116
|
-
// KPI value 계산
|
|
117
|
-
let value = null;
|
|
118
|
-
if (kpi.formula) {
|
|
119
|
-
const ast = (0, parser_1.parseFormula)(kpi.formula);
|
|
120
|
-
const provider = new kpi_value_provider_1.KpiValueProvider({
|
|
121
|
-
valueDate: defaultDate,
|
|
122
|
-
group,
|
|
123
|
-
domainId: domain.id,
|
|
124
|
-
tx
|
|
125
|
-
});
|
|
126
|
-
const evalContext = { functions: functions_1.builtinFunctions, provider };
|
|
127
|
-
value = await (0, evaluator_1.evaluateFormula)(ast, evalContext);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
const kpiValue = await (0, shell_1.getRepository)(kpi_value_1.KpiValue).findOne({
|
|
131
|
-
where: {
|
|
132
|
-
kpi: { id: kpi.id },
|
|
133
|
-
valueDate: defaultDate,
|
|
134
|
-
group: group ?? '',
|
|
135
|
-
domain: { id: domain.id }
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
value = kpiValue?.value ?? 0;
|
|
139
|
-
}
|
|
140
|
-
// KPI score 계산
|
|
141
|
-
const scoreService = new kpi_value_score_service_1.KpiValueScoreService();
|
|
142
|
-
let kpiScore = null;
|
|
143
|
-
if (value !== null && value !== undefined) {
|
|
144
|
-
let scoreResult = await scoreService.calculateScoreFromFormula(kpi, value);
|
|
145
|
-
if (!scoreResult) {
|
|
146
|
-
scoreResult = scoreService.calculateScoreFromLookup(kpi, value);
|
|
147
|
-
}
|
|
148
|
-
kpiScore = scoreResult?.score ?? null;
|
|
149
|
-
}
|
|
150
|
-
const weight = kpi.weight ?? 1;
|
|
151
|
-
if (kpiScore !== null) {
|
|
152
|
-
weightedScoreSum += kpiScore * weight;
|
|
153
|
-
totalWeight += weight;
|
|
154
|
-
}
|
|
155
|
-
kpiValues.push({ kpiId: kpi.id, value });
|
|
156
|
-
}
|
|
157
|
-
// category score 계산 (KPI score들의 가중 평균)
|
|
158
|
-
const categoryScore = totalWeight ? weightedScoreSum / totalWeight : null;
|
|
159
|
-
// category value는 기존 방식대로 계산 (호환성 유지)
|
|
160
|
-
let totalValueWeight = 0;
|
|
161
|
-
let weightedValueSum = 0;
|
|
162
|
-
for (const kpi of kpis) {
|
|
163
|
-
let value = null;
|
|
164
|
-
if (kpi.formula) {
|
|
165
|
-
const ast = (0, parser_1.parseFormula)(kpi.formula);
|
|
166
|
-
const provider = new kpi_value_provider_1.KpiValueProvider({
|
|
167
|
-
valueDate: defaultDate,
|
|
168
|
-
group,
|
|
169
|
-
domainId: domain.id,
|
|
170
|
-
tx
|
|
171
|
-
});
|
|
172
|
-
const evalContext = { functions: functions_1.builtinFunctions, provider };
|
|
173
|
-
value = await (0, evaluator_1.evaluateFormula)(ast, evalContext);
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
const kpiValue = await (0, shell_1.getRepository)(kpi_value_1.KpiValue).findOne({
|
|
177
|
-
where: {
|
|
178
|
-
kpi: { id: kpi.id },
|
|
179
|
-
valueDate: defaultDate,
|
|
180
|
-
group: group ?? '',
|
|
181
|
-
domain: { id: domain.id }
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
value = kpiValue?.value ?? 0;
|
|
185
|
-
}
|
|
186
|
-
const weight = kpi.weight ?? 1;
|
|
187
|
-
weightedValueSum += (value ?? 0) * weight;
|
|
188
|
-
totalValueWeight += weight;
|
|
189
|
-
}
|
|
190
|
-
const resultValue = totalValueWeight ? weightedValueSum / totalValueWeight : null;
|
|
191
|
-
return {
|
|
192
|
-
value: resultValue,
|
|
193
|
-
score: categoryScore,
|
|
194
|
-
valueDate: defaultDate,
|
|
195
|
-
group,
|
|
196
|
-
kpiValues
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
47
|
async kpis(kpiCategory) {
|
|
200
48
|
return await (0, shell_1.getRepository)(kpi_1.Kpi).find({
|
|
201
49
|
where: { domain: { id: kpiCategory.domainId }, category: { id: kpiCategory.id } }
|
|
@@ -231,16 +79,6 @@ tslib_1.__decorate([
|
|
|
231
79
|
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
|
|
232
80
|
tslib_1.__metadata("design:returntype", Promise)
|
|
233
81
|
], KpiCategoryQuery.prototype, "kpiCategories", null);
|
|
234
|
-
tslib_1.__decorate([
|
|
235
|
-
(0, type_graphql_1.Query)(returns => KpiCategoryValueResult, { description: '카테고리 단위 KPI 실적값 집계/조회' }),
|
|
236
|
-
tslib_1.__param(0, (0, type_graphql_1.Arg)('categoryId')),
|
|
237
|
-
tslib_1.__param(1, (0, type_graphql_1.Arg)('valueDate', { nullable: true })),
|
|
238
|
-
tslib_1.__param(2, (0, type_graphql_1.Arg)('group', { nullable: true })),
|
|
239
|
-
tslib_1.__param(3, (0, type_graphql_1.Ctx)()),
|
|
240
|
-
tslib_1.__metadata("design:type", Function),
|
|
241
|
-
tslib_1.__metadata("design:paramtypes", [String, String, String, Object]),
|
|
242
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
243
|
-
], KpiCategoryQuery.prototype, "calculateKpiValue", null);
|
|
244
82
|
tslib_1.__decorate([
|
|
245
83
|
(0, type_graphql_1.FieldResolver)(type => [kpi_1.Kpi]),
|
|
246
84
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kpi-category-query.js","sourceRoot":"","sources":["../../../server/service/kpi-category/kpi-category-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Float, Root, Args, Arg, Ctx, Directive, ObjectType, Field } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { KpiCategory } from './kpi-category'\nimport { KpiCategoryList } from './kpi-category-type'\nimport { Kpi } from '../kpi/kpi'\nimport { KpiValue } from '../kpi-value/kpi-value'\nimport { parseFormula } from '../../calculator/parser'\nimport { evaluateFormula } from '../../calculator/evaluator'\nimport { builtinFunctions } from '../../calculator/functions'\nimport { KpiValueProvider } from '../../controllers/kpi-value-provider'\nimport { getDefaultValueDate } from '../utils/value-date-util'\nimport { KpiPeriodType } from '../kpi/kpi'\nimport { KpiValueScoreService } from '../kpi-value/kpi-value-score.service'\n\n@ObjectType()\nclass KpiValueItem {\n @Field()\n kpiId: string\n\n @Field(type => Float, { nullable: true })\n value: number\n}\n\n@ObjectType()\nclass KpiCategoryValueResult {\n @Field(type => Float, { nullable: true })\n value?: number\n\n @Field(type => Float, { nullable: true, description: 'Performance score for this category (0-1 range)' })\n score?: number\n\n @Field({ nullable: true })\n valueDate?: string\n\n @Field({ nullable: true })\n group?: string\n\n @Field(type => [KpiValueItem])\n kpiValues: KpiValueItem[]\n}\n\n@Resolver(KpiCategory)\nexport class KpiCategoryQuery {\n @Query(returns => KpiCategory!, {\n nullable: true,\n description: 'Fetch a single KPI category by its unique identifier.'\n })\n async kpiCategory(\n @Arg('id', { description: 'Unique identifier of the KPI category to fetch.' }) id: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategory> {\n const { domain } = context.state\n\n return await getRepository(KpiCategory).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => KpiCategoryList, { description: 'To fetch multiple KpiCategories' })\n async kpiCategories(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiCategory),\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => KpiCategoryValueResult, { description: '카테고리 단위 KPI 실적값 집계/조회' })\n async calculateKpiValue(\n @Arg('categoryId') categoryId: string,\n @Arg('valueDate', { nullable: true }) valueDate: string,\n @Arg('group', { nullable: true }) group: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryValueResult> {\n const { domain, tx } = context.state\n // 1. 카테고리 정보 조회 (formula 포함)\n const category = await getRepository(KpiCategory).findOne({\n where: { domain: { id: domain.id }, id: categoryId }\n })\n if (!category) return { value: null, score: null, kpiValues: [] }\n\n // 기본 계산 기준일 설정 (카테고리 periodType 사용)\n const defaultDate = valueDate || getDefaultValueDate(category.periodType || KpiPeriodType.DAY, 'last')\n\n // 2. 카테고리 formula가 있으면 formula로 계산\n if (category.formula) {\n const ast = parseFormula(category.formula)\n const provider = new KpiValueProvider({\n valueDate: defaultDate,\n group,\n domainId: domain.id,\n tx\n })\n const evalContext = { functions: builtinFunctions, provider }\n const value = await evaluateFormula(ast, evalContext)\n // 카테고리 formula 결과를 score로 변환 (0-1 범위)\n const score = value !== null && value !== undefined && !isNaN(value) ? Math.max(0, Math.min(1, value)) : null\n\n return {\n value,\n score,\n valueDate: defaultDate,\n group,\n kpiValues: [] // 카테고리 formula 기반이므로 개별 KPI 값은 제공하지 않음\n }\n }\n\n // 3. formula가 없으면 KPI score들의 가중 평균으로 category score 계산\n const kpis = await getRepository(Kpi).find({\n where: { domain: { id: domain.id }, category: { id: categoryId } }\n })\n if (!kpis.length) return { value: null, score: null, kpiValues: [] }\n\n let totalWeight = 0\n let weightedScoreSum = 0\n const kpiValues: KpiValueItem[] = []\n\n for (const kpi of kpis) {\n // KPI value 계산\n let value = null\n if (kpi.formula) {\n const ast = parseFormula(kpi.formula)\n const provider = new KpiValueProvider({\n valueDate: defaultDate,\n group,\n domainId: domain.id,\n tx\n })\n const evalContext = { functions: builtinFunctions, provider }\n value = await evaluateFormula(ast, evalContext)\n } else {\n const kpiValue = await getRepository(KpiValue).findOne({\n where: {\n kpi: { id: kpi.id },\n valueDate: defaultDate,\n group: group ?? '',\n domain: { id: domain.id }\n }\n })\n value = kpiValue?.value ?? 0\n }\n\n // KPI score 계산\n const scoreService = new KpiValueScoreService()\n let kpiScore = null\n if (value !== null && value !== undefined) {\n let scoreResult = await scoreService.calculateScoreFromFormula(kpi, value)\n if (!scoreResult) {\n scoreResult = scoreService.calculateScoreFromLookup(kpi, value)\n }\n kpiScore = scoreResult?.score ?? null\n }\n\n const weight = kpi.weight ?? 1\n if (kpiScore !== null) {\n weightedScoreSum += kpiScore * weight\n totalWeight += weight\n }\n\n kpiValues.push({ kpiId: kpi.id, value })\n }\n\n // category score 계산 (KPI score들의 가중 평균)\n const categoryScore = totalWeight ? weightedScoreSum / totalWeight : null\n\n // category value는 기존 방식대로 계산 (호환성 유지)\n let totalValueWeight = 0\n let weightedValueSum = 0\n for (const kpi of kpis) {\n let value = null\n if (kpi.formula) {\n const ast = parseFormula(kpi.formula)\n const provider = new KpiValueProvider({\n valueDate: defaultDate,\n group,\n domainId: domain.id,\n tx\n })\n const evalContext = { functions: builtinFunctions, provider }\n value = await evaluateFormula(ast, evalContext)\n } else {\n const kpiValue = await getRepository(KpiValue).findOne({\n where: {\n kpi: { id: kpi.id },\n valueDate: defaultDate,\n group: group ?? '',\n domain: { id: domain.id }\n }\n })\n value = kpiValue?.value ?? 0\n }\n const weight = kpi.weight ?? 1\n weightedValueSum += (value ?? 0) * weight\n totalValueWeight += weight\n }\n const resultValue = totalValueWeight ? weightedValueSum / totalValueWeight : null\n\n return {\n value: resultValue,\n score: categoryScore,\n valueDate: defaultDate,\n group,\n kpiValues\n }\n }\n\n @FieldResolver(type => [Kpi])\n async kpis(@Root() kpiCategory: KpiCategory): Promise<Kpi[]> {\n return await getRepository(Kpi).find({\n where: { domain: { id: kpiCategory.domainId }, category: { id: kpiCategory.id } }\n })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() kpiCategory: KpiCategory): Promise<Domain> {\n return kpiCategory.domainId && (await getRepository(Domain).findOneBy({ id: kpiCategory.domainId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() kpiCategory: KpiCategory): Promise<User> {\n return kpiCategory.updaterId && (await getRepository(User).findOneBy({ id: kpiCategory.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() kpiCategory: KpiCategory): Promise<User> {\n return kpiCategory.creatorId && (await getRepository(User).findOneBy({ id: kpiCategory.creatorId }))\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"kpi-category-query.js","sourceRoot":"","sources":["../../../server/service/kpi-category/kpi-category-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Float, Root, Args, Arg, Ctx, Directive, ObjectType, Field } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { KpiCategory } from './kpi-category'\nimport { KpiCategoryList } from './kpi-category-type'\nimport { Kpi } from '../kpi/kpi'\nimport { KpiValue } from '../kpi-value/kpi-value'\nimport { parseFormula } from '../../calculator/parser'\nimport { evaluateFormula } from '../../calculator/evaluator'\nimport { builtinFunctions } from '../../calculator/functions'\nimport { KpiValueProvider } from '../../controllers/kpi-value-provider'\nimport { getDefaultValueDate } from '../utils/value-date-util'\nimport { KpiPeriodType } from '../kpi/kpi'\nimport { KpiValueScoreService } from '../kpi-value/kpi-value-score.service'\n\n@ObjectType()\nexport class KpiCategoryValueResult {\n @Field(type => Float, { nullable: true, description: 'Performance score for this category (0-1 range)' })\n score?: number\n\n @Field({ nullable: true })\n valueDate?: string\n\n @Field({ nullable: true })\n group?: string\n}\n\n@Resolver(KpiCategory)\nexport class KpiCategoryQuery {\n @Query(returns => KpiCategory!, {\n nullable: true,\n description: 'Fetch a single KPI category by its unique identifier.'\n })\n async kpiCategory(\n @Arg('id', { description: 'Unique identifier of the KPI category to fetch.' }) id: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategory> {\n const { domain } = context.state\n\n return await getRepository(KpiCategory).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => KpiCategoryList, { description: 'To fetch multiple KpiCategories' })\n async kpiCategories(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiCategory),\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [Kpi])\n async kpis(@Root() kpiCategory: KpiCategory): Promise<Kpi[]> {\n return await getRepository(Kpi).find({\n where: { domain: { id: kpiCategory.domainId }, category: { id: kpiCategory.id } }\n })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() kpiCategory: KpiCategory): Promise<Domain> {\n return kpiCategory.domainId && (await getRepository(Domain).findOneBy({ id: kpiCategory.domainId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() kpiCategory: KpiCategory): Promise<User> {\n return kpiCategory.updaterId && (await getRepository(User).findOneBy({ id: kpiCategory.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() kpiCategory: KpiCategory): Promise<User> {\n return kpiCategory.creatorId && (await getRepository(User).findOneBy({ id: kpiCategory.creatorId }))\n }\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { KpiCategoryValue } from './kpi-category-value';
|
|
2
|
+
import { KpiCategoryValueQuery } from './kpi-category-value-query';
|
|
3
|
+
import { KpiCategoryValueMutation } from './kpi-category-value-mutation';
|
|
4
|
+
export declare const entities: (typeof KpiCategoryValue)[];
|
|
5
|
+
export declare const resolvers: (typeof KpiCategoryValueQuery | typeof KpiCategoryValueMutation)[];
|
|
6
|
+
export declare const subscribers: any[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subscribers = exports.resolvers = exports.entities = void 0;
|
|
4
|
+
const kpi_category_value_1 = require("./kpi-category-value");
|
|
5
|
+
const kpi_category_value_query_1 = require("./kpi-category-value-query");
|
|
6
|
+
const kpi_category_value_mutation_1 = require("./kpi-category-value-mutation");
|
|
7
|
+
exports.entities = [kpi_category_value_1.KpiCategoryValue];
|
|
8
|
+
exports.resolvers = [kpi_category_value_query_1.KpiCategoryValueQuery, kpi_category_value_mutation_1.KpiCategoryValueMutation];
|
|
9
|
+
exports.subscribers = [];
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/kpi-category-value/index.ts"],"names":[],"mappings":";;;AAAA,6DAAuD;AACvD,yEAAkE;AAClE,+EAAwE;AAE3D,QAAA,QAAQ,GAAG,CAAC,qCAAgB,CAAC,CAAA;AAC7B,QAAA,SAAS,GAAG,CAAC,gDAAqB,EAAE,sDAAwB,CAAC,CAAA;AAC7D,QAAA,WAAW,GAAG,EAAE,CAAA","sourcesContent":["import { KpiCategoryValue } from './kpi-category-value'\nimport { KpiCategoryValueQuery } from './kpi-category-value-query'\nimport { KpiCategoryValueMutation } from './kpi-category-value-mutation'\n\nexport const entities = [KpiCategoryValue]\nexport const resolvers = [KpiCategoryValueQuery, KpiCategoryValueMutation]\nexport const subscribers = []\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { KpiCategoryValue } from './kpi-category-value';
|
|
2
|
+
import { NewKpiCategoryValue, KpiCategoryValuePatch } from './kpi-category-value-type';
|
|
3
|
+
export declare class KpiCategoryValueMutation {
|
|
4
|
+
createKpiCategoryValue(kpiCategoryValue: NewKpiCategoryValue, context: ResolverContext): Promise<KpiCategoryValue>;
|
|
5
|
+
updateKpiCategoryValue(id: string, patch: KpiCategoryValuePatch, context: ResolverContext): Promise<KpiCategoryValue>;
|
|
6
|
+
deleteKpiCategoryValue(id: string, context: ResolverContext): Promise<boolean>;
|
|
7
|
+
updateMultipleKpiCategoryValue(ids: string[], patch: KpiCategoryValuePatch, context: ResolverContext): Promise<KpiCategoryValue[]>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KpiCategoryValueMutation = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const type_graphql_1 = require("type-graphql");
|
|
6
|
+
const typeorm_1 = require("typeorm");
|
|
7
|
+
const kpi_category_value_1 = require("./kpi-category-value");
|
|
8
|
+
const kpi_category_value_type_1 = require("./kpi-category-value-type");
|
|
9
|
+
let KpiCategoryValueMutation = class KpiCategoryValueMutation {
|
|
10
|
+
async createKpiCategoryValue(kpiCategoryValue, context) {
|
|
11
|
+
const { domain, user } = context.state;
|
|
12
|
+
const newKpiCategoryValue = (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).create({
|
|
13
|
+
...kpiCategoryValue,
|
|
14
|
+
domainId: domain.id,
|
|
15
|
+
creatorId: user.id,
|
|
16
|
+
updaterId: user.id
|
|
17
|
+
});
|
|
18
|
+
return await (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).save(newKpiCategoryValue);
|
|
19
|
+
}
|
|
20
|
+
async updateKpiCategoryValue(id, patch, context) {
|
|
21
|
+
const { user } = context.state;
|
|
22
|
+
const kpiCategoryValue = await (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).findOneBy({ id });
|
|
23
|
+
if (!kpiCategoryValue) {
|
|
24
|
+
throw new Error(`KPI category value with id ${id} not found`);
|
|
25
|
+
}
|
|
26
|
+
Object.assign(kpiCategoryValue, {
|
|
27
|
+
...patch,
|
|
28
|
+
updaterId: user.id
|
|
29
|
+
});
|
|
30
|
+
return await (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).save(kpiCategoryValue);
|
|
31
|
+
}
|
|
32
|
+
async deleteKpiCategoryValue(id, context) {
|
|
33
|
+
const kpiCategoryValue = await (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).findOneBy({ id });
|
|
34
|
+
if (!kpiCategoryValue) {
|
|
35
|
+
throw new Error(`KPI category value with id ${id} not found`);
|
|
36
|
+
}
|
|
37
|
+
await (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).remove(kpiCategoryValue);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
async updateMultipleKpiCategoryValue(ids, patch, context) {
|
|
41
|
+
const { user } = context.state;
|
|
42
|
+
const kpiCategoryValues = await (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).findByIds(ids);
|
|
43
|
+
if (kpiCategoryValues.length !== ids.length) {
|
|
44
|
+
throw new Error('Some KPI category values not found');
|
|
45
|
+
}
|
|
46
|
+
const updatedValues = kpiCategoryValues.map(value => {
|
|
47
|
+
Object.assign(value, {
|
|
48
|
+
...patch,
|
|
49
|
+
updaterId: user.id
|
|
50
|
+
});
|
|
51
|
+
return value;
|
|
52
|
+
});
|
|
53
|
+
return await (0, typeorm_1.getRepository)(kpi_category_value_1.KpiCategoryValue).save(updatedValues);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
exports.KpiCategoryValueMutation = KpiCategoryValueMutation;
|
|
57
|
+
tslib_1.__decorate([
|
|
58
|
+
(0, type_graphql_1.Mutation)(type => kpi_category_value_1.KpiCategoryValue, {
|
|
59
|
+
description: 'Create a new KPI category value.'
|
|
60
|
+
}),
|
|
61
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('kpiCategoryValue')),
|
|
62
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
63
|
+
tslib_1.__metadata("design:type", Function),
|
|
64
|
+
tslib_1.__metadata("design:paramtypes", [kpi_category_value_type_1.NewKpiCategoryValue, Object]),
|
|
65
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
66
|
+
], KpiCategoryValueMutation.prototype, "createKpiCategoryValue", null);
|
|
67
|
+
tslib_1.__decorate([
|
|
68
|
+
(0, type_graphql_1.Mutation)(type => kpi_category_value_1.KpiCategoryValue, {
|
|
69
|
+
description: 'Update an existing KPI category value.'
|
|
70
|
+
}),
|
|
71
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
72
|
+
tslib_1.__param(1, (0, type_graphql_1.Arg)('patch')),
|
|
73
|
+
tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
|
|
74
|
+
tslib_1.__metadata("design:type", Function),
|
|
75
|
+
tslib_1.__metadata("design:paramtypes", [String, kpi_category_value_type_1.KpiCategoryValuePatch, Object]),
|
|
76
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
77
|
+
], KpiCategoryValueMutation.prototype, "updateKpiCategoryValue", null);
|
|
78
|
+
tslib_1.__decorate([
|
|
79
|
+
(0, type_graphql_1.Mutation)(type => Boolean, {
|
|
80
|
+
description: 'Delete a KPI category value.'
|
|
81
|
+
}),
|
|
82
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
83
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
84
|
+
tslib_1.__metadata("design:type", Function),
|
|
85
|
+
tslib_1.__metadata("design:paramtypes", [String, Object]),
|
|
86
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
87
|
+
], KpiCategoryValueMutation.prototype, "deleteKpiCategoryValue", null);
|
|
88
|
+
tslib_1.__decorate([
|
|
89
|
+
(0, type_graphql_1.Mutation)(type => [kpi_category_value_1.KpiCategoryValue], {
|
|
90
|
+
description: 'Update multiple KPI category values.'
|
|
91
|
+
}),
|
|
92
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('ids', type => [String])),
|
|
93
|
+
tslib_1.__param(1, (0, type_graphql_1.Arg)('patch')),
|
|
94
|
+
tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
|
|
95
|
+
tslib_1.__metadata("design:type", Function),
|
|
96
|
+
tslib_1.__metadata("design:paramtypes", [Array, kpi_category_value_type_1.KpiCategoryValuePatch, Object]),
|
|
97
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
98
|
+
], KpiCategoryValueMutation.prototype, "updateMultipleKpiCategoryValue", null);
|
|
99
|
+
exports.KpiCategoryValueMutation = KpiCategoryValueMutation = tslib_1.__decorate([
|
|
100
|
+
(0, type_graphql_1.Resolver)()
|
|
101
|
+
], KpiCategoryValueMutation);
|
|
102
|
+
//# sourceMappingURL=kpi-category-value-mutation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-category-value-mutation.js","sourceRoot":"","sources":["../../../server/service/kpi-category-value/kpi-category-value-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx } from 'type-graphql'\nimport { getRepository } from 'typeorm'\nimport { KpiCategoryValue } from './kpi-category-value'\nimport { NewKpiCategoryValue, KpiCategoryValuePatch } from './kpi-category-value-type'\n\n@Resolver()\nexport class KpiCategoryValueMutation {\n @Mutation(type => KpiCategoryValue, {\n description: 'Create a new KPI category value.'\n })\n async createKpiCategoryValue(\n @Arg('kpiCategoryValue') kpiCategoryValue: NewKpiCategoryValue,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryValue> {\n const { domain, user } = context.state\n\n const newKpiCategoryValue = getRepository(KpiCategoryValue).create({\n ...kpiCategoryValue,\n domainId: domain.id,\n creatorId: user.id,\n updaterId: user.id\n })\n\n return await getRepository(KpiCategoryValue).save(newKpiCategoryValue)\n }\n\n @Mutation(type => KpiCategoryValue, {\n description: 'Update an existing KPI category value.'\n })\n async updateKpiCategoryValue(\n @Arg('id') id: string,\n @Arg('patch') patch: KpiCategoryValuePatch,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryValue> {\n const { user } = context.state\n\n const kpiCategoryValue = await getRepository(KpiCategoryValue).findOneBy({ id })\n if (!kpiCategoryValue) {\n throw new Error(`KPI category value with id ${id} not found`)\n }\n\n Object.assign(kpiCategoryValue, {\n ...patch,\n updaterId: user.id\n })\n\n return await getRepository(KpiCategoryValue).save(kpiCategoryValue)\n }\n\n @Mutation(type => Boolean, {\n description: 'Delete a KPI category value.'\n })\n async deleteKpiCategoryValue(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const kpiCategoryValue = await getRepository(KpiCategoryValue).findOneBy({ id })\n if (!kpiCategoryValue) {\n throw new Error(`KPI category value with id ${id} not found`)\n }\n\n await getRepository(KpiCategoryValue).remove(kpiCategoryValue)\n return true\n }\n\n @Mutation(type => [KpiCategoryValue], {\n description: 'Update multiple KPI category values.'\n })\n async updateMultipleKpiCategoryValue(\n @Arg('ids', type => [String]) ids: string[],\n @Arg('patch') patch: KpiCategoryValuePatch,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryValue[]> {\n const { user } = context.state\n\n const kpiCategoryValues = await getRepository(KpiCategoryValue).findByIds(ids)\n if (kpiCategoryValues.length !== ids.length) {\n throw new Error('Some KPI category values not found')\n }\n\n const updatedValues = kpiCategoryValues.map(value => {\n Object.assign(value, {\n ...patch,\n updaterId: user.id\n })\n return value\n })\n\n return await getRepository(KpiCategoryValue).save(updatedValues)\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { KpiCategoryValue } from './kpi-category-value';
|
|
2
|
+
import { Domain, ListParam } from '@things-factory/shell';
|
|
3
|
+
import { KpiCategory } from '../kpi-category/kpi-category';
|
|
4
|
+
import { User } from '@things-factory/auth-base';
|
|
5
|
+
import { KpiCategoryValueList } from './kpi-category-value-type';
|
|
6
|
+
export declare class KpiCategoryValueQuery {
|
|
7
|
+
kpiCategoryValue(id: string, context: ResolverContext): Promise<KpiCategoryValue>;
|
|
8
|
+
kpiCategoryValues(params: ListParam, context: ResolverContext): Promise<KpiCategoryValueList>;
|
|
9
|
+
domain(kpiCategoryValue: KpiCategoryValue): Promise<Domain>;
|
|
10
|
+
category(kpiCategoryValue: KpiCategoryValue): Promise<KpiCategory>;
|
|
11
|
+
creator(kpiCategoryValue: KpiCategoryValue): Promise<User>;
|
|
12
|
+
updater(kpiCategoryValue: KpiCategoryValue): Promise<User>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KpiCategoryValueQuery = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const type_graphql_1 = require("type-graphql");
|
|
6
|
+
const kpi_category_value_1 = require("./kpi-category-value");
|
|
7
|
+
const shell_1 = require("@things-factory/shell");
|
|
8
|
+
const kpi_category_1 = require("../kpi-category/kpi-category");
|
|
9
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
|
10
|
+
const kpi_category_value_type_1 = require("./kpi-category-value-type");
|
|
11
|
+
let KpiCategoryValueQuery = class KpiCategoryValueQuery {
|
|
12
|
+
async kpiCategoryValue(id, context) {
|
|
13
|
+
return await (0, shell_1.getRepository)(kpi_category_value_1.KpiCategoryValue).findOneBy({ id });
|
|
14
|
+
}
|
|
15
|
+
async kpiCategoryValues(params, context) {
|
|
16
|
+
const { domain } = context.state;
|
|
17
|
+
const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
|
|
18
|
+
domain,
|
|
19
|
+
params,
|
|
20
|
+
repository: await (0, shell_1.getRepository)(kpi_category_value_1.KpiCategoryValue),
|
|
21
|
+
searchables: ['category', 'group', 'valueDate']
|
|
22
|
+
});
|
|
23
|
+
const [items, total] = await queryBuilder.getManyAndCount();
|
|
24
|
+
return { items, total };
|
|
25
|
+
}
|
|
26
|
+
async domain(kpiCategoryValue) {
|
|
27
|
+
return kpiCategoryValue.domainId && (await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({ id: kpiCategoryValue.domainId }));
|
|
28
|
+
}
|
|
29
|
+
async category(kpiCategoryValue) {
|
|
30
|
+
return (kpiCategoryValue.categoryId && (await (0, shell_1.getRepository)(kpi_category_1.KpiCategory).findOneBy({ id: kpiCategoryValue.categoryId })));
|
|
31
|
+
}
|
|
32
|
+
async creator(kpiCategoryValue) {
|
|
33
|
+
return kpiCategoryValue.creatorId && (await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: kpiCategoryValue.creatorId }));
|
|
34
|
+
}
|
|
35
|
+
async updater(kpiCategoryValue) {
|
|
36
|
+
return kpiCategoryValue.updaterId && (await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: kpiCategoryValue.updaterId }));
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.KpiCategoryValueQuery = KpiCategoryValueQuery;
|
|
40
|
+
tslib_1.__decorate([
|
|
41
|
+
(0, type_graphql_1.Query)(type => kpi_category_value_1.KpiCategoryValue, {
|
|
42
|
+
description: 'Get a specific KPI category value by ID.'
|
|
43
|
+
}),
|
|
44
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('id', { description: 'Unique identifier of the KPI category value to fetch.' })),
|
|
45
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
46
|
+
tslib_1.__metadata("design:type", Function),
|
|
47
|
+
tslib_1.__metadata("design:paramtypes", [String, Object]),
|
|
48
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
49
|
+
], KpiCategoryValueQuery.prototype, "kpiCategoryValue", null);
|
|
50
|
+
tslib_1.__decorate([
|
|
51
|
+
(0, type_graphql_1.Query)(type => kpi_category_value_type_1.KpiCategoryValueList, {
|
|
52
|
+
description: 'Get a list of KPI category values with optional filtering and pagination.'
|
|
53
|
+
}),
|
|
54
|
+
tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
|
|
55
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
56
|
+
tslib_1.__metadata("design:type", Function),
|
|
57
|
+
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
|
|
58
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
59
|
+
], KpiCategoryValueQuery.prototype, "kpiCategoryValues", null);
|
|
60
|
+
tslib_1.__decorate([
|
|
61
|
+
(0, type_graphql_1.FieldResolver)(type => shell_1.Domain),
|
|
62
|
+
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
63
|
+
tslib_1.__metadata("design:type", Function),
|
|
64
|
+
tslib_1.__metadata("design:paramtypes", [kpi_category_value_1.KpiCategoryValue]),
|
|
65
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
66
|
+
], KpiCategoryValueQuery.prototype, "domain", null);
|
|
67
|
+
tslib_1.__decorate([
|
|
68
|
+
(0, type_graphql_1.FieldResolver)(type => kpi_category_1.KpiCategory),
|
|
69
|
+
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
70
|
+
tslib_1.__metadata("design:type", Function),
|
|
71
|
+
tslib_1.__metadata("design:paramtypes", [kpi_category_value_1.KpiCategoryValue]),
|
|
72
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
73
|
+
], KpiCategoryValueQuery.prototype, "category", null);
|
|
74
|
+
tslib_1.__decorate([
|
|
75
|
+
(0, type_graphql_1.FieldResolver)(type => auth_base_1.User, { nullable: true }),
|
|
76
|
+
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
77
|
+
tslib_1.__metadata("design:type", Function),
|
|
78
|
+
tslib_1.__metadata("design:paramtypes", [kpi_category_value_1.KpiCategoryValue]),
|
|
79
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
80
|
+
], KpiCategoryValueQuery.prototype, "creator", null);
|
|
81
|
+
tslib_1.__decorate([
|
|
82
|
+
(0, type_graphql_1.FieldResolver)(type => auth_base_1.User, { nullable: true }),
|
|
83
|
+
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
84
|
+
tslib_1.__metadata("design:type", Function),
|
|
85
|
+
tslib_1.__metadata("design:paramtypes", [kpi_category_value_1.KpiCategoryValue]),
|
|
86
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
87
|
+
], KpiCategoryValueQuery.prototype, "updater", null);
|
|
88
|
+
exports.KpiCategoryValueQuery = KpiCategoryValueQuery = tslib_1.__decorate([
|
|
89
|
+
(0, type_graphql_1.Resolver)(kpi_category_value_1.KpiCategoryValue)
|
|
90
|
+
], KpiCategoryValueQuery);
|
|
91
|
+
//# sourceMappingURL=kpi-category-value-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-category-value-query.js","sourceRoot":"","sources":["../../../server/service/kpi-category-value/kpi-category-value-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, Arg, Ctx, FieldResolver, Root, Args } from 'type-graphql'\nimport { KpiCategoryValue } from './kpi-category-value'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { KpiCategory } from '../kpi-category/kpi-category'\nimport { User } from '@things-factory/auth-base'\nimport { KpiCategoryValueList } from './kpi-category-value-type'\n\n@Resolver(KpiCategoryValue)\nexport class KpiCategoryValueQuery {\n @Query(type => KpiCategoryValue, {\n description: 'Get a specific KPI category value by ID.'\n })\n async kpiCategoryValue(\n @Arg('id', { description: 'Unique identifier of the KPI category value to fetch.' }) id: string,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryValue> {\n return await getRepository(KpiCategoryValue).findOneBy({ id })\n }\n\n @Query(type => KpiCategoryValueList, {\n description: 'Get a list of KPI category values with optional filtering and pagination.'\n })\n async kpiCategoryValues(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<KpiCategoryValueList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(KpiCategoryValue),\n searchables: ['category', 'group', 'valueDate']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() kpiCategoryValue: KpiCategoryValue): Promise<Domain> {\n return kpiCategoryValue.domainId && (await getRepository(Domain).findOneBy({ id: kpiCategoryValue.domainId }))\n }\n\n @FieldResolver(type => KpiCategory)\n async category(@Root() kpiCategoryValue: KpiCategoryValue): Promise<KpiCategory> {\n return (\n kpiCategoryValue.categoryId && (await getRepository(KpiCategory).findOneBy({ id: kpiCategoryValue.categoryId }))\n )\n }\n\n @FieldResolver(type => User, { nullable: true })\n async creator(@Root() kpiCategoryValue: KpiCategoryValue): Promise<User> {\n return kpiCategoryValue.creatorId && (await getRepository(User).findOneBy({ id: kpiCategoryValue.creatorId }))\n }\n\n @FieldResolver(type => User, { nullable: true })\n async updater(@Root() kpiCategoryValue: KpiCategoryValue): Promise<User> {\n return kpiCategoryValue.updaterId && (await getRepository(User).findOneBy({ id: kpiCategoryValue.updaterId }))\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { KpiCategoryValue } from './kpi-category-value';
|
|
2
|
+
export declare class NewKpiCategoryValue {
|
|
3
|
+
domainId: string;
|
|
4
|
+
categoryId: string;
|
|
5
|
+
group?: string;
|
|
6
|
+
score?: number;
|
|
7
|
+
valueDate: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class KpiCategoryValuePatch {
|
|
10
|
+
domainId?: string;
|
|
11
|
+
categoryId?: string;
|
|
12
|
+
group?: string;
|
|
13
|
+
score?: number;
|
|
14
|
+
valueDate?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class KpiCategoryValueList {
|
|
17
|
+
items: KpiCategoryValue[];
|
|
18
|
+
total: number;
|
|
19
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KpiCategoryValueList = exports.KpiCategoryValuePatch = exports.NewKpiCategoryValue = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const type_graphql_1 = require("type-graphql");
|
|
6
|
+
const kpi_category_value_1 = require("./kpi-category-value");
|
|
7
|
+
let NewKpiCategoryValue = class NewKpiCategoryValue {
|
|
8
|
+
};
|
|
9
|
+
exports.NewKpiCategoryValue = NewKpiCategoryValue;
|
|
10
|
+
tslib_1.__decorate([
|
|
11
|
+
(0, type_graphql_1.Field)(),
|
|
12
|
+
tslib_1.__metadata("design:type", String)
|
|
13
|
+
], NewKpiCategoryValue.prototype, "domainId", void 0);
|
|
14
|
+
tslib_1.__decorate([
|
|
15
|
+
(0, type_graphql_1.Field)(),
|
|
16
|
+
tslib_1.__metadata("design:type", String)
|
|
17
|
+
], NewKpiCategoryValue.prototype, "categoryId", void 0);
|
|
18
|
+
tslib_1.__decorate([
|
|
19
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
20
|
+
tslib_1.__metadata("design:type", String)
|
|
21
|
+
], NewKpiCategoryValue.prototype, "group", void 0);
|
|
22
|
+
tslib_1.__decorate([
|
|
23
|
+
(0, type_graphql_1.Field)(type => type_graphql_1.Float, { nullable: true, description: 'Performance score for this category (0-1 range)' }),
|
|
24
|
+
tslib_1.__metadata("design:type", Number)
|
|
25
|
+
], NewKpiCategoryValue.prototype, "score", void 0);
|
|
26
|
+
tslib_1.__decorate([
|
|
27
|
+
(0, type_graphql_1.Field)(),
|
|
28
|
+
tslib_1.__metadata("design:type", String)
|
|
29
|
+
], NewKpiCategoryValue.prototype, "valueDate", void 0);
|
|
30
|
+
exports.NewKpiCategoryValue = NewKpiCategoryValue = tslib_1.__decorate([
|
|
31
|
+
(0, type_graphql_1.InputType)()
|
|
32
|
+
], NewKpiCategoryValue);
|
|
33
|
+
let KpiCategoryValuePatch = class KpiCategoryValuePatch {
|
|
34
|
+
};
|
|
35
|
+
exports.KpiCategoryValuePatch = KpiCategoryValuePatch;
|
|
36
|
+
tslib_1.__decorate([
|
|
37
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
38
|
+
tslib_1.__metadata("design:type", String)
|
|
39
|
+
], KpiCategoryValuePatch.prototype, "domainId", void 0);
|
|
40
|
+
tslib_1.__decorate([
|
|
41
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
42
|
+
tslib_1.__metadata("design:type", String)
|
|
43
|
+
], KpiCategoryValuePatch.prototype, "categoryId", void 0);
|
|
44
|
+
tslib_1.__decorate([
|
|
45
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
46
|
+
tslib_1.__metadata("design:type", String)
|
|
47
|
+
], KpiCategoryValuePatch.prototype, "group", void 0);
|
|
48
|
+
tslib_1.__decorate([
|
|
49
|
+
(0, type_graphql_1.Field)(type => type_graphql_1.Float, { nullable: true, description: 'Performance score for this category (0-1 range)' }),
|
|
50
|
+
tslib_1.__metadata("design:type", Number)
|
|
51
|
+
], KpiCategoryValuePatch.prototype, "score", void 0);
|
|
52
|
+
tslib_1.__decorate([
|
|
53
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
54
|
+
tslib_1.__metadata("design:type", String)
|
|
55
|
+
], KpiCategoryValuePatch.prototype, "valueDate", void 0);
|
|
56
|
+
exports.KpiCategoryValuePatch = KpiCategoryValuePatch = tslib_1.__decorate([
|
|
57
|
+
(0, type_graphql_1.InputType)()
|
|
58
|
+
], KpiCategoryValuePatch);
|
|
59
|
+
let KpiCategoryValueList = class KpiCategoryValueList {
|
|
60
|
+
};
|
|
61
|
+
exports.KpiCategoryValueList = KpiCategoryValueList;
|
|
62
|
+
tslib_1.__decorate([
|
|
63
|
+
(0, type_graphql_1.Field)(type => [kpi_category_value_1.KpiCategoryValue]),
|
|
64
|
+
tslib_1.__metadata("design:type", Array)
|
|
65
|
+
], KpiCategoryValueList.prototype, "items", void 0);
|
|
66
|
+
tslib_1.__decorate([
|
|
67
|
+
(0, type_graphql_1.Field)(),
|
|
68
|
+
tslib_1.__metadata("design:type", Number)
|
|
69
|
+
], KpiCategoryValueList.prototype, "total", void 0);
|
|
70
|
+
exports.KpiCategoryValueList = KpiCategoryValueList = tslib_1.__decorate([
|
|
71
|
+
(0, type_graphql_1.ObjectType)()
|
|
72
|
+
], KpiCategoryValueList);
|
|
73
|
+
//# sourceMappingURL=kpi-category-value-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpi-category-value-type.js","sourceRoot":"","sources":["../../../server/service/kpi-category-value/kpi-category-value-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAkE;AAElE,6DAAuD;AAGhD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAe/B,CAAA;AAfY,kDAAmB;AAE9B;IADC,IAAA,oBAAK,GAAE;;qDACQ;AAGhB;IADC,IAAA,oBAAK,GAAE;;uDACU;AAGlB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACZ;AAGd;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC;;kDAC3F;AAGd;IADC,IAAA,oBAAK,GAAE;;sDACS;8BAdN,mBAAmB;IAD/B,IAAA,wBAAS,GAAE;GACC,mBAAmB,CAe/B;AAGM,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAejC,CAAA;AAfY,sDAAqB;AAEhC;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACT;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACP;AAGnB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDACZ;AAGd;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC;;oDAC3F;AAGd;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wDACR;gCAdP,qBAAqB;IADjC,IAAA,wBAAS,GAAE;GACC,qBAAqB,CAejC;AAGM,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAMhC,CAAA;AANY,oDAAoB;AAE/B;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,qCAAgB,CAAC,CAAC;;mDACT;AAGzB;IADC,IAAA,oBAAK,GAAE;;mDACK;+BALF,oBAAoB;IADhC,IAAA,yBAAU,GAAE;GACA,oBAAoB,CAMhC","sourcesContent":["import { InputType, Field, Float, ObjectType } from 'type-graphql'\nimport { KpiPeriodType } from '../kpi/kpi'\nimport { KpiCategoryValue } from './kpi-category-value'\n\n@InputType()\nexport class NewKpiCategoryValue {\n @Field()\n domainId: string\n\n @Field()\n categoryId: string\n\n @Field({ nullable: true })\n group?: string\n\n @Field(type => Float, { nullable: true, description: 'Performance score for this category (0-1 range)' })\n score?: number\n\n @Field()\n valueDate: string\n}\n\n@InputType()\nexport class KpiCategoryValuePatch {\n @Field({ nullable: true })\n domainId?: string\n\n @Field({ nullable: true })\n categoryId?: string\n\n @Field({ nullable: true })\n group?: string\n\n @Field(type => Float, { nullable: true, description: 'Performance score for this category (0-1 range)' })\n score?: number\n\n @Field({ nullable: true })\n valueDate?: string\n}\n\n@ObjectType()\nexport class KpiCategoryValueList {\n @Field(type => [KpiCategoryValue])\n items: KpiCategoryValue[]\n\n @Field()\n total: number\n}\n"]}
|