129 lines
4.2 KiB
TypeScript
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);
|
|
}
|
|
}
|