Files
genome2025/backend/src/genome/genome.controller.ts
2025-12-24 22:50:13 +09:00

129 lines
4.2 KiB
TypeScript

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<ComparisonAveragesDto> {
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);
}
}