From 42cb3173540ba20e16ea4fe4df22b193b44a34a8 Mon Sep 17 00:00:00 2001 From: chu eun ju Date: Wed, 31 Dec 2025 08:13:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A3=BC=EC=84=9D=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BD=94=EB=93=9C=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/category-evaluation-card.tsx | 67 +- .../_components/category-trait-grid.tsx | 2 + .../genome-integrated-comparison.tsx | 4 +- .../_components/normal-distribution-chart.tsx | 10 +- .../_components/trait-distribution-charts.tsx | 44 +- frontend/src/app/dashboard/data.json | 614 ------------------ frontend/src/app/dashboard/page.tsx | 270 ++++++-- frontend/src/app/dashboard/top-cows/page.tsx | 455 ------------- frontend/src/components/charts/index.ts | 4 - .../src/components/charts/mpt-gauge-bar.tsx | 261 -------- frontend/src/types/auth.types.ts | 217 ++++--- frontend/src/types/cow.types.ts | 192 +++--- frontend/src/types/filter.types.ts | 217 +++---- frontend/src/types/genome.types.ts | 191 ++---- frontend/src/types/ranking.types.ts | 250 ++----- 15 files changed, 665 insertions(+), 2133 deletions(-) delete mode 100644 frontend/src/app/dashboard/data.json delete mode 100644 frontend/src/app/dashboard/top-cows/page.tsx delete mode 100644 frontend/src/components/charts/index.ts delete mode 100644 frontend/src/components/charts/mpt-gauge-bar.tsx diff --git a/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx b/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx index 1c89c2d..6511322 100644 --- a/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx +++ b/frontend/src/app/cow/[cowNo]/genome/_components/category-evaluation-card.tsx @@ -26,46 +26,8 @@ import { ResponsiveContainer } from 'recharts' import { useMediaQuery } from "@/hooks/use-media-query" -import { DEFAULT_TRAITS, ALL_TRAITS, TRAIT_CATEGORIES } from "@/constants/traits" - -// 형질명 표시 (전체 이름) -const TRAIT_SHORT_NAMES: Record = { - '도체중': '도체중', - '등심단면적': '등심단면적', - '등지방두께': '등지방두께', - '근내지방도': '근내지방도', - '체장': '체장', - '체고': '체고', - '등심weight': '등심중량', - '12개월령체중': '12개월령체중', - '십자': '십자', - '흉심': '흉심', - '흉폭': '흉폭', - '고장': '고장', - '요각폭': '요각폭', - '좌골폭': '좌골폭', - '곤폭': '곤폭', - '흉위': '흉위', - '안심weight': '안심무게', - '채끝weight': '채끝무게', - '목심weight': '목심무게', - '앞다리weight': '앞다리무게', - '우둔weight': '우둔무게', - '설도weight': '설도무게', - '사태weight': '사태무게', - '양지weight': '양지무게', - '갈비weight': '갈비무게', - '안심rate': '안심비율', - '등심rate': '등심비율', - '채끝rate': '채끝비율', - '목심rate': '목심비율', - '앞다리rate': '앞다리비율', - '우둔rate': '우둔비율', - '설도rate': '설도비율', - '사태rate': '사태비율', - '양지rate': '양지비율', - '갈비rate': '갈비비율', -} +import { DEFAULT_TRAITS, ALL_TRAITS, TRAIT_CATEGORIES, getTraitDisplayName, TRAIT_DISPLAY_NAMES } from "@/constants/traits" +import { GenomeCowTraitDto } from "@/types/genome.types" interface CategoryStat { category: string @@ -74,22 +36,13 @@ interface CategoryStat { count: number } -interface TraitData { - id?: number - traitName?: string // 형질명 - traitCategory?: string // 카테고리 - breedVal?: number // 표준화육종가 (σ 단위) - percentile?: number - traitVal?: number // EPD (예상후대차이) 원래 값 -} - interface CategoryEvaluationCardProps { categoryStats: CategoryStat[] comparisonAverages: ComparisonAveragesDto | null traitComparisonAverages?: TraitComparisonAveragesDto | null // 형질별 평균 비교 데이터 (폴리곤 차트용) regionAvgZ: number farmAvgZ: number - allTraits?: TraitData[] + allTraits?: GenomeCowTraitDto[] cowNo?: string hideTraitCards?: boolean // 형질 카드 숨김 여부 } @@ -151,7 +104,7 @@ export function CategoryEvaluationCard({ // 폴리곤 차트용 데이터 생성 (선택된 형질 기반) - 보은군, 농가, 이 개체 비교 const traitChartData = chartTraits.map(traitName => { - const trait = allTraits.find((t: TraitData) => t.traitName === traitName) + const trait = allTraits.find((t: GenomeCowTraitDto) => t.traitName === traitName) // 형질별 평균 데이터에서 해당 형질 찾기 const traitAvgRegion = traitComparisonAverages?.region?.find(t => t.traitName === traitName) @@ -166,7 +119,7 @@ export function CategoryEvaluationCard({ return { name: traitName, - shortName: TRAIT_SHORT_NAMES[traitName] || traitName, + shortName: getTraitDisplayName(traitName), breedVal: trait?.breedVal ?? 0, // 이 개체 표준화육종가 (σ) epd: trait?.traitVal ?? 0, // 이 개체 EPD (육종가) regionVal: regionTraitAvg, // 보은군 평균 (표준화육종가) @@ -192,7 +145,7 @@ export function CategoryEvaluationCard({ // 형질 이름으로 원본 형질명 찾기 (shortName -> name) const findTraitNameByShortName = (shortName: string) => { - const entry = Object.entries(TRAIT_SHORT_NAMES).find(([, short]) => short === shortName) + const entry = Object.entries(TRAIT_DISPLAY_NAMES).find(([, short]) => short === shortName) return entry ? entry[0] : shortName } @@ -262,7 +215,7 @@ export function CategoryEvaluationCard({
{traits.map(trait => { const isSelected = chartTraits.includes(trait) - const traitData = allTraits.find((t: TraitData) => t.traitName === trait) + const traitData = allTraits.find((t: GenomeCowTraitDto) => t.traitName === trait) return (