diff --git a/apps/as/src/entities/sewer-bsc-plan/api/queries.ts b/apps/as/src/entities/sewer-bsc-plan/api/queries.ts new file mode 100644 index 000000000..063e1bd00 --- /dev/null +++ b/apps/as/src/entities/sewer-bsc-plan/api/queries.ts @@ -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], + }); + }, + }); +} diff --git a/apps/as/src/entities/sewer-bsc-plan/api/sewer-bsc-plan-service.ts b/apps/as/src/entities/sewer-bsc-plan/api/sewer-bsc-plan-service.ts new file mode 100644 index 000000000..eab17428e --- /dev/null +++ b/apps/as/src/entities/sewer-bsc-plan/api/sewer-bsc-plan-service.ts @@ -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> { + const response = await client.get>(BASE, { + params, + }); + return response.data; +} + +async function findById(sewerBscPlanDocNo: string): Promise { + const response = await client.get(`${BASE}/${sewerBscPlanDocNo}`); + return response.data; +} + +async function save(body: SewerBscPlanSaveRequestDto): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function update( + sewerBscPlanDocNo: string, + body: SewerBscPlanUpdateRequestDto, +): Promise { + const response = await client.put(`${BASE}/${sewerBscPlanDocNo}`, body); + return response.data; +} + +async function deleteFn(sewerBscPlanDocNo: string): Promise { + await client.delete(`${BASE}/${sewerBscPlanDocNo}`); +} + +async function saveApply(body: SewerBscPlanApplySaveRequestDto): Promise { + const response = await client.post(`${BASE}/save-apply`, body); + return response.data; +} + +async function findDetails( + sewerBscPlanDocNo: string, + chgCycl: number, +): Promise { + const response = await client.get( + `${BASE}/${sewerBscPlanDocNo}/dtl/${chgCycl}`, + ); + return response.data; +} + +async function submitSupplement( + id: string, + body: SewerBscPlanApplySaveRequestDto, +): Promise { + const response = await client.post(`${BASE}/${id}/submitsupplement`, body); + return response.data; +} + +async function submitReqSupplement( + id: string, + chgCycl: number, + body: SewerBscPlanApplySaveRequestDto, +): Promise { + const response = await client.post(`${BASE}/${id}/${chgCycl}/reqsupplement`, body); + return response.data; +} + +async function techReview(id: string, body: SewerBscPlanApplySaveRequestDto): Promise { + await client.post(`${BASE}/${id}/tech-review`, body); +} + +export const sewerBscPlanService = { + findPage, + findById, + save, + update, + delete: deleteFn, + saveApply, + findDetails, + submitSupplement, + submitReqSupplement, + techReview, +} satisfies SewerBscPlanService; diff --git a/apps/as/src/entities/sewer-bsc-plan/index.ts b/apps/as/src/entities/sewer-bsc-plan/index.ts new file mode 100644 index 000000000..08dec87a7 --- /dev/null +++ b/apps/as/src/entities/sewer-bsc-plan/index.ts @@ -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"; diff --git a/apps/as/src/entities/sewer-bsc-plan/model/sewer-bsc-plan-interface.ts b/apps/as/src/entities/sewer-bsc-plan/model/sewer-bsc-plan-interface.ts new file mode 100644 index 000000000..13485f5e4 --- /dev/null +++ b/apps/as/src/entities/sewer-bsc-plan/model/sewer-bsc-plan-interface.ts @@ -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>; + findById(sewerBscPlanDocNo: string): Promise; + save(body: SewerBscPlanSaveRequestDto): Promise; + update( + sewerBscPlanDocNo: string, + body: SewerBscPlanUpdateRequestDto, + ): Promise; + delete(sewerBscPlanDocNo: string): Promise; + saveApply(body: SewerBscPlanApplySaveRequestDto): Promise; + findDetails(sewerBscPlanDocNo: string, chgCycl: number): Promise; + submitSupplement(id: string, body: SewerBscPlanApplySaveRequestDto): Promise; + submitReqSupplement( + id: string, + chgCycl: number, + body: SewerBscPlanApplySaveRequestDto, + ): Promise; + techReview(id: string, body: SewerBscPlanApplySaveRequestDto): Promise; +} diff --git a/apps/as/src/shared/config/api.ts b/apps/as/src/shared/config/api.ts index 98992a063..ab4c18af8 100644 --- a/apps/as/src/shared/config/api.ts +++ b/apps/as/src/shared/config/api.ts @@ -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",