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

268 lines
8.4 KiB
TypeScript

import type { TableUpperProps } from "@/app/store/common/type/header";
import { getFetchWithCount, postFectch, putFectch } from "@/components/lib/api";
import toast from "react-hot-toast";
import { z } from "zod";
import { makeMdfr, makeRstr } from "../bdstReg";
import { baseReuseBuildingSchema, chgBuildingSchema, validationMessages } from "./type";
export const TEST_UUID = '2d4b151d-1828-41e0-91d9-4cd28ea1cc7e'
const rainyObjSchema = z.object({
bdstReuseFcltFk: z.number().nullish(),
pntfColKnd: z.string().min(1, { message: validationMessages.requiredSelect("종류") }),
pntfColArea: z.number().nullish(),
dtfcltCpct: z.number().default(0),
filtrTrtmfctYn: z.string().default("Y"),
filtrTrtmfctCpct: z.number().nullish().default(0),
filtrTrtmfctPrs: z.string().default(""),
annRnwtQty: z.number().default(0),
oilqMeasMthd: z.string().default("").nullish(),
rgtr: z.string().nullish(),
mdfr: z.string().nullish(),
});
const rainBuildingSchema = baseReuseBuildingSchema.extend({
rainyObj: rainyObjSchema,
})
export const rainZod = z.object({
bdstInfoSn: z.number().optional(),
ctpvCd: z.number().optional(),
sggCd: z.number().optional(),
daddr: z.string().default(""),
bdstNm: z.string().default(""),
frstArchPrmsnDt: z.date().default(() => new Date()),
archChgPrmsnDt: z.coerce.date().nullish().default(null),
archArea: z.string().default(''),
archChgArea: z.number().default(0),
rgtr: z.string().nullish(),
mdfr: z.string().nullish(),
reuseBuilding: z.array(rainBuildingSchema).default([]),
chgBuilding: z.array(chgBuildingSchema).default([])
})
export type chgBuilding = {
bdstInfoSn?: number | null,
archChgPrmsnDt?: Date,
archChgArea?: string,
bdstChgNm?: string
rgtr?: string | null;
mdfr?: string | null;
}
export type customRainBdst = z.infer<typeof rainZod>
export const upHeadList: TableUpperProps[] = [
{ id: "cityText", title: "시도" },
{ id: "sggText", title: "시군구" },
{ id: "bdstNm", title: "시설명" },
{ id: "daddr", title: "위치" },
{ id: "bdsgUsgText", title: "건축물용도" },
{ id: "frstArchPrmsnDt", title: "최초건축허가일" },
{ id: "archArea", title: "건축면적(㎡)" },
{ id: "lawTrgtYn", title: "법적의무대상여부" },
{ id: "bdstChgYn", title: "건축물변경여부" },
];
const rainRes: customRainBdst[] = [];
export const selectClass = "w-full h-full !text-xl";
export type rainFacState = {
rain: {
isInit: boolean;
upHeadList: TableUpperProps[];
rainRes: customRainBdst[];
rainResCount: number;
};
};
type rainFacSActions = {
initRain: (code: string | number) => void;
getRainData: (pageNation: number, code: string | number) => void;
rainSearch: (txt: string, pageNation: number, code: string | number) => void;
rainBdstReg: (data: customRainBdst, code: string | number) => void;
rainBdstUpdate: (data: customRainBdst, code: string | number) => void;
};
export type rainFacType = rainFacState & rainFacSActions;
export const rainFacStateExport: rainFacState = {
rain: {
isInit: false,
rainRes: rainRes,
rainResCount: 1,
upHeadList: upHeadList,
},
};
const initFetch = async (code: string | number) => {
// const rainRes =await getFetch("wr", `/reuseFc/rainyInfoList/1/10/${code}`);
const rainRes = await getFetchWithCount("wr", `/reuseFc/rainyInfoList/1/11/${code}`);
return rainRes;
};
export const rainFacActionsExport: (set: any) => rainFacSActions = (
set: any
) => {
return {
getRainData: async (pageNation: number, code: string | number) => {
try {
const rainRes = await getFetchWithCount("wr", `/reuseFc/rainyInfoList/${pageNation}/11/${code}`);
// 여기서 상태 업데이트
return set((state: rainFacState) => ({
...state,
rain: {
...state.rain,
rainRes: rainRes.data,
rainResCount: rainRes.count,
isInit: false,
},
}));
} catch (e) {
console.log(e)
}
},
initRain: async (code: string | number) => {
try {
// 파라이터 수정 통합관리자 =0, 시관리자=시코드, 시군구 관리자= 시군구 코드 를 세번째 파라미터로 지정 / 건축물 서치가 있을경우 4번째 파라미터로 던지기 즉 1/20/42(서울시)/영현빌딩 이런식으로)
const rainRes = await initFetch(code);
// 여기서 상태 업데이트
return set((state: rainFacState) => ({
...state,
rain: {
...state.rain,
rainRes: rainRes.data,
rainResCount: rainRes.count,
isInit: false,
},
}));
} catch (error) {
console.log("error", error);
}
},
rainSearch: async (txt: string, pageNation: number) => {
try {
// const rainRes = await getFetch('wr' , `/reuseFc/rainyInfoList/${pageNation}/20/41` +(txt? `/${txt}`:''))
const rainRes = await getFetchWithCount('wr', `/reuseFc/rainyInfoList/${pageNation}/11/41` + (txt ? `/${txt}` : ''))
console.log("rainRes", rainRes)
set((state: rainFacState) => {
return {
rain: {
...state.rain,
rainRes: rainRes.data,
rainResCount: rainRes.count,
isInit: false,
},
};
})
}
catch (erTxt) {
console.log("error", erTxt)
}
},
rainBdstReg: async (data: customRainBdst, code: string | number) => {
try {
const test = await makeRstr(data);
const res = await postFectch("/reuseFc/rainyInfo", test);
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) {
toast.success("건축물 등록이 완료되었습니다.");
} else {
toast.error("건축물 증축/개축/중축 오류입니다.");
}
} else {
toast.success("건축물 등록이 완료되었습니다.");
}
} else {
toast.error("건축물 등록이 완료되었습니다.");
}
const rainRes = await initFetch(code);
set((state: rainFacState) => ({
...state,
rain: {
...state.rain,
rainRes: rainRes.data,
rainResCount: rainRes.count,
isInit: false,
},
}));
} catch (e) {
console.log("e", e);
toast.error("등록시 오류가 발생하였습니다.");
} finally {
}
},
rainBdstUpdate: async (data: customRainBdst, code: string | number) => {
try {
const chData = await makeMdfr(data);
const res = await putFectch("/reuseFc/rainyInfo", chData);
console.log("res", res)
console.log("data", data)
if (res.status === 200) {
if (data.chgBuilding.length > 0) {
const chPK = data?.bdstInfoSn;
console.log("chPK", chPK)
const makeCh = data.chgBuilding.map((item: chgBuilding) =>
({
...item,
bdstInfoSn: chPK,
})
);
console.log("makeCh", makeCh)
const chch = await postFectch("/reuseFc/chgBuilding", makeCh);
console.log("chch", chch)
if (chch.status === 200) {
toast.success("건축물 수정이 완료되었습니다.");
} else {
toast.error("건축물 증축/개축/중축 오류입니다.");
}
} else {
toast.success("건축물 수정이 완료되었습니다.");
}
} else {
toast.error("건축물 수정이 완료되었습니다.");
}
// }
// toast.success("수정이 완료되었습니다.");
// }
const rainRes = await initFetch(code);
set((state: rainFacState) => ({
...state,
rain: {
...state.rain,
rainRes: rainRes.data,
rainResCount: rainRes.count,
isInit: false,
},
}));
} catch (e) {
console.log("e", e);
toast.error("수정시 오류가 발생하였습니다.");
} finally {
}
}
}
}