250 lines
8.1 KiB
TypeScript
250 lines
8.1 KiB
TypeScript
import { getFetchWithCount, postFectch, putFectch } from "@/components/lib/api";
|
|
import { upHeadList, type chgBuilding } from "../rainReg";
|
|
|
|
import type { TableUpperProps } from "@/app/store/common/type/header";
|
|
import toast from "react-hot-toast";
|
|
import { z } from "zod";
|
|
import { makeMdfr, makeRstr } from "../bdstReg";
|
|
import { baseReuseBuildingSchema, chgBuildingSchema, validationMessages } from "../rainReg/type";
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 중수도시설 등록 (스토어)
|
|
* 재이용시설 등록 - 중수도시설 등록
|
|
* 중수도시설에서 사용하는 api 및 타입 등을 관리한다.
|
|
* */
|
|
export const rswtRegSize =15;
|
|
const rswtrObjSchema = z.object({
|
|
bdstRuseFcltSn: z.number().nullish(),
|
|
orgwtKndCd: z.string({ required_error: validationMessages.requiredSelect("원수 종류") }).min(1, { message: validationMessages.requiredSelect("원수 종류") }),
|
|
filtrTrtmfctCpct: z.number().nullish(),
|
|
filtrTrtmfctProcs: z.string({ required_error: validationMessages.required("주요처리공정") }).min(1, { message: validationMessages.required("주요처리공정") }),
|
|
filtrTrtmfctUsgCd: z.string().default("").nullish(),
|
|
rswtrUsqty: z.number().default(0),
|
|
altUswtrUtztnQnt: z.number().default(0), //안쓰는값
|
|
altUswtrIdntyMthdCd: z.string().default("").nullish(), //안쓰는값
|
|
rgtr: z.string().nullish().default(null),
|
|
mdfr: z.string().nullish().default(null),
|
|
});
|
|
|
|
const rswtBuildingSchema = baseReuseBuildingSchema.extend({
|
|
rswtrObj: rswtrObjSchema,
|
|
})
|
|
|
|
export const rswtZod = z.object({
|
|
bdstInfoSn: z.number().nullish(),
|
|
ctpvCd: z.number({ required_error: '시도를 선택하세요.' }),
|
|
sggCd: z.number({ required_error: '시군구를 선택하세요.' }),
|
|
daddr: z.string().default(""),
|
|
bdstNm: z.string().default(""),
|
|
frstArchPrmsnDt: z.date().default(() => new Date()),
|
|
archChgPrmsnDt: z.coerce.date().nullish().default(null),
|
|
chBuildingYn: z.string().nullish(),
|
|
archArea: z.string().default(''),
|
|
archChgArea: z.number().default(0),
|
|
rgtr: z.string().nullish().default(null),
|
|
mdfr: z.string().nullish().default(null),
|
|
bdstUsgText: z.string().default(""),
|
|
cityText: z.string().default(""),
|
|
sggText: z.string().default(""),
|
|
reuseBuilding: z.array(rswtBuildingSchema).default([]),
|
|
chgBuilding: z.array(chgBuildingSchema).default([]),
|
|
});
|
|
|
|
export type customRswtBdst = z.infer<typeof rswtZod>;
|
|
|
|
const rswtRes: customRswtBdst[] = [];
|
|
|
|
export type rswtFacState = {
|
|
rswt: {
|
|
upHeadList: TableUpperProps[];
|
|
rswtRes: customRswtBdst[];
|
|
rswtResCount: number;
|
|
};
|
|
};
|
|
type rswtFacSActions = {
|
|
initRswt: (code: string | number) => void;
|
|
rswtBdstUpdate: (data: customRswtBdst, code: string | number) => void;
|
|
getRswtBdstData: (pageNation: number, code: string | number) => void;
|
|
rswtBdstSearch: (
|
|
txt: string,
|
|
pageNation: number,
|
|
code: string | number
|
|
) => void;
|
|
rswtBdstReg: (data: customRswtBdst, code: string | number) => void;
|
|
};
|
|
|
|
export type rswtFacType = rswtFacState & rswtFacSActions;
|
|
|
|
export const rswtFacStateExport: rswtFacState = {
|
|
rswt: {
|
|
upHeadList: upHeadList,
|
|
rswtRes: rswtRes,
|
|
rswtResCount: 1,
|
|
},
|
|
};
|
|
|
|
const initFetch = async (code: string | number) => {
|
|
const rswtRes = await getFetchWithCount("wr", `/reuseFc/waterreuseFc/1/${rswtRegSize}/${code}`);
|
|
return rswtRes;
|
|
};
|
|
export const rswtFacActionsExport: (set: any) => rswtFacSActions = (
|
|
set: any
|
|
) => {
|
|
return {
|
|
// 중수도 시설을 조회한다 (시설이름 포함)
|
|
rswtBdstSearch: async (
|
|
txt: string,
|
|
pageNation: number,
|
|
code: string | number
|
|
) => {
|
|
try {
|
|
const rswtRes = await getFetchWithCount(
|
|
"wr",
|
|
`/reuseFc/waterreuseFc/${pageNation}/${rswtRegSize}/${code}` +
|
|
(txt ? `/${txt}` : "")
|
|
);
|
|
set((state: rswtFacState) => {
|
|
return {
|
|
...state,
|
|
rswt: {
|
|
...state.rswt,
|
|
rswtRes: rswtRes.data,
|
|
rswtResCount: rswtRes.count,
|
|
},
|
|
};
|
|
});
|
|
} catch (erTxt) {
|
|
console.log("error", erTxt);
|
|
}
|
|
},
|
|
// 중수도 시설을 조회한다
|
|
getRswtBdstData: async (pageNation: number, code: string | number) => {
|
|
try {
|
|
const rswtRes = await getFetchWithCount(
|
|
"wr",
|
|
`/reuseFc/waterreuseFc/${pageNation}/${rswtRegSize}/${code}`
|
|
);
|
|
console.log(pageNation);
|
|
// 여기서 상태 업데이트
|
|
return set((state: rswtFacState) => ({
|
|
...state,
|
|
rswt: {
|
|
...state.rswt,
|
|
rswtRes: rswtRes.data,
|
|
rswtResCount: rswtRes.count,
|
|
},
|
|
}));
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
},
|
|
// 중수도 시설을 조회한다
|
|
initRswt: async (code: string | number) => {
|
|
try {
|
|
const rswtRes = await initFetch(code);
|
|
return set((state: rswtFacState) => ({
|
|
...state,
|
|
rswt: {
|
|
...state.rswt,
|
|
rswtRes: rswtRes.data,
|
|
rswtResCount: rswtRes.count,
|
|
},
|
|
}));
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
},
|
|
// 중수도 시설에 대한 사항을 업데이트한다
|
|
rswtBdstUpdate: async (data: customRswtBdst, code: string | number) => {
|
|
try {
|
|
const chData = await makeMdfr(data);
|
|
const res = await putFectch("/reuseFc/waterreuseFc", chData);
|
|
if (res.status === 200) {
|
|
if (data.chgBuilding.length > 0) {
|
|
const chPK = data?.bdstInfoSn;
|
|
const makeCh = data.chgBuilding.map((item: chgBuilding) =>
|
|
({
|
|
...item,
|
|
bdstInfoSn: chPK,
|
|
})
|
|
);
|
|
const chch = await postFectch("/reuseFc/chgBuilding", makeCh);
|
|
|
|
if (chch.status === 200) {
|
|
toast.success("중수도 건축물 수정이 완료되었습니다.");
|
|
} else {
|
|
toast.error("중수도 건축물 증축/개축/중축 오류입니다.");
|
|
}
|
|
} else {
|
|
toast.success("중수도 건축물 수정이 완료되었습니다.");
|
|
}
|
|
} else {
|
|
toast.error("중수도 건축물 수정이 완료되었습니다.");
|
|
}
|
|
const rswtRes = await initFetch(code);
|
|
set((state: rswtFacState) => ({
|
|
...state,
|
|
rswt: {
|
|
...state.rswt,
|
|
rswtRes: rswtRes.data,
|
|
rswtResCount: rswtRes.count,
|
|
},
|
|
}));
|
|
|
|
} catch (errorUpdate) {
|
|
toast.error("중수도 건축물 수정 오류입니다.");
|
|
console.error(errorUpdate);
|
|
} finally {
|
|
}
|
|
},
|
|
// 중수도 시설을 등록한다.
|
|
rswtBdstReg: async (data: customRswtBdst, code: string | number) => {
|
|
try {
|
|
const chData = await makeRstr(data);
|
|
const res = await postFectch("/reuseFc/waterreuseFc", chData);
|
|
if (res.status === 200) {
|
|
if (data.chgBuilding.length > 0) {
|
|
|
|
const chPK = res?.data?.bdstInfoSn
|
|
const makeCh = res.data.chgBuilding.map((item: chgBuilding) =>
|
|
({
|
|
...item,
|
|
bdstInfoSn: chPK,
|
|
})
|
|
);
|
|
const chch = await postFectch("/reuseFc/chgBuilding", makeCh);
|
|
|
|
if (chch.status === 200) {
|
|
|
|
console.log('chch.status', chch.status)
|
|
toast.success("건축물(중수도) 및 증축/개축/중축 등록이 완료되었습니다.");
|
|
} else {
|
|
toast.error("건축물(중수도 증축/개축/중축 오류입니다.");
|
|
}
|
|
} else {
|
|
toast.success("건축물(중수도 등록이 완료되었습니다.");
|
|
}
|
|
} else {
|
|
toast.error("건축물(중수도) 등록이 완료하였습니다.");
|
|
}
|
|
const rswtRes = await initFetch(code);
|
|
set((state: rswtFacState) => ({
|
|
...state,
|
|
rain: {
|
|
...state.rswt,
|
|
rswtRes: rswtRes.data,
|
|
rswtResCount: rswtRes.count,
|
|
},
|
|
}));
|
|
} catch (e) {
|
|
console.log("e", e);
|
|
toast.error("등록시 오류가 발생하였습니다.");
|
|
} finally {
|
|
}
|
|
},
|
|
};
|
|
};
|