From 0e7c9b4a964c65c67ef572009510d40721564014 Mon Sep 17 00:00:00 2001 From: bicochan Date: Wed, 1 Jul 2026 17:52:57 +0900 Subject: [PATCH] =?UTF-8?q?[as]=20feat:=20=EC=9E=AC=EC=9B=90=EB=B6=84?= =?UTF-8?q?=EB=8B=B4=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entities/acntg/model/acntg-interface.ts | 2 + .../entities/cnstp/model/cnstp-interface.ts | 2 + .../fnrs-shar-se/api/fnrs-shar-se-service.ts | 70 +++++++++++++++ .../src/entities/fnrs-shar-se/api/queries.ts | 85 +++++++++++++++++++ apps/as/src/entities/fnrs-shar-se/index.ts | 20 +++++ .../model/fnrs-shar-se-interface.ts | 83 ++++++++++++++++++ apps/as/src/shared/config/api.ts | 1 + 7 files changed, 263 insertions(+) create mode 100644 apps/as/src/entities/fnrs-shar-se/api/fnrs-shar-se-service.ts create mode 100644 apps/as/src/entities/fnrs-shar-se/api/queries.ts create mode 100644 apps/as/src/entities/fnrs-shar-se/index.ts create mode 100644 apps/as/src/entities/fnrs-shar-se/model/fnrs-shar-se-interface.ts diff --git a/apps/as/src/entities/acntg/model/acntg-interface.ts b/apps/as/src/entities/acntg/model/acntg-interface.ts index c1457208d..ea64fc218 100644 --- a/apps/as/src/entities/acntg/model/acntg-interface.ts +++ b/apps/as/src/entities/acntg/model/acntg-interface.ts @@ -16,6 +16,7 @@ export interface AcntgSeMngResponseDto { cdLvNo: number; useYn: string; expln?: string; + sortSeq?: number; rgtr?: string; rgtrNm?: string; mdfr?: string; @@ -39,6 +40,7 @@ export interface AcntgSeMngSaveRequestDto { cdLvNo: number; useYn?: string; expln?: string; + sortSeq?: number; } /** PUT /{acntgSeCd} 요청 (mode는 서비스에서 U로 설정) */ diff --git a/apps/as/src/entities/cnstp/model/cnstp-interface.ts b/apps/as/src/entities/cnstp/model/cnstp-interface.ts index def16901a..eabd12f46 100644 --- a/apps/as/src/entities/cnstp/model/cnstp-interface.ts +++ b/apps/as/src/entities/cnstp/model/cnstp-interface.ts @@ -16,6 +16,7 @@ export interface CnstpSeMngResponseDto { cdLvNo: number; useYn: string; expln?: string; + sortSeq?: number; rgtr?: string; rgtrNm?: string; mdfr?: string; @@ -39,6 +40,7 @@ export interface CnstpSeMngSaveRequestDto { cdLvNo?: number; useYn?: string; expln?: string; + sortSeq?: number; } /** PUT /{cnstpSeCd} 요청 (mode는 서비스에서 U로 설정) */ diff --git a/apps/as/src/entities/fnrs-shar-se/api/fnrs-shar-se-service.ts b/apps/as/src/entities/fnrs-shar-se/api/fnrs-shar-se-service.ts new file mode 100644 index 000000000..57bfa67ec --- /dev/null +++ b/apps/as/src/entities/fnrs-shar-se/api/fnrs-shar-se-service.ts @@ -0,0 +1,70 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import { + FNRS_SHAR_SE_SAVE_MODE, + type FnrsSharBizCstTreeDto, + type FnrsSharSeMngResponseDto, + type FnrsSharSeMngSaveRequestDto, + type FnrsSharSeMngSearchDto, + type FnrsSharSeMngService, + type FnrsSharSeMngTreeDto, +} from "../model/fnrs-shar-se-interface"; + +const BASE = ENDPOINT.AS_SERVICE.FNRS_SHAR_SE; + +async function findAll( + params: FnrsSharSeMngSearchDto, +): Promise> { + const response = await client.get>(BASE, { params }); + return response.data; +} + +async function findTree(): Promise { + const response = await client.get(`${BASE}/list/tree`); + return response.data; +} + +async function findById(fnrsSharSeCd: string): Promise { + const response = await client.get(`${BASE}/${fnrsSharSeCd}`); + return response.data; +} + +async function saveMulti( + body: FnrsSharSeMngSaveRequestDto[], +): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function update(fnrsSharSeCd: string, body: FnrsSharSeMngSaveRequestDto): Promise { + const response = await client.put(`${BASE}/${fnrsSharSeCd}`, { + ...body, + fnrsSharSeCd, + mode: FNRS_SHAR_SE_SAVE_MODE.UPDATE, + }); + return response.data; +} + +async function deleteFnrsSharSeCd(fnrsSharSeCd: string): Promise { + const response = await client.delete(`${BASE}/${fnrsSharSeCd}`); + return response.data; +} + +async function findTreeFnrsShar(fnrsCnsltnDocNo: string): Promise { + const response = await client.get( + `${BASE}/list/tree/fnrs-shar/${fnrsCnsltnDocNo}`, + ); + return response.data; +} + +export const fnrsSharSeMngService = { + findAll, + findTree, + findById, + saveMulti, + update, + delete: deleteFnrsSharSeCd, + findTreeFnrsShar, +} satisfies FnrsSharSeMngService; diff --git a/apps/as/src/entities/fnrs-shar-se/api/queries.ts b/apps/as/src/entities/fnrs-shar-se/api/queries.ts new file mode 100644 index 000000000..0dd73596e --- /dev/null +++ b/apps/as/src/entities/fnrs-shar-se/api/queries.ts @@ -0,0 +1,85 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; + +import { ENDPOINT } from "@/shared/config"; + +import type { + FnrsSharSeMngSaveRequestDto, + FnrsSharSeMngSearchDto, +} from "../model/fnrs-shar-se-interface"; + +import { fnrsSharSeMngService } from "./fnrs-shar-se-service"; + +const fnrsSharSeMngBaseKey = [ENDPOINT.AS_SERVICE.FNRS_SHAR_SE] as const; + +export function useFnrsSharSeMngPage(params: FnrsSharSeMngSearchDto) { + return useQuery({ + queryKey: [...fnrsSharSeMngBaseKey, "findAll", params], + queryFn: () => fnrsSharSeMngService.findAll(params), + }); +} + +export function useFnrsSharSeMngTree() { + return useQuery({ + queryKey: [...fnrsSharSeMngBaseKey, "findTree"], + queryFn: () => fnrsSharSeMngService.findTree(), + staleTime: Infinity, + }); +} + +export function useFnrsSharSeMng(fnrsSharSeCd: string | null | undefined) { + return useQuery({ + queryKey: [...fnrsSharSeMngBaseKey, "findById", fnrsSharSeCd], + queryFn: () => fnrsSharSeMngService.findById(fnrsSharSeCd!), + enabled: Boolean(fnrsSharSeCd), + }); +} + +export function useSaveMultiFnrsSharSeMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (body: FnrsSharSeMngSaveRequestDto[]) => fnrsSharSeMngService.saveMulti(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: fnrsSharSeMngBaseKey }); + }, + }); +} + +export function useUpdateFnrsSharSeMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ + fnrsSharSeCd, + body, + }: { + fnrsSharSeCd: string; + body: FnrsSharSeMngSaveRequestDto; + }) => fnrsSharSeMngService.update(fnrsSharSeCd, body), + onSuccess: (_data, { fnrsSharSeCd }) => { + queryClient.invalidateQueries({ queryKey: fnrsSharSeMngBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...fnrsSharSeMngBaseKey, "findById", fnrsSharSeCd], + }); + }, + }); +} + +export function useDeleteFnrsSharSeMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (fnrsSharSeCd: string) => fnrsSharSeMngService.delete(fnrsSharSeCd), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: fnrsSharSeMngBaseKey }); + }, + }); +} + +export function useFnrsSharBizCstTree(fnrsCnsltnDocNo: string | null | undefined) { + return useQuery({ + queryKey: [...fnrsSharSeMngBaseKey, "findTreeFnrsShar", fnrsCnsltnDocNo], + queryFn: () => fnrsSharSeMngService.findTreeFnrsShar(fnrsCnsltnDocNo!), + enabled: Boolean(fnrsCnsltnDocNo), + }); +} diff --git a/apps/as/src/entities/fnrs-shar-se/index.ts b/apps/as/src/entities/fnrs-shar-se/index.ts new file mode 100644 index 000000000..2527aead1 --- /dev/null +++ b/apps/as/src/entities/fnrs-shar-se/index.ts @@ -0,0 +1,20 @@ +export { fnrsSharSeMngService } from "./api/fnrs-shar-se-service"; +export { + useDeleteFnrsSharSeMng, + useFnrsSharBizCstTree, + useFnrsSharSeMng, + useFnrsSharSeMngPage, + useFnrsSharSeMngTree, + useSaveMultiFnrsSharSeMng, + useUpdateFnrsSharSeMng, +} from "./api/queries"; +export type { + FnrsSharBizCstTreeDto, + FnrsSharSeMngResponseDto, + FnrsSharSeMngSaveRequestDto, + FnrsSharSeMngSearchDto, + FnrsSharSeMngService, + FnrsSharSeMngTreeDto, + FnrsSharSeSaveMode, +} from "./model/fnrs-shar-se-interface"; +export { FNRS_SHAR_SE_SAVE_MODE } from "./model/fnrs-shar-se-interface"; diff --git a/apps/as/src/entities/fnrs-shar-se/model/fnrs-shar-se-interface.ts b/apps/as/src/entities/fnrs-shar-se/model/fnrs-shar-se-interface.ts new file mode 100644 index 000000000..ab60a868f --- /dev/null +++ b/apps/as/src/entities/fnrs-shar-se/model/fnrs-shar-se-interface.ts @@ -0,0 +1,83 @@ +import type { PageableParams, PageResponse } from "@/shared/model"; + +export const FNRS_SHAR_SE_SAVE_MODE = { + CREATE: "C", + UPDATE: "U", + DELETE: "D", +} as const; + +export type FnrsSharSeSaveMode = (typeof FNRS_SHAR_SE_SAVE_MODE)[keyof typeof FNRS_SHAR_SE_SAVE_MODE]; + +/** 백엔드 FnrsSharSeMngResponseDto */ +export interface FnrsSharSeMngResponseDto { + fnrsSharSeCd: string; + fnrsSharSeCdNm: string; + upFnrsSharSeCd?: string; + cdLvNo: number; + useYn: string; + expln?: string; + sortSeq?: number; + rgtr?: string; + rgtrNm?: string; + mdfr?: string; + regDt?: string; + mdfcnDt?: string; +} + +/** 백엔드 FnrsSharSeMngSearchDto + Pageable */ +export interface FnrsSharSeMngSearchDto extends PageableParams { + fnrsSharSeCd?: string; + fnrsSharSeCdNm?: string; + useYn?: string; +} + +/** 백엔드 FnrsSharSeMngSaveRequestDto */ +export interface FnrsSharSeMngSaveRequestDto { + fnrsSharSeCd: string; + mode: FnrsSharSeSaveMode; + fnrsSharSeCdNm: string; + upFnrsSharSeCd?: string; + cdLvNo: number; + useYn?: string; + expln?: string; + sortSeq?: number; +} + +/** 백엔드 FnrsSharSeMngTreeDto */ +export interface FnrsSharSeMngTreeDto { + indFnrsSharSeCdNm: string; + fnrsSharSeCd: string; + fnrsSharSeCdNm: string; + upFnrsSharSeCd?: string; + useYn: string; + treeLevel: number; + treePath: string; + sortPath: string; +} + +/** 백엔드 FnrsSharBizCstTreeDto */ +export interface FnrsSharBizCstTreeDto { + indFnrsSharSeCdNm: string; + fnrsSharSeCd: string; + fnrsSharSeCdNm: string; + useYn: string; + treeLevel: number; + treePath: string; + sortPath: string; + exstnAmt?: number; + chgRqtAmt?: number; + ajmtAmt?: number; + rmrkCn?: string; + envoRmrkCn?: string; +} + +/** Controller public 메서드명·시그니처와 동일 */ +export interface FnrsSharSeMngService { + findAll(params: FnrsSharSeMngSearchDto): Promise>; + findTree(): Promise; + findById(fnrsSharSeCd: string): Promise; + saveMulti(body: FnrsSharSeMngSaveRequestDto[]): Promise; + update(fnrsSharSeCd: string, body: FnrsSharSeMngSaveRequestDto): Promise; + delete(fnrsSharSeCd: string): Promise; + findTreeFnrsShar(fnrsCnsltnDocNo: string): Promise; +} diff --git a/apps/as/src/shared/config/api.ts b/apps/as/src/shared/config/api.ts index a0545215d..f31d6f7af 100644 --- a/apps/as/src/shared/config/api.ts +++ b/apps/as/src/shared/config/api.ts @@ -16,6 +16,7 @@ export const ENDPOINT = { CKLST_RVW: "/as-service/api/v1/cklst-rvw", 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", }, USER_SERVICE: { LOGIN: "/user-service/login",