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

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 {
}
},
};
};