import { Controller, Get, Post, Body, Param, Query } from '@nestjs/common'; import { GenomeService } from './genome.service'; import { ComparisonAveragesDto } from './dto/comparison-averages.dto'; @Controller('genome') export class GenomeController { constructor(private readonly genomeService: GenomeService) { } /** * GET /genome/dashboard-stats/:farmNo * 대시보드용 유전체 분석 통계 데이터 * @param farmNo - 농장 번호 */ @Get('dashboard-stats/:farmNo') getDashboardStats(@Param('farmNo') farmNo: string) { return this.genomeService.getDashboardStats(+farmNo); } /** * GET /genome/farm-region-ranking/:farmNo * 농가의 보은군 내 순위 조회 (대시보드용) * @param farmNo - 농장 번호 */ @Post('farm-region-ranking/:farmNo') getFarmRegionRanking( @Param('farmNo') farmNo: string, @Body() body: { traitConditions?: { traitNm: string; weight?: number }[] } ) { return this.genomeService.getFarmRegionRanking(+farmNo, body.traitConditions); } /** * GET /genome/trait-rank/:cowId/:traitName * 개별 형질 기준 순위 조회 * @param cowId - 개체식별번호 (KOR...) * @param traitName - 형질명 (도체중, 근내지방도 등) */ @Get('trait-rank/:cowId/:traitName') getTraitRank( @Param('cowId') cowId: string, @Param('traitName') traitName: string ) { return this.genomeService.getTraitRank(cowId, traitName); } /** * GET /genome/request/:cowId * 개체식별번호(KOR...)로 유전체 분석 의뢰 정보 조회 * @param cowId - 개체식별번호 */ @Get('request/:cowId') findRequestByCowIdentifier(@Param('cowId') cowId: string) { return this.genomeService.findRequestByCowIdentifier(cowId); } /** * GET /genome/comparison-averages/:cowId * 개체 기준 전국/지역/농장 카테고리별 평균 EBV 비교 데이터 * @param cowId - 개체식별번호 (KOR...) */ @Get('comparison-averages/:cowId') getComparisonAverages(@Param('cowId') cowId: string): Promise { return this.genomeService.getComparisonAverages(cowId); } /** * GET /genome/trait-comparison-averages/:cowId * 개체 기준 전국/지역/농장 형질별 평균 EBV 비교 데이터 * (폴리곤 차트용 - 형질 단위 비교) * @param cowId - 개체식별번호 (KOR...) */ @Get('trait-comparison-averages/:cowId') getTraitComparisonAverages(@Param('cowId') cowId: string) { return this.genomeService.getTraitComparisonAverages(cowId); } /** * POST /genome/selection-index/:cowId * 선발지수(가중 평균) 계산 + 농가/지역 순위 * @param cowId - 개체식별번호 (KOR...) * @param body.traitConditions - 형질별 가중치 조건 */ @Post('selection-index/:cowId') getSelectionIndex( @Param('cowId') cowId: string, @Body() body: { traitConditions: { traitNm: string; weight?: number }[] } ) { return this.genomeService.getSelectionIndex(cowId, body.traitConditions); } /** * GET /genome/yearly-ebv-stats/:farmNo * 연도별 EBV 통계 (개체상세 > 유전체 통합비교용) * @param farmNo - 농장 번호 */ @Get('yearly-ebv-stats/:farmNo') getYearlyEbvStats(@Param('farmNo') farmNo: string) { return this.genomeService.getYearlyEbvStats(+farmNo); } /** * GET /genome/yearly-trait-trend/:farmNo * 연도별 유전능력 추이 (형질별/카테고리별) * @param farmNo - 농장 번호 * @param category - 카테고리명 (성장/생산/체형/무게/비율) * @param traitName - 형질명 (선택, 없으면 카테고리 전체) */ @Get('yearly-trait-trend/:farmNo') getYearlyTraitTrend( @Param('farmNo') farmNo: string, @Query('category') category: string, @Query('traitName') traitName?: string, ) { return this.genomeService.getYearlyTraitTrend(+farmNo, category, traitName); } /** * GET /genome/:cowId * cowId(개체식별번호)로 유전체 데이터 조회 * @Get(':cowId')가 /genome/request 요청을 가로챔 * 구체적인 경로들(request)이 위에, 와일드카드 경로(@Get(':cowId'))가 맨 아래 */ @Get(':cowId') findByCowId(@Param('cowId') cowId: string) { return this.genomeService.findByCowId(cowId); } }