Files
frontend/apps/wr/app/store/ruseFcltMng/fcltReg/rswtReg/index.tsx
T

247 lines
8.2 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";
const rswtrObjSchema = z.object({
bdstRuseFcltSn: z.number().nullish(),
//wtrUsqty: z.number({ required_error: validationMessages.required("물사용량(m³)") }).positive({ message: validationMessages.required("물사용량(m³)") }),
//oblgTrgtWtrUsqty: z.number().nullish().default(0),
orgwtKndCd: z.string({ required_error: validationMessages.requiredSelect("원수 종류") }).min(1, { message: validationMessages.requiredSelect("원수 종류") }),
filtrTrtmfctCpct: z.number({ required_error: validationMessages.required("처리시설 용량") }),
filtrTrtmfctProcs: z.string({ required_error: validationMessages.required("주요처리공정") }).min(1, { message: validationMessages.required("주요처리공정") }),
filtrTrtmfctUsgCd: z.string().default("").nullish(),
rswtrUsqty: z.number().default(0),
altUswtrUtztnYn: z.enum(["Y", "N"]).nullish(), //안쓰는값
altUswtrKndCd: z.string().default("").nullish(), //안쓰는값
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: {
isInit: boolean;
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: {
isInit: false,
upHeadList: upHeadList,
rswtRes: rswtRes,
rswtResCount: 1,
},
};
const initFetch = async (code: string | number) => {
const rswtRes = await getFetchWithCount("wr", `/reuseFc/waterreuseFc/1/11/${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}/11/${code}` +
(txt ? `/${txt}` : "")
);
set((state: rswtFacState) => {
return {
...state,
rswt: {
...state.rswt,
rswtRes: rswtRes.data,
rswtResCount: rswtRes.count,
isInit: false,
},
};
});
} catch (erTxt) {
console.log("error", erTxt);
}
},
getRswtBdstData: async (pageNation: number, code: string | number) => {
try {
const rswtRes = await getFetchWithCount(
"wr",
`/reuseFc/waterreuseFc/${pageNation}/11/${code}`
);
console.log(pageNation);
// 여기서 상태 업데이트
return set((state: rswtFacState) => ({
...state,
rswt: {
...state.rswt,
rswtRes: rswtRes.data,
rswtResCount: rswtRes.count,
isInit: false,
},
}));
} 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,
isInit: false,
},
}));
} 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,
isInit: false,
},
}));
} 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,
isInit: false,
},
}));
} catch (e) {
console.log("e", e);
toast.error("등록시 오류가 발생하였습니다.");
} finally {
}
},
};
};