INIT
This commit is contained in:
185
backend/src/genome/genome.controller.ts
Normal file
185
backend/src/genome/genome.controller.ts
Normal file
@@ -0,0 +1,185 @@
|
||||
import { Controller, Get, Post, Body, Param, Query } from '@nestjs/common';
|
||||
import { Public } from '../common/decorators/public.decorator';
|
||||
import { GenomeService } from './genome.service';
|
||||
import { GenomeRequestModel } from './entities/genome-request.entity';
|
||||
import { GenomeTraitDetailModel } from './entities/genome-trait-detail.entity';
|
||||
|
||||
export interface CategoryAverageDto {
|
||||
category: string;
|
||||
avgEbv: number;
|
||||
count: number;
|
||||
}
|
||||
|
||||
export interface ComparisonAveragesDto {
|
||||
nationwide: CategoryAverageDto[];
|
||||
region: CategoryAverageDto[];
|
||||
farm: CategoryAverageDto[];
|
||||
}
|
||||
|
||||
@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-trait-comparison/:farmNo
|
||||
* 농가별 형질 비교 데이터 (농가 vs 지역 vs 전국)
|
||||
* @param farmNo - 농장 번호
|
||||
*/
|
||||
@Get('farm-trait-comparison/:farmNo')
|
||||
getFarmTraitComparison(@Param('farmNo') farmNo: string) {
|
||||
return this.genomeService.getFarmTraitComparison(+farmNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /genome/farm-region-ranking/:farmNo
|
||||
* 농가의 보은군 내 순위 조회 (대시보드용)
|
||||
* @param farmNo - 농장 번호
|
||||
*/
|
||||
@Get('farm-region-ranking/:farmNo')
|
||||
getFarmRegionRanking(@Param('farmNo') farmNo: string) {
|
||||
return this.genomeService.getFarmRegionRanking(+farmNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
// Genome Request endpoints
|
||||
@Get('request')
|
||||
findAllRequests(
|
||||
@Query('cowId') cowId?: string,
|
||||
@Query('farmId') farmId?: string,
|
||||
) {
|
||||
if (cowId) {
|
||||
return this.genomeService.findRequestsByCowId(+cowId);
|
||||
}
|
||||
if (farmId) {
|
||||
return this.genomeService.findRequestsByFarmId(+farmId);
|
||||
}
|
||||
return this.genomeService.findAllRequests();
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /genome/request/:cowId
|
||||
* 개체식별번호(KOR...)로 유전체 분석 의뢰 정보 조회
|
||||
* @param cowId - 개체식별번호
|
||||
*/
|
||||
@Get('request/:cowId')
|
||||
findRequestByCowIdentifier(@Param('cowId') cowId: string) {
|
||||
return this.genomeService.findRequestByCowIdentifier(cowId);
|
||||
}
|
||||
|
||||
@Post('request')
|
||||
createRequest(@Body() data: Partial<GenomeRequestModel>) {
|
||||
return this.genomeService.createRequest(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
||||
// Genome Trait Detail endpoints
|
||||
@Get('trait-detail/:requestId')
|
||||
findTraitDetailsByRequestId(@Param('requestId') requestId: string) {
|
||||
return this.genomeService.findTraitDetailsByRequestId(+requestId);
|
||||
}
|
||||
|
||||
@Get('trait-detail/cow/:cowId')
|
||||
findTraitDetailsByCowId(@Param('cowId') cowId: string) {
|
||||
return this.genomeService.findTraitDetailsByCowId(cowId);
|
||||
}
|
||||
|
||||
@Post('trait-detail')
|
||||
createTraitDetail(@Body() data: Partial<GenomeTraitDetailModel>) {
|
||||
return this.genomeService.createTraitDetail(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /genome/check-cow/:cowId
|
||||
* 특정 개체 상세 정보 조회 (디버깅용)
|
||||
*/
|
||||
@Public()
|
||||
@Get('check-cow/:cowId')
|
||||
checkSpecificCow(@Param('cowId') cowId: string) {
|
||||
return this.genomeService.checkSpecificCows([cowId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user