[as] feat: 기본계획 엔티티 생성

This commit is contained in:
2026-07-23 17:41:16 +09:00
parent b388edb23c
commit cad87496ac
5 changed files with 625 additions and 0 deletions
@@ -0,0 +1,138 @@
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { ENDPOINT } from "@/shared/config";
import type {
SewerBscPlanApplySaveRequestDto,
SewerBscPlanSaveRequestDto,
SewerBscPlanSearchRequestDto,
SewerBscPlanUpdateRequestDto,
} from "../model/sewer-bsc-plan-interface";
import { sewerBscPlanService } from "./sewer-bsc-plan-service";
export const sewerBscPlanBaseKey = [ENDPOINT.AS_SERVICE.SEWER_BSC_PLAN] as const;
export function useSewerBscPlanPage(params: SewerBscPlanSearchRequestDto) {
return useQuery({
queryKey: [...sewerBscPlanBaseKey, "findPage", params],
queryFn: () => sewerBscPlanService.findPage(params),
});
}
export function useSewerBscPlan(sewerBscPlanDocNo: string | null | undefined) {
return useQuery({
queryKey: [...sewerBscPlanBaseKey, "findById", sewerBscPlanDocNo],
queryFn: () => sewerBscPlanService.findById(sewerBscPlanDocNo!),
enabled: Boolean(sewerBscPlanDocNo),
});
}
export function useSewerBscPlanDetails(
sewerBscPlanDocNo: string | null | undefined,
chgCycl: number | null | undefined,
) {
return useQuery({
queryKey: [...sewerBscPlanBaseKey, "findDetails", sewerBscPlanDocNo, chgCycl],
queryFn: () => sewerBscPlanService.findDetails(sewerBscPlanDocNo!, chgCycl!),
enabled: Boolean(sewerBscPlanDocNo) && chgCycl != null,
});
}
export function useSaveSewerBscPlan() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (body: SewerBscPlanSaveRequestDto) => sewerBscPlanService.save(body),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: sewerBscPlanBaseKey });
},
});
}
export function useUpdateSewerBscPlan() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
sewerBscPlanDocNo,
body,
}: {
sewerBscPlanDocNo: string;
body: SewerBscPlanUpdateRequestDto;
}) => sewerBscPlanService.update(sewerBscPlanDocNo, body),
onSuccess: (_data, { sewerBscPlanDocNo }) => {
queryClient.invalidateQueries({ queryKey: sewerBscPlanBaseKey });
queryClient.invalidateQueries({
queryKey: [...sewerBscPlanBaseKey, "findById", sewerBscPlanDocNo],
});
},
});
}
export function useDeleteSewerBscPlan() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (sewerBscPlanDocNo: string) => sewerBscPlanService.delete(sewerBscPlanDocNo),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: sewerBscPlanBaseKey });
},
});
}
export function useSaveApplySewerBscPlan() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (body: SewerBscPlanApplySaveRequestDto) => sewerBscPlanService.saveApply(body),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: sewerBscPlanBaseKey });
},
});
}
export function useSubmitSupplementSewerBscPlan() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, body }: { id: string; body: SewerBscPlanApplySaveRequestDto }) =>
sewerBscPlanService.submitSupplement(id, body),
onSuccess: (_data, { id }) => {
queryClient.invalidateQueries({ queryKey: sewerBscPlanBaseKey });
queryClient.invalidateQueries({
queryKey: [...sewerBscPlanBaseKey, "findById", id],
});
},
});
}
export function useSubmitReqSupplementSewerBscPlan() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
id,
chgCycl,
body,
}: {
id: string;
chgCycl: number;
body: SewerBscPlanApplySaveRequestDto;
}) => sewerBscPlanService.submitReqSupplement(id, chgCycl, body),
onSuccess: (_data, { id }) => {
queryClient.invalidateQueries({ queryKey: sewerBscPlanBaseKey });
queryClient.invalidateQueries({
queryKey: [...sewerBscPlanBaseKey, "findById", id],
});
},
});
}
export function useTechReviewSewerBscPlan() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, body }: { id: string; body: SewerBscPlanApplySaveRequestDto }) =>
sewerBscPlanService.techReview(id, body),
onSuccess: (_data, { id }) => {
queryClient.invalidateQueries({ queryKey: sewerBscPlanBaseKey });
queryClient.invalidateQueries({
queryKey: [...sewerBscPlanBaseKey, "findById", id],
});
},
});
}
@@ -0,0 +1,95 @@
import { client } from "@/shared/api";
import { ENDPOINT } from "@/shared/config";
import type { PageResponse } from "@/shared/model";
import type {
SewerBscPlanApplySaveRequestDto,
SewerBscPlanDetResponseDto,
SewerBscPlanResponseDto,
SewerBscPlanSaveRequestDto,
SewerBscPlanSearchRequestDto,
SewerBscPlanService,
SewerBscPlanUpdateRequestDto,
} from "../model/sewer-bsc-plan-interface";
const BASE = ENDPOINT.AS_SERVICE.SEWER_BSC_PLAN;
async function findPage(
params: SewerBscPlanSearchRequestDto,
): Promise<PageResponse<SewerBscPlanResponseDto>> {
const response = await client.get<PageResponse<SewerBscPlanResponseDto>>(BASE, {
params,
});
return response.data;
}
async function findById(sewerBscPlanDocNo: string): Promise<SewerBscPlanResponseDto> {
const response = await client.get<SewerBscPlanResponseDto>(`${BASE}/${sewerBscPlanDocNo}`);
return response.data;
}
async function save(body: SewerBscPlanSaveRequestDto): Promise<SewerBscPlanResponseDto> {
const response = await client.post<SewerBscPlanResponseDto>(BASE, body);
return response.data;
}
async function update(
sewerBscPlanDocNo: string,
body: SewerBscPlanUpdateRequestDto,
): Promise<SewerBscPlanResponseDto> {
const response = await client.put<SewerBscPlanResponseDto>(`${BASE}/${sewerBscPlanDocNo}`, body);
return response.data;
}
async function deleteFn(sewerBscPlanDocNo: string): Promise<void> {
await client.delete<void>(`${BASE}/${sewerBscPlanDocNo}`);
}
async function saveApply(body: SewerBscPlanApplySaveRequestDto): Promise<string> {
const response = await client.post<string>(`${BASE}/save-apply`, body);
return response.data;
}
async function findDetails(
sewerBscPlanDocNo: string,
chgCycl: number,
): Promise<SewerBscPlanDetResponseDto> {
const response = await client.get<SewerBscPlanDetResponseDto>(
`${BASE}/${sewerBscPlanDocNo}/dtl/${chgCycl}`,
);
return response.data;
}
async function submitSupplement(
id: string,
body: SewerBscPlanApplySaveRequestDto,
): Promise<string> {
const response = await client.post<string>(`${BASE}/${id}/submitsupplement`, body);
return response.data;
}
async function submitReqSupplement(
id: string,
chgCycl: number,
body: SewerBscPlanApplySaveRequestDto,
): Promise<string> {
const response = await client.post<string>(`${BASE}/${id}/${chgCycl}/reqsupplement`, body);
return response.data;
}
async function techReview(id: string, body: SewerBscPlanApplySaveRequestDto): Promise<void> {
await client.post<void>(`${BASE}/${id}/tech-review`, body);
}
export const sewerBscPlanService = {
findPage,
findById,
save,
update,
delete: deleteFn,
saveApply,
findDetails,
submitSupplement,
submitReqSupplement,
techReview,
} satisfies SewerBscPlanService;
@@ -0,0 +1,46 @@
export { sewerBscPlanBaseKey } from "./api/queries";
export {
useDeleteSewerBscPlan,
useSaveApplySewerBscPlan,
useSaveSewerBscPlan,
useSewerBscPlan,
useSewerBscPlanDetails,
useSewerBscPlanPage,
useSubmitReqSupplementSewerBscPlan,
useSubmitSupplementSewerBscPlan,
useTechReviewSewerBscPlan,
useUpdateSewerBscPlan,
} from "./api/queries";
export { sewerBscPlanService } from "./api/sewer-bsc-plan-service";
export type {
AtflMngClientResponseDto,
CklstResultItem,
CklstRvwRsltTreeDto,
EsntlAtchFileItem,
EsntlAtchFileMngTreeResponseDto,
SewerBscPlanApplySaveRequestDto,
SewerBscPlanBizCstItem,
SewerBscPlanBizCstResponseDto,
SewerBscPlanDetResponseDto,
SewerBscPlanDtlResponseDto,
SewerBscPlanDtlSaveRequestDto,
SewerBscPlanFnrsCstItem,
SewerBscPlanFnrsCstResponseDto,
SewerBscPlanOtlnItem,
SewerBscPlanOtlnResponseDto,
SewerBscPlanResponseDto,
SewerBscPlanRvwOpnnItem,
SewerBscPlanRvwOpnnResponseDto,
SewerBscPlanSaveRequestDto,
SewerBscPlanSearchRequestDto,
SewerBscPlanService,
SewerBscPlanSplmntDmndItem,
SewerBscPlanSplmntDmndResponseDto,
SewerBscPlanTmplntDtlItem,
SewerBscPlanTmplntDtlResponseDto,
SewerBscPlanTmplntItem,
SewerBscPlanTmplntResponseDto,
SewerBscPlanTmplntTmprStrgItem,
SewerBscPlanTmplntTmprStrgResponseDto,
SewerBscPlanUpdateRequestDto,
} from "./model/sewer-bsc-plan-interface";
@@ -0,0 +1,345 @@
import type {
AtflMngClientResponseDto,
CklstResultSaveBase,
CklstRvwRsltTreeDto,
EsntlAtchFileMngTreeResponseDto,
EsntlAtchFileSaveBase,
PageableParams,
PageResponse,
PbadmsApplySaveHeader,
RvwOpnnResponseExtension,
RvwOpnnSaveBase,
SplmntDmndResponseExtension,
SplmntDmndSaveBase,
} from "@/shared/model";
export type {
AtflMngClientResponseDto,
CklstRvwRsltTreeDto,
EsntlAtchFileMngTreeResponseDto,
} from "@/shared/model";
/** 백엔드 SewerBscPlanSaveRequestDto */
export interface SewerBscPlanSaveRequestDto {
sewerBscPlanDocNo?: string;
admdstCd?: string;
envoSeComCd?: string;
sewerBscPlanSeComCd?: string;
sewerBscPlanNm?: string;
taskSeComCd?: string;
prgrsSttsComCd?: string;
}
/** 백엔드 SewerBscPlanUpdateRequestDto */
export interface SewerBscPlanUpdateRequestDto {
admdstCd?: string;
envoSeComCd?: string;
sewerBscPlanSeComCd?: string;
sewerBscPlanNm?: string;
taskSeComCd?: string;
prgrsSttsComCd?: string;
}
/** 백엔드 SewerBscPlanSearchRequestDto + Pageable */
export interface SewerBscPlanSearchRequestDto extends PageableParams {
sewerBscPlanDocNo?: string;
admdstCd?: string;
envoSeComCd?: string;
sewerBscPlanSeComCd?: string;
sewerBscPlanNm?: string;
taskSeComCd?: string;
}
/** 백엔드 SewerBscPlanResponseDto */
export interface SewerBscPlanResponseDto {
sewerBscPlanDocNo: string;
admdstCd?: string;
envoSeComCd?: string;
envoSeCdNm?: string;
sewerBscPlanSeComCd?: string;
sewerBscPlanSeCdNm?: string;
sewerBscPlanNm?: string;
taskSeComCd?: string;
taskSeCdNm?: string;
prgrsSttsComCd?: string;
prgrsSttsCdNm?: string;
sido?: string;
gugun?: string;
chgCycl?: number;
regDt?: string;
rgtr?: string;
rgtrNm?: string;
mdfcnDt?: string;
}
/** 백엔드 SewerBscPlanDtlSaveRequestDto */
export interface SewerBscPlanDtlSaveRequestDto {
sewerBscPlanDocNo?: string;
chgCycl?: number;
aplcntNm?: string;
aplcntMblTelno?: string;
aplcntOgdpNm?: string;
aplcntEmlAddr?: string;
dsgnrNm?: string;
dsgnrTelno?: string;
dsgnrOgdpNm?: string;
dsgnrEmlAddr?: string;
planYr?: string;
crtrYr?: string;
bizOtlnCn?: string;
frlvlGoalYr?: string;
sclvlGoalYr?: string;
thlvlGoalYr?: string;
folvlGoalYr?: string;
atchFileGroupId?: string;
}
/** 백엔드 SewerBscPlanDtlResponseDto */
export interface SewerBscPlanDtlResponseDto {
sewerBscPlanDocNo?: string;
chgCycl?: number;
aplcntNm?: string;
aplcntMblTelno?: string;
aplcntOgdpNm?: string;
aplcntEmlAddr?: string;
dsgnrNm?: string;
dsgnrTelno?: string;
dsgnrOgdpNm?: string;
dsgnrEmlAddr?: string;
planYr?: string;
crtrYr?: string;
bizOtlnCn?: string;
frlvlGoalYr?: string;
sclvlGoalYr?: string;
thlvlGoalYr?: string;
folvlGoalYr?: string;
atchFileGroupId?: string;
}
/** 백엔드 SewerBscPlanOtlnResponseDto */
export interface SewerBscPlanOtlnResponseDto {
sewerBscPlanDocNo?: string;
chgCycl?: number;
planStpNo?: number;
sewerPlanPpltnCnt?: number;
sewerPrcsPpltnCnt?: number;
sewerPsplyRt?: number;
}
/** 백엔드 SewerBscPlanFnrsCstResponseDto */
export interface SewerBscPlanFnrsCstResponseDto {
sewerBscPlanDocNo?: string;
chgCycl?: number;
planStpNo?: number;
gvexpAmt?: number;
lcexpAmt?: number;
orgprBdchgAmt?: number;
etcAmt?: number;
sumAmt?: number;
}
/** 백엔드 SewerBscPlanBizCstResponseDto */
export interface SewerBscPlanBizCstResponseDto {
sewerBscPlanDocNo?: string;
chgCycl?: number;
planStpNo?: number;
acntgSeCd?: string;
cstrnAmt?: number;
}
/** 백엔드 SewerBscPlanSplmntDmndResponseDto */
export interface SewerBscPlanSplmntDmndResponseDto
extends SplmntDmndSaveBase, SplmntDmndResponseExtension {
sewerBscPlanDocNo?: string;
chgCycl?: number;
}
/** 백엔드 SewerBscPlanRvwOpnnResponseDto */
export interface SewerBscPlanRvwOpnnResponseDto extends RvwOpnnSaveBase, RvwOpnnResponseExtension {
sewerBscPlanDocNo?: string;
chgCycl?: number;
}
/** 백엔드 SewerBscPlanTmplntDtlResponseDto */
export interface SewerBscPlanTmplntDtlResponseDto {
sewerBscPlanDocNo?: string;
chgCycl?: number;
planStpNo?: number;
swtrmtFcltCd?: string;
prcsZoneArea?: number;
swtrmtPpltnCnt?: number;
planSwqty?: number;
fcltCpct?: number;
sprsysDrtwPplLen?: number;
sprsysExlnPplLen?: number;
cbsysPplLen?: number;
icptgPplLen?: number;
drgCnt?: number;
drtwRlyPumpCnt?: number;
drtwPumpCnt?: number;
exlnPumpCnt?: number;
}
/** 백엔드 SewerBscPlanTmplntResponseDto */
export interface SewerBscPlanTmplntResponseDto {
sewerBscPlanDocNo?: string;
chgCycl?: number;
swtrmtFcltCd?: string;
swtrmtFcltNm?: string;
atchFileGroupId?: string;
atchFileInfo?: AtflMngClientResponseDto;
sewerBscPlanTmplntDtlList?: SewerBscPlanTmplntDtlResponseDto[];
}
/** 백엔드 SewerBscPlanTmplntTmprStrgResponseDto */
export interface SewerBscPlanTmplntTmprStrgResponseDto {
swtrmtFcltCd?: string;
rgtr?: string;
dtStrgDt?: string;
prcsZoneArea?: number;
swtrmtPpltnCnt?: number;
planSwqty?: number;
fcltCpct?: number;
sprsysDrtwPplLen?: number;
sprsysExlnPplLen?: number;
cbsysPplLen?: number;
icptgPplLen?: number;
drgCnt?: number;
drtwRlyPumpCnt?: number;
drtwPumpCnt?: number;
exlnPumpCnt?: number;
}
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanOtlnItem */
export interface SewerBscPlanOtlnItem {
planStpNo?: number;
sewerPlanPpltnCnt?: number;
sewerPrcsPpltnCnt?: number;
sewerPsplyRt?: number;
}
/** 백엔드 SewerBscPlanApplySaveRequestDto.CklstResultItem */
export interface CklstResultItem extends CklstResultSaveBase {
selected?: string;
}
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanFnrsCstItem */
export interface SewerBscPlanFnrsCstItem {
planStpNo?: number;
gvexpAmt?: number;
lcexpAmt?: number;
orgprBdchgAmt?: number;
etcAmt?: number;
sumAmt?: number;
}
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanSplmntDmndItem */
export type SewerBscPlanSplmntDmndItem = SplmntDmndSaveBase;
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanRvwOpnnItem */
export type SewerBscPlanRvwOpnnItem = RvwOpnnSaveBase;
/** 백엔드 SewerBscPlanApplySaveRequestDto.EsntlAtchFileItem */
export type EsntlAtchFileItem = EsntlAtchFileSaveBase;
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanBizCstItem */
export interface SewerBscPlanBizCstItem {
planStpNo?: number;
acntgSeCd?: string;
cstrnAmt?: number;
}
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanTmplntDtlItem */
export interface SewerBscPlanTmplntDtlItem {
planStpNo?: number;
swtrmtFcltCd?: string;
prcsZoneArea?: number;
swtrmtPpltnCnt?: number;
planSwqty?: number;
fcltCpct?: number;
sprsysDrtwPplLen?: number;
sprsysExlnPplLen?: number;
cbsysPplLen?: number;
icptgPplLen?: number;
drgCnt?: number;
drtwRlyPumpCnt?: number;
drtwPumpCnt?: number;
exlnPumpCnt?: number;
}
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanTmplntItem */
export interface SewerBscPlanTmplntItem {
swtrmtFcltCd?: string;
atchFileGroupId?: string;
sewerBscPlanTmplntDtlList?: SewerBscPlanTmplntDtlItem[];
}
/** 백엔드 SewerBscPlanApplySaveRequestDto.SewerBscPlanTmplntTmprStrgItem */
export interface SewerBscPlanTmplntTmprStrgItem {
dtStrgDt?: string;
swtrmtFcltCd?: string;
prcsZoneArea?: number;
swtrmtPpltnCnt?: number;
planSwqty?: number;
fcltCpct?: number;
sprsysDrtwPplLen?: number;
sprsysExlnPplLen?: number;
cbsysPplLen?: number;
icptgPplLen?: number;
drgCnt?: number;
drtwRlyPumpCnt?: number;
drtwPumpCnt?: number;
exlnPumpCnt?: number;
}
/** 백엔드 SewerBscPlanApplySaveRequestDto */
export interface SewerBscPlanApplySaveRequestDto extends PbadmsApplySaveHeader {
sewerBscPlan: SewerBscPlanSaveRequestDto;
sewerBscPlanDtl: SewerBscPlanDtlSaveRequestDto;
sewerBscPlanOtlnList?: SewerBscPlanOtlnItem[];
cklstResultList?: CklstResultItem[];
fnrsCstList?: SewerBscPlanFnrsCstItem[];
splmntDmndList?: SewerBscPlanSplmntDmndItem[];
rvwOpnnList?: SewerBscPlanRvwOpnnItem[];
esntlAtchFileList?: EsntlAtchFileItem[];
bizCstList?: SewerBscPlanBizCstItem[];
sewerBscPlanTmplntList?: SewerBscPlanTmplntItem[];
tmplntTmprStrgList?: SewerBscPlanTmplntTmprStrgItem[];
}
/** 백엔드 SewerBscPlanDetResponseDto */
export interface SewerBscPlanDetResponseDto {
detDto?: SewerBscPlanResponseDto;
activeDtlDto?: SewerBscPlanDtlResponseDto;
otlnList?: SewerBscPlanOtlnResponseDto[];
cklstResultRows?: CklstRvwRsltTreeDto[];
fnrsCstList?: SewerBscPlanFnrsCstResponseDto[];
splmntDmndList?: SewerBscPlanSplmntDmndResponseDto[];
rvwOpnnList?: SewerBscPlanRvwOpnnResponseDto[];
esntlFileList?: EsntlAtchFileMngTreeResponseDto[];
etcFileList?: AtflMngClientResponseDto[];
bizCstList?: SewerBscPlanBizCstResponseDto[];
tmplntList?: SewerBscPlanTmplntResponseDto[];
tmplntTmprStrgList?: SewerBscPlanTmplntTmprStrgResponseDto[];
}
/** Controller public 메서드명·시그니처와 동일 */
export interface SewerBscPlanService {
findPage(params: SewerBscPlanSearchRequestDto): Promise<PageResponse<SewerBscPlanResponseDto>>;
findById(sewerBscPlanDocNo: string): Promise<SewerBscPlanResponseDto>;
save(body: SewerBscPlanSaveRequestDto): Promise<SewerBscPlanResponseDto>;
update(
sewerBscPlanDocNo: string,
body: SewerBscPlanUpdateRequestDto,
): Promise<SewerBscPlanResponseDto>;
delete(sewerBscPlanDocNo: string): Promise<void>;
saveApply(body: SewerBscPlanApplySaveRequestDto): Promise<string>;
findDetails(sewerBscPlanDocNo: string, chgCycl: number): Promise<SewerBscPlanDetResponseDto>;
submitSupplement(id: string, body: SewerBscPlanApplySaveRequestDto): Promise<string>;
submitReqSupplement(
id: string,
chgCycl: number,
body: SewerBscPlanApplySaveRequestDto,
): Promise<string>;
techReview(id: string, body: SewerBscPlanApplySaveRequestDto): Promise<void>;
}
+1
View File
@@ -22,6 +22,7 @@ export const ENDPOINT = {
DESIGN_CNSTN_BIZ_SCL: "/as-service/api/v1/design-cnstn-biz-scl",
DESIGN_CNSTN_ESNTL_ATCH_FILE: "/as-service/api/v1/design-cnstn-esntl-atch-file",
DESIGN_CNSTN_RVW_OPNN: "/as-service/api/v1/design-cnstn-rvw-opnn",
SEWER_BSC_PLAN: "/as-service/api/v1/sewer-bsc-plans",
},
USER_SERVICE: {
LOGIN: "/user-service/login",