UNPKG

k-mfds-fooddb-mcp-server

Version:

식품의약품안전처 식품영양성분DB를 MCP 도구로 제공합니다.

94 lines (88 loc) 4.01 kB
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); }