sn: 노후 하수관로 정비사업

This commit is contained in:
2026-08-03 18:16:42 +09:00
parent ce60e5f5fb
commit 2e6a75141b
11 changed files with 662 additions and 0 deletions
@@ -0,0 +1,62 @@
import type {
ObsltPplBusiness,
ObsltPplBusinessSaveRequest,
ObsltPplImportResult,
ObsltPplPage,
} from "../model/obslt-ppl-types";
import {
deleteData,
getBlobData,
getData,
postMutiPart,
postRawJson,
putData,
} from "@/components/lib/api";
const API_PATH = "v1/obsltPplBiz";
/** 공통 응답 래퍼가 있는 JSON 응답에서 data를 안전하게 꺼낸다. */
const unwrapData = <T>(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<ObsltPplPage> =>
getData(`${API_PATH}?${params.toString()}`) as Promise<ObsltPplPage>;
/** 수정 화면에서 사업 상세 한 건을 조회한다. */
export const getObsltPplBusiness = async (id: string): Promise<ObsltPplBusiness> =>
getData(`${API_PATH}/${encodeURIComponent(id)}`) as Promise<ObsltPplBusiness>;
/** 등록 화면의 입력값으로 사업 한 건을 생성한다. */
export const createObsltPplBusiness = async (
request: ObsltPplBusinessSaveRequest,
): Promise<ObsltPplBusiness> =>
unwrapData<ObsltPplBusiness>(await postRawJson(API_PATH, request));
/** 수정 화면의 입력값으로 사업 한 건을 갱신한다. */
export const updateObsltPplBusiness = async (
id: string,
request: ObsltPplBusinessSaveRequest,
): Promise<ObsltPplBusiness> =>
putData(`${API_PATH}/${encodeURIComponent(id)}`, request) as Promise<ObsltPplBusiness>;
/** 수정 화면에서 선택 사업을 논리삭제한다. */
export const deleteObsltPplBusiness = async (id: string): Promise<void> => {
await deleteData(`${API_PATH}/${encodeURIComponent(id)}`);
};
/** 원본 형식 xlsx 한 건을 두 시트 스냅샷으로 교체 저장한다. */
export const uploadObsltPplExcel = async (file: File): Promise<ObsltPplImportResult> => {
const formData = new FormData();
formData.append("file", file);
return postMutiPart(`${API_PATH}/excel/upload`, formData) as Promise<ObsltPplImportResult>;
};
/** 현재 활성 자료를 원본과 호환되는 xlsx로 내려받는다. */
export const downloadObsltPplExcel = async (): Promise<Blob> =>
getBlobData(`${API_PATH}/excel/download`);