# 01. KPI 엔티티/타입/리졸버 구조 최종 정비

## 목표

- KPI, KpiValue, KpiMetric, KpiCategory, KpiGrade, KpiHistory 등 모든 엔티티/타입/리졸버를 Dataset 기반 KPI 관리에 맞게 일관성 있게 정비한다.

## 세부 작업

1. **엔티티 구조 점검 및 리팩토링**
   - [x] 각 엔티티의 필드, 관계, 데코레이터(TypeORM, type-graphql) 일관성 확인  
          → 모든 엔티티가 TypeORM/type-graphql 기반으로 설계, 주요 필드/관계/데코레이터 일관성 확보
   - [x] 불필요한 필드/관계 제거, 누락된 필드 추가  
          → params 등 불필요 필드 제거, 누락 필드(확장성/실무성) 반영 완료
   - [x] 관계형 필드(예: category, dataSet 등)는 ID와 객체 모두 지원  
          → category, dataSet, parent 등 ID/객체 동시 지원 구조 구현
2. **타입/입력타입(InputType) 정비**
   - [x] 엔티티 필드와 InputType/OutputType의 싱크 맞추기  
          → InputType, PatchType, OutputType이 엔티티와 100% 싱크됨
   - [x] Patch 타입에 수정 가능한 모든 필드 포함  
          → PatchType에 모든 수정 가능 필드 포함, 누락 없음
   - [x] params 등 불필요한 필드 제거  
          → params 등 불필요 필드 제거 완료
3. **리졸버(Resolver) 정비**
   - [x] 생성/수정 시 관계형 필드(ID → 객체) 변환 로직 구현  
          → 생성/수정 시 categoryId→category, dataSetId→dataSet 등 변환 로직 구현
   - [x] Patch/Update 시 null/undefined 처리, 기존 값 유지  
          → patch 시 null/undefined 처리 및 기존 값 유지 로직 구현
   - [x] 유효성 검사, 에러 처리, 반환 타입 일치  
          → 유효성 검사, 에러 처리, 반환 타입 일치 구현
4. **이력(History) 엔티티 동기화**
   - [x] History 엔티티가 원본 엔티티와 구조/타입 일치하도록 동기화  
          → KpiHistory가 Kpi와 구조/타입 1:1 동기화, 주요 필드/관계 일치
   - [x] subscriber 등 이력 자동화 로직 점검  
          → KpiHistoryEntitySubscriber로 release 시 이력 자동화, revert 등 정상 동작 확인
5. **테스트/문서화**
   - [ ] 단위/통합 테스트, 샘플 데이터/시나리오, 문서화 보완 필요
   - [x] ERD, README, 설계 문서 최신화  
          → README, design-entities.md, implement-plan 등 문서화 최신화, 예시/다이어그램/흐름 포함

## 체크리스트

- [x] 모든 엔티티의 필드/관계/타입 일관성 확보
- [x] InputType, PatchType, OutputType이 엔티티와 싱크됨
- [x] 리졸버에서 관계형 필드 변환/유효성 검사/에러 처리 구현
- [x] History 엔티티 동기화 및 subscriber 정상 동작
- [ ] 테스트/샘플/문서화 완료 필요 # 테스트/샘플/문서화 추가 보완 필요

## 예시

- [x] KpiMetric의 dataSetId → dataSet 객체 변환
- [x] KpiCategory의 parentId → parent 객체 변환
- [x] KpiHistory의 필드가 Kpi와 1:1로 일치

## 완료 기준

- [x] 모든 엔티티/타입/리졸버/이력 구조가 Dataset 기반 KPI 관리에 맞게 일관성 있게 정비됨
- [ ] 테스트 및 문서화가 완전히 보강되어야 함 # 테스트/샘플/문서화 추가 필요
