diff --git a/apps/as/src/entities/design-cnstn/api/design-cnstn-biz-cst-service.ts b/apps/as/src/entities/design-cnstn/api/design-cnstn-biz-cst-service.ts new file mode 100644 index 000000000..427f6e65a --- /dev/null +++ b/apps/as/src/entities/design-cnstn/api/design-cnstn-biz-cst-service.ts @@ -0,0 +1,58 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + DesignCnstnBizCstId, + DesignCnstnBizCstResponseDto, + DesignCnstnBizCstSaveRequestDto, + DesignCnstnBizCstSearchDto, + DesignCnstnBizCstService, + DesignCnstnBizCstUpdateRequestDto, +} from "../model/design-cnstn-biz-cst-interface"; + +const BASE = ENDPOINT.AS_SERVICE.DESIGN_CNSTN_BIZ_CST; + +async function findPage( + searchDto: DesignCnstnBizCstSearchDto, +): Promise> { + const response = await client.get>(BASE, { + params: searchDto, + }); + return response.data; +} + +async function findById( + designCnstnDocNo: string, + acntgSeCd: string, +): Promise { + const response = await client.get( + `${BASE}/${designCnstnDocNo}/${acntgSeCd}`, + ); + return response.data; +} + +async function save(body: DesignCnstnBizCstSaveRequestDto): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function update( + designCnstnDocNo: string, + acntgSeCd: string, + body: DesignCnstnBizCstUpdateRequestDto, +): Promise { + await client.put(`${BASE}/${designCnstnDocNo}/${acntgSeCd}`, body); +} + +async function deleteDesignCnstnBizCst(designCnstnDocNo: string, acntgSeCd: string): Promise { + await client.delete(`${BASE}/${designCnstnDocNo}/${acntgSeCd}`); +} + +export const designCnstnBizCstService = { + findPage, + findById, + save, + update, + delete: deleteDesignCnstnBizCst, +} satisfies DesignCnstnBizCstService; diff --git a/apps/as/src/entities/design-cnstn/api/design-cnstn-biz-scl-service.ts b/apps/as/src/entities/design-cnstn/api/design-cnstn-biz-scl-service.ts new file mode 100644 index 000000000..d4cc8cabf --- /dev/null +++ b/apps/as/src/entities/design-cnstn/api/design-cnstn-biz-scl-service.ts @@ -0,0 +1,58 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + DesignCnstnBizSclId, + DesignCnstnBizSclResponseDto, + DesignCnstnBizSclSaveRequestDto, + DesignCnstnBizSclSearchDto, + DesignCnstnBizSclService, + DesignCnstnBizSclUpdateRequestDto, +} from "../model/design-cnstn-biz-scl-interface"; + +const BASE = ENDPOINT.AS_SERVICE.DESIGN_CNSTN_BIZ_SCL; + +async function findPage( + searchDto: DesignCnstnBizSclSearchDto, +): Promise> { + const response = await client.get>(BASE, { + params: searchDto, + }); + return response.data; +} + +async function findById( + designCnstnDocNo: string, + cnstpSeCd: string, +): Promise { + const response = await client.get( + `${BASE}/${designCnstnDocNo}/${cnstpSeCd}`, + ); + return response.data; +} + +async function save(body: DesignCnstnBizSclSaveRequestDto): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function update( + designCnstnDocNo: string, + cnstpSeCd: string, + body: DesignCnstnBizSclUpdateRequestDto, +): Promise { + await client.put(`${BASE}/${designCnstnDocNo}/${cnstpSeCd}`, body); +} + +async function deleteDesignCnstnBizScl(designCnstnDocNo: string, cnstpSeCd: string): Promise { + await client.delete(`${BASE}/${designCnstnDocNo}/${cnstpSeCd}`); +} + +export const designCnstnBizSclService = { + findPage, + findById, + save, + update, + delete: deleteDesignCnstnBizScl, +} satisfies DesignCnstnBizSclService; diff --git a/apps/as/src/entities/design-cnstn/api/design-cnstn-esntl-atch-file-service.ts b/apps/as/src/entities/design-cnstn/api/design-cnstn-esntl-atch-file-service.ts new file mode 100644 index 000000000..a47993149 --- /dev/null +++ b/apps/as/src/entities/design-cnstn/api/design-cnstn-esntl-atch-file-service.ts @@ -0,0 +1,63 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + DesignCnstnEsntlAtchFileId, + DesignCnstnEsntlAtchFileResponseDto, + DesignCnstnEsntlAtchFileSaveRequestDto, + DesignCnstnEsntlAtchFileSearchDto, + DesignCnstnEsntlAtchFileService, + DesignCnstnEsntlAtchFileUpdateRequestDto, +} from "../model/design-cnstn-esntl-atch-file-interface"; + +const BASE = ENDPOINT.AS_SERVICE.DESIGN_CNSTN_ESNTL_ATCH_FILE; + +async function findPage( + searchDto: DesignCnstnEsntlAtchFileSearchDto, +): Promise> { + const response = await client.get>(BASE, { + params: searchDto, + }); + return response.data; +} + +async function findById( + designCnstnDocNo: string, + esntlAtchFileId: string, +): Promise { + const response = await client.get( + `${BASE}/${designCnstnDocNo}/${esntlAtchFileId}`, + ); + return response.data; +} + +async function save( + body: DesignCnstnEsntlAtchFileSaveRequestDto, +): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function update( + designCnstnDocNo: string, + esntlAtchFileId: string, + body: DesignCnstnEsntlAtchFileUpdateRequestDto, +): Promise { + await client.put(`${BASE}/${designCnstnDocNo}/${esntlAtchFileId}`, body); +} + +async function deleteDesignCnstnEsntlAtchFile( + designCnstnDocNo: string, + esntlAtchFileId: string, +): Promise { + await client.delete(`${BASE}/${designCnstnDocNo}/${esntlAtchFileId}`); +} + +export const designCnstnEsntlAtchFileService = { + findPage, + findById, + save, + update, + delete: deleteDesignCnstnEsntlAtchFile, +} satisfies DesignCnstnEsntlAtchFileService; diff --git a/apps/as/src/entities/design-cnstn/api/design-cnstn-mng-service.ts b/apps/as/src/entities/design-cnstn/api/design-cnstn-mng-service.ts new file mode 100644 index 000000000..3fc3e52ae --- /dev/null +++ b/apps/as/src/entities/design-cnstn/api/design-cnstn-mng-service.ts @@ -0,0 +1,61 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + DesignCnstnApplySaveRequestDto, + DesignCnstnMngDetResponseDto, + DesignCnstnMngResponseDto, + DesignCnstnMngSaveRequestDto, + DesignCnstnMngSearchDto, + DesignCnstnMngService, + DesignCnstnMngUpdateRequestDto, +} from "../model/design-cnstn-mng-interface"; + +const BASE = ENDPOINT.AS_SERVICE.DESIGN_CNSTN; + +async function findPage( + searchDto: DesignCnstnMngSearchDto, +): Promise> { + const response = await client.get>(BASE, { + params: searchDto, + }); + return response.data; +} + +async function findById(id: string): Promise { + const response = await client.get(`${BASE}/${id}`); + return response.data; +} + +async function save(body: DesignCnstnMngSaveRequestDto): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function saveApply(body: DesignCnstnApplySaveRequestDto): Promise { + const response = await client.post(`${BASE}/save-apply`, body); + return response.data; +} + +async function update(id: string, body: DesignCnstnMngUpdateRequestDto): Promise { + await client.put(`${BASE}/${id}`, body); +} + +async function techReview(id: string, body: DesignCnstnApplySaveRequestDto): Promise { + await client.post(`${BASE}/${id}/tech-review`, body); +} + +async function deleteDesignCnstnMng(id: string): Promise { + await client.delete(`${BASE}/${id}`); +} + +export const designCnstnMngService = { + findPage, + findById, + save, + saveApply, + update, + techReview, + delete: deleteDesignCnstnMng, +} satisfies DesignCnstnMngService; diff --git a/apps/as/src/entities/design-cnstn/api/design-cnstn-rvw-opnn-service.ts b/apps/as/src/entities/design-cnstn/api/design-cnstn-rvw-opnn-service.ts new file mode 100644 index 000000000..514a0423f --- /dev/null +++ b/apps/as/src/entities/design-cnstn/api/design-cnstn-rvw-opnn-service.ts @@ -0,0 +1,61 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + DesignCnstnRvwOpnnId, + DesignCnstnRvwOpnnResponseDto, + DesignCnstnRvwOpnnSaveRequestDto, + DesignCnstnRvwOpnnSearchDto, + DesignCnstnRvwOpnnService, + DesignCnstnRvwOpnnUpdateRequestDto, +} from "../model/design-cnstn-rvw-opnn-interface"; + +const BASE = ENDPOINT.AS_SERVICE.DESIGN_CNSTN_RVW_OPNN; + +async function findPage( + searchDto: DesignCnstnRvwOpnnSearchDto, +): Promise> { + const response = await client.get>(BASE, { + params: searchDto, + }); + return response.data; +} + +async function findById( + designCnstnDocNo: string, + rvwOpnnSn: number, +): Promise { + const response = await client.get( + `${BASE}/${designCnstnDocNo}/${rvwOpnnSn}`, + ); + return response.data; +} + +async function save(body: DesignCnstnRvwOpnnSaveRequestDto): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function update( + designCnstnDocNo: string, + rvwOpnnSn: number, + body: DesignCnstnRvwOpnnUpdateRequestDto, +): Promise { + await client.put(`${BASE}/${designCnstnDocNo}/${rvwOpnnSn}`, body); +} + +async function deleteDesignCnstnRvwOpnn( + designCnstnDocNo: string, + rvwOpnnSn: number, +): Promise { + await client.delete(`${BASE}/${designCnstnDocNo}/${rvwOpnnSn}`); +} + +export const designCnstnRvwOpnnService = { + findPage, + findById, + save, + update, + delete: deleteDesignCnstnRvwOpnn, +} satisfies DesignCnstnRvwOpnnService; diff --git a/apps/as/src/entities/design-cnstn/api/queries.ts b/apps/as/src/entities/design-cnstn/api/queries.ts new file mode 100644 index 000000000..bafc9784a --- /dev/null +++ b/apps/as/src/entities/design-cnstn/api/queries.ts @@ -0,0 +1,411 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; + +import { ENDPOINT } from "@/shared/config"; + +import type { + DesignCnstnBizCstSaveRequestDto, + DesignCnstnBizCstSearchDto, + DesignCnstnBizCstUpdateRequestDto, +} from "../model/design-cnstn-biz-cst-interface"; +import type { + DesignCnstnBizSclSaveRequestDto, + DesignCnstnBizSclSearchDto, + DesignCnstnBizSclUpdateRequestDto, +} from "../model/design-cnstn-biz-scl-interface"; +import type { + DesignCnstnEsntlAtchFileSaveRequestDto, + DesignCnstnEsntlAtchFileSearchDto, + DesignCnstnEsntlAtchFileUpdateRequestDto, +} from "../model/design-cnstn-esntl-atch-file-interface"; +import type { + DesignCnstnApplySaveRequestDto, + DesignCnstnMngSaveRequestDto, + DesignCnstnMngSearchDto, + DesignCnstnMngUpdateRequestDto, +} from "../model/design-cnstn-mng-interface"; +import type { + DesignCnstnRvwOpnnSaveRequestDto, + DesignCnstnRvwOpnnSearchDto, + DesignCnstnRvwOpnnUpdateRequestDto, +} from "../model/design-cnstn-rvw-opnn-interface"; + +import { designCnstnBizCstService } from "./design-cnstn-biz-cst-service"; +import { designCnstnBizSclService } from "./design-cnstn-biz-scl-service"; +import { designCnstnEsntlAtchFileService } from "./design-cnstn-esntl-atch-file-service"; +import { designCnstnMngService } from "./design-cnstn-mng-service"; +import { designCnstnRvwOpnnService } from "./design-cnstn-rvw-opnn-service"; + +export const designCnstnMngBaseKey = [ENDPOINT.AS_SERVICE.DESIGN_CNSTN] as const; +export const designCnstnBizCstBaseKey = [ENDPOINT.AS_SERVICE.DESIGN_CNSTN_BIZ_CST] as const; +export const designCnstnBizSclBaseKey = [ENDPOINT.AS_SERVICE.DESIGN_CNSTN_BIZ_SCL] as const; +export const designCnstnEsntlAtchFileBaseKey = [ + ENDPOINT.AS_SERVICE.DESIGN_CNSTN_ESNTL_ATCH_FILE, +] as const; +export const designCnstnRvwOpnnBaseKey = [ENDPOINT.AS_SERVICE.DESIGN_CNSTN_RVW_OPNN] as const; + +/* ─── DesignCnstnMng ─── */ + +export function useDesignCnstnMngPage(params: DesignCnstnMngSearchDto) { + return useQuery({ + queryKey: [...designCnstnMngBaseKey, "findPage", params], + queryFn: () => designCnstnMngService.findPage(params), + }); +} + +export function useDesignCnstnMng(id: string | null | undefined) { + return useQuery({ + queryKey: [...designCnstnMngBaseKey, "findById", id], + queryFn: () => designCnstnMngService.findById(id!), + enabled: Boolean(id), + }); +} + +export function useSaveDesignCnstnMng() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: DesignCnstnMngSaveRequestDto) => designCnstnMngService.save(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useSaveApplyDesignCnstnMng() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: DesignCnstnApplySaveRequestDto) => designCnstnMngService.saveApply(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useUpdateDesignCnstnMng() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, body }: { id: string; body: DesignCnstnMngUpdateRequestDto }) => + designCnstnMngService.update(id, body), + onSuccess: (_data, { id }) => { + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...designCnstnMngBaseKey, "findById", id], + }); + }, + }); +} + +export function useTechReviewDesignCnstnMng() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ id, body }: { id: string; body: DesignCnstnApplySaveRequestDto }) => + designCnstnMngService.techReview(id, body), + onSuccess: (_data, { id }) => { + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...designCnstnMngBaseKey, "findById", id], + }); + }, + }); +} + +export function useDeleteDesignCnstnMng() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => designCnstnMngService.delete(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +/* ─── DesignCnstnBizCst ─── */ + +export function useDesignCnstnBizCstPage(params: DesignCnstnBizCstSearchDto) { + return useQuery({ + queryKey: [...designCnstnBizCstBaseKey, "findPage", params], + queryFn: () => designCnstnBizCstService.findPage(params), + }); +} + +export function useDesignCnstnBizCst( + designCnstnDocNo: string | null | undefined, + acntgSeCd: string | null | undefined, +) { + return useQuery({ + queryKey: [...designCnstnBizCstBaseKey, "findById", designCnstnDocNo, acntgSeCd], + queryFn: () => designCnstnBizCstService.findById(designCnstnDocNo!, acntgSeCd!), + enabled: Boolean(designCnstnDocNo && acntgSeCd), + }); +} + +export function useSaveDesignCnstnBizCst() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: DesignCnstnBizCstSaveRequestDto) => designCnstnBizCstService.save(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnBizCstBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useUpdateDesignCnstnBizCst() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + acntgSeCd, + body, + }: { + designCnstnDocNo: string; + acntgSeCd: string; + body: DesignCnstnBizCstUpdateRequestDto; + }) => designCnstnBizCstService.update(designCnstnDocNo, acntgSeCd, body), + onSuccess: (_data, { designCnstnDocNo, acntgSeCd }) => { + queryClient.invalidateQueries({ queryKey: designCnstnBizCstBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...designCnstnBizCstBaseKey, "findById", designCnstnDocNo, acntgSeCd], + }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useDeleteDesignCnstnBizCst() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + acntgSeCd, + }: { + designCnstnDocNo: string; + acntgSeCd: string; + }) => designCnstnBizCstService.delete(designCnstnDocNo, acntgSeCd), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnBizCstBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +/* ─── DesignCnstnBizScl ─── */ + +export function useDesignCnstnBizSclPage(params: DesignCnstnBizSclSearchDto) { + return useQuery({ + queryKey: [...designCnstnBizSclBaseKey, "findPage", params], + queryFn: () => designCnstnBizSclService.findPage(params), + }); +} + +export function useDesignCnstnBizScl( + designCnstnDocNo: string | null | undefined, + cnstpSeCd: string | null | undefined, +) { + return useQuery({ + queryKey: [...designCnstnBizSclBaseKey, "findById", designCnstnDocNo, cnstpSeCd], + queryFn: () => designCnstnBizSclService.findById(designCnstnDocNo!, cnstpSeCd!), + enabled: Boolean(designCnstnDocNo && cnstpSeCd), + }); +} + +export function useSaveDesignCnstnBizScl() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: DesignCnstnBizSclSaveRequestDto) => designCnstnBizSclService.save(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnBizSclBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useUpdateDesignCnstnBizScl() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + cnstpSeCd, + body, + }: { + designCnstnDocNo: string; + cnstpSeCd: string; + body: DesignCnstnBizSclUpdateRequestDto; + }) => designCnstnBizSclService.update(designCnstnDocNo, cnstpSeCd, body), + onSuccess: (_data, { designCnstnDocNo, cnstpSeCd }) => { + queryClient.invalidateQueries({ queryKey: designCnstnBizSclBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...designCnstnBizSclBaseKey, "findById", designCnstnDocNo, cnstpSeCd], + }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useDeleteDesignCnstnBizScl() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + cnstpSeCd, + }: { + designCnstnDocNo: string; + cnstpSeCd: string; + }) => designCnstnBizSclService.delete(designCnstnDocNo, cnstpSeCd), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnBizSclBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +/* ─── DesignCnstnEsntlAtchFile ─── */ + +export function useDesignCnstnEsntlAtchFilePage(params: DesignCnstnEsntlAtchFileSearchDto) { + return useQuery({ + queryKey: [...designCnstnEsntlAtchFileBaseKey, "findPage", params], + queryFn: () => designCnstnEsntlAtchFileService.findPage(params), + }); +} + +export function useDesignCnstnEsntlAtchFile( + designCnstnDocNo: string | null | undefined, + esntlAtchFileId: string | null | undefined, +) { + return useQuery({ + queryKey: [ + ...designCnstnEsntlAtchFileBaseKey, + "findById", + designCnstnDocNo, + esntlAtchFileId, + ], + queryFn: () => + designCnstnEsntlAtchFileService.findById(designCnstnDocNo!, esntlAtchFileId!), + enabled: Boolean(designCnstnDocNo && esntlAtchFileId), + }); +} + +export function useSaveDesignCnstnEsntlAtchFile() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: DesignCnstnEsntlAtchFileSaveRequestDto) => + designCnstnEsntlAtchFileService.save(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnEsntlAtchFileBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useUpdateDesignCnstnEsntlAtchFile() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + esntlAtchFileId, + body, + }: { + designCnstnDocNo: string; + esntlAtchFileId: string; + body: DesignCnstnEsntlAtchFileUpdateRequestDto; + }) => designCnstnEsntlAtchFileService.update(designCnstnDocNo, esntlAtchFileId, body), + onSuccess: (_data, { designCnstnDocNo, esntlAtchFileId }) => { + queryClient.invalidateQueries({ queryKey: designCnstnEsntlAtchFileBaseKey }); + queryClient.invalidateQueries({ + queryKey: [ + ...designCnstnEsntlAtchFileBaseKey, + "findById", + designCnstnDocNo, + esntlAtchFileId, + ], + }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useDeleteDesignCnstnEsntlAtchFile() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + esntlAtchFileId, + }: { + designCnstnDocNo: string; + esntlAtchFileId: string; + }) => designCnstnEsntlAtchFileService.delete(designCnstnDocNo, esntlAtchFileId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnEsntlAtchFileBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +/* ─── DesignCnstnRvwOpnn ─── */ + +export function useDesignCnstnRvwOpnnPage(params: DesignCnstnRvwOpnnSearchDto) { + return useQuery({ + queryKey: [...designCnstnRvwOpnnBaseKey, "findPage", params], + queryFn: () => designCnstnRvwOpnnService.findPage(params), + }); +} + +export function useDesignCnstnRvwOpnn( + designCnstnDocNo: string | null | undefined, + rvwOpnnSn: number | null | undefined, +) { + return useQuery({ + queryKey: [...designCnstnRvwOpnnBaseKey, "findById", designCnstnDocNo, rvwOpnnSn], + queryFn: () => designCnstnRvwOpnnService.findById(designCnstnDocNo!, rvwOpnnSn!), + enabled: Boolean(designCnstnDocNo && rvwOpnnSn != null), + }); +} + +export function useSaveDesignCnstnRvwOpnn() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: (body: DesignCnstnRvwOpnnSaveRequestDto) => designCnstnRvwOpnnService.save(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnRvwOpnnBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useUpdateDesignCnstnRvwOpnn() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + rvwOpnnSn, + body, + }: { + designCnstnDocNo: string; + rvwOpnnSn: number; + body: DesignCnstnRvwOpnnUpdateRequestDto; + }) => designCnstnRvwOpnnService.update(designCnstnDocNo, rvwOpnnSn, body), + onSuccess: (_data, { designCnstnDocNo, rvwOpnnSn }) => { + queryClient.invalidateQueries({ queryKey: designCnstnRvwOpnnBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...designCnstnRvwOpnnBaseKey, "findById", designCnstnDocNo, rvwOpnnSn], + }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} + +export function useDeleteDesignCnstnRvwOpnn() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: ({ + designCnstnDocNo, + rvwOpnnSn, + }: { + designCnstnDocNo: string; + rvwOpnnSn: number; + }) => designCnstnRvwOpnnService.delete(designCnstnDocNo, rvwOpnnSn), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: designCnstnRvwOpnnBaseKey }); + queryClient.invalidateQueries({ queryKey: designCnstnMngBaseKey }); + }, + }); +} diff --git a/apps/as/src/entities/design-cnstn/index.ts b/apps/as/src/entities/design-cnstn/index.ts new file mode 100644 index 000000000..ed6b6e1ae --- /dev/null +++ b/apps/as/src/entities/design-cnstn/index.ts @@ -0,0 +1,88 @@ +export { designCnstnBizCstService } from "./api/design-cnstn-biz-cst-service"; +export { designCnstnBizSclService } from "./api/design-cnstn-biz-scl-service"; +export { designCnstnEsntlAtchFileService } from "./api/design-cnstn-esntl-atch-file-service"; +export { designCnstnMngService } from "./api/design-cnstn-mng-service"; +export { designCnstnRvwOpnnService } from "./api/design-cnstn-rvw-opnn-service"; +export { + designCnstnBizCstBaseKey, + designCnstnBizSclBaseKey, + designCnstnEsntlAtchFileBaseKey, + designCnstnMngBaseKey, + designCnstnRvwOpnnBaseKey, + useDeleteDesignCnstnBizCst, + useDeleteDesignCnstnBizScl, + useDeleteDesignCnstnEsntlAtchFile, + useDeleteDesignCnstnMng, + useDeleteDesignCnstnRvwOpnn, + useDesignCnstnBizCst, + useDesignCnstnBizCstPage, + useDesignCnstnBizScl, + useDesignCnstnBizSclPage, + useDesignCnstnEsntlAtchFile, + useDesignCnstnEsntlAtchFilePage, + useDesignCnstnMng, + useDesignCnstnMngPage, + useDesignCnstnRvwOpnn, + useDesignCnstnRvwOpnnPage, + useSaveApplyDesignCnstnMng, + useSaveDesignCnstnBizCst, + useSaveDesignCnstnBizScl, + useSaveDesignCnstnEsntlAtchFile, + useSaveDesignCnstnMng, + useSaveDesignCnstnRvwOpnn, + useTechReviewDesignCnstnMng, + useUpdateDesignCnstnBizCst, + useUpdateDesignCnstnBizScl, + useUpdateDesignCnstnEsntlAtchFile, + useUpdateDesignCnstnMng, + useUpdateDesignCnstnRvwOpnn, +} from "./api/queries"; +export type { + DesignCnstnBizCstId, + DesignCnstnBizCstResponseDto, + DesignCnstnBizCstSaveRequestDto, + DesignCnstnBizCstSearchDto, + DesignCnstnBizCstService, + DesignCnstnBizCstUpdateRequestDto, +} from "./model/design-cnstn-biz-cst-interface"; +export type { + DesignCnstnBizSclId, + DesignCnstnBizSclResponseDto, + DesignCnstnBizSclSaveRequestDto, + DesignCnstnBizSclSearchDto, + DesignCnstnBizSclService, + DesignCnstnBizSclUpdateRequestDto, +} from "./model/design-cnstn-biz-scl-interface"; +export type { + DesignCnstnEsntlAtchFileId, + DesignCnstnEsntlAtchFileResponseDto, + DesignCnstnEsntlAtchFileSaveRequestDto, + DesignCnstnEsntlAtchFileSearchDto, + DesignCnstnEsntlAtchFileService, + DesignCnstnEsntlAtchFileUpdateRequestDto, +} from "./model/design-cnstn-esntl-atch-file-interface"; +export type { + AtflMngClientResponseDto, + BizCstItem, + BizCstTreeDto, + BizSclTreeDto, + BzScaleItem, + DesignCnstnApplySaveRequestDto, + DesignCnstnMngDetResponseDto, + DesignCnstnMngResponseDto, + DesignCnstnMngSaveRequestDto, + DesignCnstnMngSearchDto, + DesignCnstnMngService, + DesignCnstnMngUpdateRequestDto, + DesignCnstnRvwOpnnResponseDto, + DesignCnstnRvwOpnnSaveRequestDto, + ElaprDocPrgrsClientResponseDto, + EsntlAtchFileItem, + EsntlAtchFileMngTreeResponseDto, +} from "./model/design-cnstn-mng-interface"; +export type { + DesignCnstnRvwOpnnId, + DesignCnstnRvwOpnnSearchDto, + DesignCnstnRvwOpnnService, + DesignCnstnRvwOpnnUpdateRequestDto, +} from "./model/design-cnstn-rvw-opnn-interface"; diff --git a/apps/as/src/entities/design-cnstn/model/design-cnstn-biz-cst-interface.ts b/apps/as/src/entities/design-cnstn/model/design-cnstn-biz-cst-interface.ts new file mode 100644 index 000000000..bbf6519e9 --- /dev/null +++ b/apps/as/src/entities/design-cnstn/model/design-cnstn-biz-cst-interface.ts @@ -0,0 +1,54 @@ +import type { PageableParams, PageResponse } from "@/shared/model"; + +/** 백엔드 DesignCnstnBizCstId */ +export interface DesignCnstnBizCstId { + designCnstnMng: string; + acntgSeCd: string; +} + +/** 백엔드 DesignCnstnBizCstSaveRequestDto */ +export interface DesignCnstnBizCstSaveRequestDto { + designCnstnDocNo: string; + acntgSeCd: string; + bscPlanAmt?: number; + bgtRfltAmt?: number; + tstmDesignAmt?: number; +} + +/** 백엔드 DesignCnstnBizCstUpdateRequestDto */ +export interface DesignCnstnBizCstUpdateRequestDto { + bscPlanAmt?: number; + bgtRfltAmt?: number; + tstmDesignAmt?: number; +} + +/** 백엔드 DesignCnstnBizCstSearchDto + Pageable */ +export interface DesignCnstnBizCstSearchDto extends PageableParams { + designCnstnDocNo?: string; + acntgSeCd?: string; +} + +/** 백엔드 DesignCnstnBizCstResponseDto */ +export interface DesignCnstnBizCstResponseDto { + designCnstnDocNo: string; + acntgSeCd: string; + bscPlanAmt?: number; + bgtRfltAmt?: number; + tstmDesignAmt?: number; + regDt?: string; +} + +/** Controller public 메서드명·시그니처와 동일 */ +export interface DesignCnstnBizCstService { + findPage( + searchDto: DesignCnstnBizCstSearchDto, + ): Promise>; + findById(designCnstnDocNo: string, acntgSeCd: string): Promise; + save(body: DesignCnstnBizCstSaveRequestDto): Promise; + update( + designCnstnDocNo: string, + acntgSeCd: string, + body: DesignCnstnBizCstUpdateRequestDto, + ): Promise; + delete(designCnstnDocNo: string, acntgSeCd: string): Promise; +} diff --git a/apps/as/src/entities/design-cnstn/model/design-cnstn-biz-scl-interface.ts b/apps/as/src/entities/design-cnstn/model/design-cnstn-biz-scl-interface.ts new file mode 100644 index 000000000..b7fd92140 --- /dev/null +++ b/apps/as/src/entities/design-cnstn/model/design-cnstn-biz-scl-interface.ts @@ -0,0 +1,54 @@ +import type { PageableParams, PageResponse } from "@/shared/model"; + +/** 백엔드 DesignCnstnBizSclId */ +export interface DesignCnstnBizSclId { + designCnstnMng: string; + cnstpSeCd: string; +} + +/** 백엔드 DesignCnstnBizSclSaveRequestDto */ +export interface DesignCnstnBizSclSaveRequestDto { + designCnstnDocNo: string; + cnstpSeCd: string; + bscPlanQty?: number; + bgtRfltQty?: number; + tstmDesignQty?: number; +} + +/** 백엔드 DesignCnstnBizSclUpdateRequestDto */ +export interface DesignCnstnBizSclUpdateRequestDto { + bscPlanQty?: number; + bgtRfltQty?: number; + tstmDesignQty?: number; +} + +/** 백엔드 DesignCnstnBizSclSearchDto + Pageable */ +export interface DesignCnstnBizSclSearchDto extends PageableParams { + designCnstnDocNo?: string; + cnstpSeCd?: string; +} + +/** 백엔드 DesignCnstnBizSclResponseDto */ +export interface DesignCnstnBizSclResponseDto { + designCnstnDocNo: string; + cnstpSeCd: string; + bscPlanQty?: number; + bgtRfltQty?: number; + tstmDesignQty?: number; + regDt?: string; +} + +/** Controller public 메서드명·시그니처와 동일 */ +export interface DesignCnstnBizSclService { + findPage( + searchDto: DesignCnstnBizSclSearchDto, + ): Promise>; + findById(designCnstnDocNo: string, cnstpSeCd: string): Promise; + save(body: DesignCnstnBizSclSaveRequestDto): Promise; + update( + designCnstnDocNo: string, + cnstpSeCd: string, + body: DesignCnstnBizSclUpdateRequestDto, + ): Promise; + delete(designCnstnDocNo: string, cnstpSeCd: string): Promise; +} diff --git a/apps/as/src/entities/design-cnstn/model/design-cnstn-esntl-atch-file-interface.ts b/apps/as/src/entities/design-cnstn/model/design-cnstn-esntl-atch-file-interface.ts new file mode 100644 index 000000000..82666b60a --- /dev/null +++ b/apps/as/src/entities/design-cnstn/model/design-cnstn-esntl-atch-file-interface.ts @@ -0,0 +1,51 @@ +import type { PageableParams, PageResponse } from "@/shared/model"; + +/** 백엔드 DesignCnstnEsntlAtchFileId */ +export interface DesignCnstnEsntlAtchFileId { + designCnstnMng: string; + esntlAtchFileId: string; +} + +/** 백엔드 DesignCnstnEsntlAtchFileSaveRequestDto */ +export interface DesignCnstnEsntlAtchFileSaveRequestDto { + designCnstnDocNo: string; + esntlAtchFileId: string; + atchFileGroupId?: string; +} + +/** 백엔드 DesignCnstnEsntlAtchFileUpdateRequestDto */ +export interface DesignCnstnEsntlAtchFileUpdateRequestDto { + atchFileGroupId?: string; +} + +/** 백엔드 DesignCnstnEsntlAtchFileSearchDto + Pageable */ +export interface DesignCnstnEsntlAtchFileSearchDto extends PageableParams { + designCnstnDocNo?: string; + esntlAtchFileId?: string; +} + +/** 백엔드 DesignCnstnEsntlAtchFileResponseDto */ +export interface DesignCnstnEsntlAtchFileResponseDto { + designCnstnDocNo: string; + esntlAtchFileId: string; + atchFileGroupId?: string; + regDt?: string; +} + +/** Controller public 메서드명·시그니처와 동일 */ +export interface DesignCnstnEsntlAtchFileService { + findPage( + searchDto: DesignCnstnEsntlAtchFileSearchDto, + ): Promise>; + findById( + designCnstnDocNo: string, + esntlAtchFileId: string, + ): Promise; + save(body: DesignCnstnEsntlAtchFileSaveRequestDto): Promise; + update( + designCnstnDocNo: string, + esntlAtchFileId: string, + body: DesignCnstnEsntlAtchFileUpdateRequestDto, + ): Promise; + delete(designCnstnDocNo: string, esntlAtchFileId: string): Promise; +} diff --git a/apps/as/src/entities/design-cnstn/model/design-cnstn-mng-interface.ts b/apps/as/src/entities/design-cnstn/model/design-cnstn-mng-interface.ts new file mode 100644 index 000000000..1ee2be991 --- /dev/null +++ b/apps/as/src/entities/design-cnstn/model/design-cnstn-mng-interface.ts @@ -0,0 +1,124 @@ +import type { + BizCstSaveBase, + BzScaleSaveBase, + EsntlAtchFileSaveBase, + PageableParams, + PageResponse, + PbadmsApplySaveHeader, + PbadmsMngDetResponseBase, +} from "@/shared/model"; + +import type { + DesignCnstnRvwOpnnResponseDto, + DesignCnstnRvwOpnnSaveRequestDto, +} from "./design-cnstn-rvw-opnn-interface"; + +export type { + DesignCnstnRvwOpnnResponseDto, + DesignCnstnRvwOpnnSaveRequestDto, +} from "./design-cnstn-rvw-opnn-interface"; +export type { + AtflMngClientResponseDto, + BizCstTreeDto, + BizSclTreeDto, + ElaprDocPrgrsClientResponseDto, + EsntlAtchFileMngTreeResponseDto, +} from "@/shared/model"; + +/** 백엔드 DesignCnstnMngSaveRequestDto */ +export interface DesignCnstnMngSaveRequestDto { + designCnstnDocNo?: string; + admdstCd?: string; + envoSeComCd?: string; + taskSeComCd?: string; + bizNm?: string; + bizBgngYr?: string; + bizEndYr?: string; + bizCn?: string; + aplcntNm?: string; + aplcntMblTelno?: string; + aplcntOgdpNm?: string; + aplcntEmlAddr?: string; + dsgnrNm?: string; + dsgnrTelno?: string; + dsgnrOgdpNm?: string; + dsgnrEmlAddr?: string; + atchFileGroupId?: string; + prgrsSttsComCd?: string; +} + +/** 백엔드 DesignCnstnMngUpdateRequestDto */ +export type DesignCnstnMngUpdateRequestDto = Omit; + +/** 백엔드 DesignCnstnMngSearchDto + Pageable */ +export interface DesignCnstnMngSearchDto extends PageableParams { + designCnstnDocNo?: string; + admdstCd?: string; + envoSeComCd?: string; + taskSeComCd?: string; + bizNm?: string; + bizBgngYr?: string; + bizEndYr?: string; + bizCn?: string; + aplcntNm?: string; + aplcntMblTelno?: string; + aplcntOgdpNm?: string; + aplcntEmlAddr?: string; + dsgnrNm?: string; + dsgnrTelno?: string; + dsgnrOgdpNm?: string; + dsgnrEmlAddr?: string; + atchFileGroupId?: string; +} + +interface DesignCnstnMngResponseExtension { + designCnstnDocNo: string; + envoSeCdNm?: string; + taskSeCdNm?: string; + prgrsSttsCdNm?: string; + regDt?: string; + rgtr?: string; + rgtrNm?: string; + mdfcnDt?: string; + sido?: string; + gugun?: string; +} + +/** 백엔드 DesignCnstnMngResponseDto */ +export type DesignCnstnMngResponseDto = Omit & + DesignCnstnMngResponseExtension; + +/** 백엔드 DesignCnstnApplySaveRequestDto.BzScaleItem */ +export type BzScaleItem = BzScaleSaveBase; + +/** 백엔드 DesignCnstnApplySaveRequestDto.BizCstItem */ +export type BizCstItem = BizCstSaveBase; + +/** 백엔드 DesignCnstnApplySaveRequestDto.EsntlAtchFileItem */ +export type EsntlAtchFileItem = EsntlAtchFileSaveBase; + +/** 백엔드 DesignCnstnMngDetResponseDto */ +export type DesignCnstnMngDetResponseDto = PbadmsMngDetResponseBase< + DesignCnstnMngResponseDto, + DesignCnstnRvwOpnnResponseDto +>; + +/** 백엔드 DesignCnstnApplySaveRequestDto */ +export interface DesignCnstnApplySaveRequestDto extends PbadmsApplySaveHeader { + designCnstnMng: DesignCnstnMngSaveRequestDto; + bzScaleList?: BzScaleItem[]; + bizCstList?: BizCstItem[]; + esntlAtchFileList?: EsntlAtchFileItem[]; + rvwOpnnList?: DesignCnstnRvwOpnnSaveRequestDto[]; +} + +/** Controller public 메서드명·시그니처와 동일 */ +export interface DesignCnstnMngService { + findPage(searchDto: DesignCnstnMngSearchDto): Promise>; + findById(id: string): Promise; + save(body: DesignCnstnMngSaveRequestDto): Promise; + saveApply(body: DesignCnstnApplySaveRequestDto): Promise; + update(id: string, body: DesignCnstnMngUpdateRequestDto): Promise; + techReview(id: string, body: DesignCnstnApplySaveRequestDto): Promise; + delete(id: string): Promise; +} diff --git a/apps/as/src/entities/design-cnstn/model/design-cnstn-rvw-opnn-interface.ts b/apps/as/src/entities/design-cnstn/model/design-cnstn-rvw-opnn-interface.ts new file mode 100644 index 000000000..8b9841ee6 --- /dev/null +++ b/apps/as/src/entities/design-cnstn/model/design-cnstn-rvw-opnn-interface.ts @@ -0,0 +1,59 @@ +import type { PageableParams, PageResponse, RvwOpnnResponseExtension } from "@/shared/model"; + +/** 백엔드 DesignCnstnRvwOpnnId */ +export interface DesignCnstnRvwOpnnId { + designCnstnMng: string; + rvwOpnnSn: number; +} + +/** 백엔드 DesignCnstnRvwOpnnSaveRequestDto */ +export interface DesignCnstnRvwOpnnSaveRequestDto { + designCnstnDocNo: string; + rvwOpnnSn?: number; + opnrSeComCd?: string; + opnrNm?: string; + rvwRsltCn?: string; + rvwRsltAnmlyYn?: string; + atchFileGroupId?: string; +} + +/** 백엔드 DesignCnstnRvwOpnnUpdateRequestDto */ +export interface DesignCnstnRvwOpnnUpdateRequestDto { + opnrSeComCd?: string; + opnrNm?: string; + rvwRsltCn?: string; + rvwRsltAnmlyYn?: string; + atchFileGroupId?: string; +} + +/** 백엔드 DesignCnstnRvwOpnnSearchDto + Pageable */ +export interface DesignCnstnRvwOpnnSearchDto extends PageableParams { + designCnstnDocNo?: string; + opnrNm?: string; + opnrSeComCd?: string; + rvwRsltCn?: string; + rvwRsltAnmlyYn?: string; + atchFileGroupId?: string; +} + +/** 백엔드 DesignCnstnRvwOpnnResponseDto */ +export type DesignCnstnRvwOpnnResponseDto = Partial< + Pick +> & + Omit & + RvwOpnnResponseExtension; + +/** Controller public 메서드명·시그니처와 동일 */ +export interface DesignCnstnRvwOpnnService { + findPage( + searchDto: DesignCnstnRvwOpnnSearchDto, + ): Promise>; + findById(designCnstnDocNo: string, rvwOpnnSn: number): Promise; + save(body: DesignCnstnRvwOpnnSaveRequestDto): Promise; + update( + designCnstnDocNo: string, + rvwOpnnSn: number, + body: DesignCnstnRvwOpnnUpdateRequestDto, + ): Promise; + delete(designCnstnDocNo: string, rvwOpnnSn: number): Promise; +} diff --git a/apps/as/src/shared/config/api.ts b/apps/as/src/shared/config/api.ts index 0aab98ed6..98992a063 100644 --- a/apps/as/src/shared/config/api.ts +++ b/apps/as/src/shared/config/api.ts @@ -17,6 +17,11 @@ export const ENDPOINT = { ADSTDSTR: "/as-service/api/v1/adstdstr", FNRS_CNSLTN_MNG: "/as-service/api/v1/fnrs-cnsltn-mng", FNRS_SHAR_SE: "/as-service/api/v1/fnrs-shar-se-mng", + DESIGN_CNSTN: "/as-service/api/v1/design-cnstn", + DESIGN_CNSTN_BIZ_CST: "/as-service/api/v1/design-cnstn-biz-cst", + 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", }, USER_SERVICE: { LOGIN: "/user-service/login", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd99062b0..664b5ea7d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1042,6 +1042,9 @@ importers: js-cookie: specifier: ^3.0.5 version: 3.0.5 + lucide-react: + specifier: ^0.474.0 + version: 0.474.0(react@19.2.4) moment: specifier: ^2.30.1 version: 2.30.1