Files
genome2025/frontend/src/lib/api/cow.api.ts
2025-12-09 17:02:27 +09:00

70 lines
1.8 KiB
TypeScript

import apiClient from "../api-client";
import { RankingRequest } from "@/types/ranking.types";
import { CowDto, CowDetailResponseDto } from "@/types/cow.types";
/**
* 개체(Cow) 관련 API
*/
export const cowApi = {
/**
* GET /cow - 전체 개체 목록
*/
findAll: async (): Promise<CowDto[]> => {
return await apiClient.get("/cow");
},
/**
* GET /cow/paginated - 페이지네이션 목록
*/
findAllWithPagination: async (
page: number = 1,
limit: number = 10
): Promise<{ data: CowDto[]; total: number; page: number; limit: number }> => {
return await apiClient.get("/cow/paginated", {
params: { page, limit },
});
},
/**
* GET /cow/farm/:farmNo - 특정 농장의 개체 목록
*/
findByFarmNo: async (farmNo: number): Promise<CowDto[]> => {
return await apiClient.get(`/cow/farm/${farmNo}`);
},
/**
* GET /cow/search - 개체 검색 (개체번호 또는 개체명)
*/
search: async (
keyword: string,
farmNo?: number,
limit: number = 20
): Promise<CowDto[]> => {
return await apiClient.get("/cow/search", {
params: { keyword, farmNo, limit },
});
},
/**
* GET /cow/:cowNo - 개체 상세 조회
*/
findOne: async (cowNo: string): Promise<CowDetailResponseDto> => {
return await apiClient.get(`/cow/${cowNo}`);
},
/**
* POST /cow/ranking - 암소 랭킹 조회 (필터 + 랭킹 통합)
*/
getRanking: async (rankingRequest: RankingRequest): Promise<any> => {
return await apiClient.post("/cow/ranking", rankingRequest);
},
/**
* POST /cow/ranking/global - 전체 농가 개체 대상 랭킹 조회
*/
getGlobalRanking: async (rankingRequest: RankingRequest): Promise<any> => {
return await apiClient.post("/cow/ranking/global", rankingRequest);
},
};