k-mfds-fooddb-mcp-server
Version:
식품의약품안전처 식품영양성분DB를 MCP 도구로 제공합니다.
94 lines (88 loc) • 4.01 kB
text/typescript
import { AmtCodeTypeResponse, AmtCodeTypeItem } from "./dtos/AmtCodeTypeResponse";
import { FoodNutrition } from "./dtos/FoodNutrition";
import { NutritionComponent } from "./dtos/NutritionComponent";
import { AmtNumDataType } from "./types/AmtNumDataType";
const KEY_NAME_PREFIX_NUTRITION_COMPONENT = 'AMT_NUM';
interface AmtNumDataItem {
key: string;
value: number;
}
const toNutritionComponent = (apiResponseBodyArrayItem: Record<string, any>): NutritionComponent[] => {
const amtNumDataList: AmtNumDataItem[] = [];
Object.keys(apiResponseBodyArrayItem).filter(each =>
each.indexOf(KEY_NAME_PREFIX_NUTRITION_COMPONENT) === 0)
.forEach(key => {
if (apiResponseBodyArrayItem[key] !== '') {
amtNumDataList.push({
key: key.trim(),
value: parseFloat(apiResponseBodyArrayItem[key])
});
}
});
return amtNumDataList.map(elem =>
new NutritionComponent({
name: AmtNumDataType[elem.key].name,
label: AmtNumDataType[elem.key].label,
value: elem.value,
unit: AmtNumDataType[elem.key].unit,
})
);
}
/**
* toSearchFoodNutritionResponse
* @param apiResponseBodyArrayItem - gov food api 통해 받은 응답 객체의 item 리스트
*/
export function toFoodNutrition(apiResponseBodyArrayItem: Record<string, any>): FoodNutrition {
return new FoodNutrition({
num: apiResponseBodyArrayItem.NUM,
foodCode: apiResponseBodyArrayItem.FOOD_CD,
foodNameKr: apiResponseBodyArrayItem.FOOD_NM_KR,
dbGroupCode: apiResponseBodyArrayItem.DB_GRP_CM,
dbGroupName: apiResponseBodyArrayItem.DB_GRP_NM,
foodOriginCode: apiResponseBodyArrayItem.FOOD_OR_CD,
foodOriginName: apiResponseBodyArrayItem.FOOD_OR_NM,
foodCategory1Code: apiResponseBodyArrayItem.FOOD_CAT1_CD,
foodCategory1Name: apiResponseBodyArrayItem.FOOD_CAT1_NM,
foodRepresentCode: apiResponseBodyArrayItem.FOOD_REF_CD,
foodRepresentName: apiResponseBodyArrayItem.FOOD_REF_NM,
foodCategory2Code: apiResponseBodyArrayItem.FOOD_CAT2_CD,
foodCategory2Name: apiResponseBodyArrayItem.FOOD_CAT2_NM,
foodCategory3Code: apiResponseBodyArrayItem.FOOD_CAT3_CD,
foodCategory3Name: apiResponseBodyArrayItem.FOOD_CAT3_NM,
foodCategory4Code: apiResponseBodyArrayItem.FOOD_CAT4_CD,
foodCategory4Name: apiResponseBodyArrayItem.FOOD_CAT4_NM,
servingSize: apiResponseBodyArrayItem.SERVING_SIZE,
subReferenceCode: apiResponseBodyArrayItem.SUB_REF_CM,
subReferenceName: apiResponseBodyArrayItem.SUB_REF_NAME,
nutritionalAmountPerServing: apiResponseBodyArrayItem.NUTRI_AMOUNT_SERVING,
foodWeight: apiResponseBodyArrayItem.Z10500,
itemReportNum: apiResponseBodyArrayItem.ITEM_REPORT_NO,
makerName: apiResponseBodyArrayItem.MAKER_NM,
importManufacturerName: apiResponseBodyArrayItem.IMP_MANUFAC_NM,
sellerManufacturerName: apiResponseBodyArrayItem.SELLER_MANUFAC_NM,
importYesOrNo: apiResponseBodyArrayItem.IMP_YN,
nationCode: apiResponseBodyArrayItem.NATION_CM,
nationName: apiResponseBodyArrayItem.NATION_NM,
creationMethodCode: apiResponseBodyArrayItem.CRT_MTH_CD,
creationMethodName: apiResponseBodyArrayItem.CRT_MTH_NM,
researchDate: apiResponseBodyArrayItem.RESEARCH_YMD,
updateDate: apiResponseBodyArrayItem.UPDATE_DATE,
nutritionComponents: toNutritionComponent(apiResponseBodyArrayItem),
});
}
/**
* toAmtCodeTypeResponse AmtNumDataType 객체 AmtCodeTypeResponse 으로 전환
* @param amtNumDataType - AmtNumDataType 객체
*/
export function toAmtCodeTypeResponse(amtNumDataType: typeof AmtNumDataType): AmtCodeTypeResponse {
const amtCodeTypeItems = Object.keys(amtNumDataType)
.map(code => {
return new AmtCodeTypeItem({
code,
label: amtNumDataType[code].label,
name: amtNumDataType[code].name,
unit: amtNumDataType[code].unit,
});
});
return new AmtCodeTypeResponse(amtCodeTypeItems);
}