/* ============================================================================= * M01_MasterData_Machine_Api.ts * M01 기계 화면 서버 호출(PLAN 821-2) — 양식 목록 · 시간당 경비 · 쓰는 곳 · 비슷한 기계 찾기 · 한 줄. * 서버 = `M01_MasterData_Machine.py` · 시스템 관리자만. * ========================================================================== */ import { API_BASE_URL } from "@config/config_frontend"; import type { MachinePick } from "@ui/ui_template_machine_form"; import type { Row } from "./M01_MasterData_Api_Fetch"; export interface MachineLists { fuels: MachinePick[]; jobs: MachinePick[]; power: number; hour: number; books: string[]; /** 구분 → 원문 */ groups: Record; } export interface MachineHourly { 노무비?: number; 재료비?: number; 경비?: number; 계?: number; reason?: string; } async function get(path: string, params: Record = {}): Promise { const query = new URLSearchParams(params); const res = await fetch(`${API_BASE_URL}/m01/machine${path}?${query}`, { credentials: "include", }); const body = (await res.json()) as T & { detail?: unknown }; if (!res.ok) throw new Error(String(body.detail ?? `HTTP ${res.status}`)); return body; } let lists: Promise | null = null; /** 한 번 받아 둠(페이지 다시 그리면 다시 받음) */ export const fetchMachineLists = (fresh = false): Promise => { if (!lists || fresh) lists = get("/lists").catch((e) => ((lists = null), Promise.reject(e))); return lists; }; export const fetchMachineHourly = (keys: string[]): Promise> => keys.length ? get("/hourly", { keys: keys.join(",") }) : Promise.resolve({}); export const fetchMachineUses = async (key: string): Promise => (await get<{ uses: string[] }>("/uses", { key })).uses; export const findMachines = async (q: string): Promise => (await get<{ rows: Row[] }>("/find", { q })).rows; export const fetchMachineRow = (key: string): Promise<{ version: string; row: Row }> => get("/row", { key });