//8880 import { AUTH_USER_ID, CLAIM_NAME } from "@/src/shared/config"; import { getCookie } from "@common/components/lib/cookie"; import { DEV_URL_FO, DEV_URL_WR, LOCAL_URL } from "../config/"; const tokenId = getCookie(AUTH_USER_ID); const Authorization = getCookie(CLAIM_NAME); export const fetchType = { COMMON: "common", WR: "wr", FO: "fo", SN: "sn", LOCAL: "LOCAL", CS: "CS", }; const API_VERSION = "/api/v1" const servers = { common: "", local: "", fo: "/operation-service" + API_VERSION, wr: "/reuse-service" + API_VERSION, sn: "/sewerage-service" + API_VERSION, } interface RequestParams { [key: string]: unknown; } export const getFetch = async (type: string, url: string) => { const baseUrl = servers[type]; const response = await fetch(baseUrl + url, { method: "GET", headers: { accept: "application/json", [AUTH_USER_ID]: tokenId ?? "", [CLAIM_NAME]: Authorization ?? "", }, }); if (!response.ok) { throw new Error(`오류 발생: ${response.status}`); } const res = await response.json(); return res; }; export const getFetchWithCount = async (type: string, url: string) => { const div = type === fetchType.COMMON ? DEV_URL_FO : type === fetchType.LOCAL ? LOCAL_URL : type === fetchType.CS ? "" : DEV_URL_WR; const apiUrl = div + url; const response = await fetch(apiUrl, { method: "GET", headers: { accept: "application/json", }, }); if (!response.ok) { console.log(`오류 발생: ${response.status}`); } const contentType = response.headers.get("content-type") ?? ""; if (contentType.includes("application/json")) { // JSON 응답 처리 const res = await response.json(); return res; } else if(contentType.includes('application/octet-stream')) { // 파일 응답 처리 (ex. PDF, Excel 등) console.log('contentType ' ,contentType) const blob = await response.blob(); const blobUrl = window.URL.createObjectURL(blob); const a = document.createElement("a"); const filename = "downloaded_file.PDF"; a.href = blobUrl; a.download = filename; a.click(); window.URL.revokeObjectURL(blobUrl); return null; // 다운로드이므로 반환값 없음 }else{ throw Error('오류 발생') } }; export const postFetch = async (url: string, params: RequestParams) => { const baseUrl = servers[fetchType.WR]; const response = await fetch(baseUrl + url, { method: "POST", headers: { "Content-Type": "application/json", [AUTH_USER_ID]: tokenId ?? "", [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); if (!response.ok) { throw new Error(`오류 발생: ${response.status}`); } return response; }; export const putFetch = async (url: string, params: RequestParams) => { const baseUrl = servers[fetchType.WR]; const response = await fetch(baseUrl + url, { method: "PUT", headers: { "Content-Type": "application/json", [AUTH_USER_ID]: tokenId ?? "", [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); if (!response.ok) { throw new Error(`오류 발생: ${response.status}`); } return response; }; export const deleteFetch = async (url: string, params: RequestParams) => { const baseUrl = servers[fetchType.WR]; const response = await fetch(baseUrl + url, { method: "DELETE", headers: { "Content-Type": "application/json", [AUTH_USER_ID]: tokenId ?? "", [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); if (!response.ok) { throw new Error(`오류 발생: ${response.status}`); } return response; };