import type { ObsltPplBusiness, ObsltPplBusinessSaveRequest, ObsltPplImportResult, ObsltPplPage, } from "../model/obslt-ppl-types"; import { deleteData, getData, postRawJson, putData, } from "@/components/lib/api"; const API_PATH = "v1/obsltPplBiz"; const EXCEL_DOWNLOAD_PAGE_SIZE = 500; /** 공통 응답 래퍼가 있는 JSON 응답에서 data를 안전하게 꺼낸다. */ const unwrapData = (body: unknown): T => { if (body && typeof body === "object" && "data" in body) { return (body as { data: T }).data; } return body as T; }; /** 목록 검색조건과 페이지 번호로 활성 사업 목록을 조회한다. */ export const getObsltPplBusinesses = async (params: URLSearchParams): Promise => getData(`${API_PATH}?${params.toString()}`) as Promise; /** 적용된 조회조건을 유지하며 모든 페이지를 순회해 Excel 다운로드 대상 전체를 모은다. */ export const getAllObsltPplBusinesses = async (searchParams: URLSearchParams): Promise => { const rows: ObsltPplBusiness[] = []; let page = 0; let totalPages = 1; while (page < totalPages) { const params = new URLSearchParams(searchParams); params.set("page", String(page)); params.set("size", String(EXCEL_DOWNLOAD_PAGE_SIZE)); params.set("sort", "obsltSwagePplBizSn,asc"); const result = await getObsltPplBusinesses(params); rows.push(...result.content); totalPages = result.totalPages; page += 1; } return rows; }; /** 수정 화면에서 사업 상세 한 건을 조회한다. */ export const getObsltPplBusiness = async (id: string): Promise => getData(`${API_PATH}/${encodeURIComponent(id)}`) as Promise; /** 등록 화면의 입력값으로 사업 한 건을 생성한다. */ export const createObsltPplBusiness = async ( request: ObsltPplBusinessSaveRequest, ): Promise => unwrapData(await postRawJson(API_PATH, request)); /** 수정 화면의 입력값으로 사업 한 건을 갱신한다. */ export const updateObsltPplBusiness = async ( id: string, request: ObsltPplBusinessSaveRequest, ): Promise => putData(`${API_PATH}/${encodeURIComponent(id)}`, request) as Promise; /** 수정 화면에서 선택 사업을 논리삭제한다. */ export const deleteObsltPplBusiness = async (id: string): Promise => { await deleteData(`${API_PATH}/${encodeURIComponent(id)}`); }; /** 브라우저에서 파싱한 두 시트 JSON을 활성행 UPDATE·신규 INSERT 방식으로 저장한다. */ export const uploadObsltPplExcel = async ( rows: ObsltPplBusinessSaveRequest[], ): Promise => unwrapData(await postRawJson(`${API_PATH}/excel/upload`, rows));