diff --git a/apps/as/src/entities/rvw-mnpw/api/queries.ts b/apps/as/src/entities/rvw-mnpw/api/queries.ts new file mode 100644 index 000000000..651906de0 --- /dev/null +++ b/apps/as/src/entities/rvw-mnpw/api/queries.ts @@ -0,0 +1,86 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; + +import { ENDPOINT } from "@/shared/config"; + +import type { + RvwMnpwMngSaveRequestDto, + RvwMnpwMngSearchDto, + RvwMnpwMngUpdateRequestDto, +} from "../model/rvw-mnpw-interface"; + +import { rvwMnpwMngService } from "./rvw-mnpw-service"; + +const rvwMnpwMngBaseKey = [ENDPOINT.AS_COMMON_SERVICE.RVW_MNPW] as const; + +export function useRvwMnpwMngPage(params: RvwMnpwMngSearchDto) { + return useQuery({ + queryKey: [...rvwMnpwMngBaseKey, "findPage", params], + queryFn: () => rvwMnpwMngService.findPage(params), + }); +} + +export function useRvwMnpwMng( + atrzSeComCd: string | null | undefined, + ognzSn: number | null | undefined, + userUuid: string | null | undefined, +) { + return useQuery({ + queryKey: [...rvwMnpwMngBaseKey, "findById", atrzSeComCd, ognzSn, userUuid], + queryFn: () => rvwMnpwMngService.findById(atrzSeComCd!, ognzSn!, userUuid!), + enabled: Boolean(atrzSeComCd && ognzSn != null && userUuid), + }); +} + +export function useSaveRvwMnpwMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (body: RvwMnpwMngSaveRequestDto) => rvwMnpwMngService.save(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: rvwMnpwMngBaseKey }); + }, + }); +} + +export function useUpdateRvwMnpwMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ + atrzSeComCd, + ognzSn, + userUuid, + body, + }: { + atrzSeComCd: string; + ognzSn: number; + userUuid: string; + body: RvwMnpwMngUpdateRequestDto; + }) => rvwMnpwMngService.update(atrzSeComCd, ognzSn, userUuid, body), + onSuccess: (_data, { atrzSeComCd, ognzSn, userUuid }) => { + queryClient.invalidateQueries({ queryKey: rvwMnpwMngBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...rvwMnpwMngBaseKey, "findById", atrzSeComCd, ognzSn, userUuid], + }); + }, + }); +} + +export function useDeleteRvwMnpwMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ + atrzSeComCd, + ognzSn, + userUuid, + }: { + atrzSeComCd: string; + ognzSn: number; + userUuid: string; + }) => rvwMnpwMngService.delete(atrzSeComCd, ognzSn, userUuid), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: rvwMnpwMngBaseKey }); + }, + }); +} diff --git a/apps/as/src/entities/rvw-mnpw/api/rvw-mnpw-service.ts b/apps/as/src/entities/rvw-mnpw/api/rvw-mnpw-service.ts new file mode 100644 index 000000000..4f756787f --- /dev/null +++ b/apps/as/src/entities/rvw-mnpw/api/rvw-mnpw-service.ts @@ -0,0 +1,66 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + RvwMnpwMngResponseDto, + RvwMnpwMngSaveRequestDto, + RvwMnpwMngSearchDto, + RvwMnpwMngService, + RvwMnpwMngUpdateRequestDto, +} from "../model/rvw-mnpw-interface"; + +const BASE = ENDPOINT.AS_COMMON_SERVICE.RVW_MNPW; + +function pkPath(atrzSeComCd: string, ognzSn: number, userUuid: string): string { + return `${BASE}/${atrzSeComCd}/${ognzSn}/${userUuid}`; +} + +async function findPage(params: RvwMnpwMngSearchDto): Promise> { + const response = await client.get>(BASE, { params }); + return response.data; +} + +async function findById( + atrzSeComCd: string, + ognzSn: number, + userUuid: string, +): Promise { + const response = await client.get(pkPath(atrzSeComCd, ognzSn, userUuid)); + return response.data; +} + +async function save(body: RvwMnpwMngSaveRequestDto): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +async function update( + atrzSeComCd: string, + ognzSn: number, + userUuid: string, + body: RvwMnpwMngUpdateRequestDto, +): Promise { + const response = await client.put( + pkPath(atrzSeComCd, ognzSn, userUuid), + body, + ); + return response.data; +} + +async function deleteRvwMnpw( + atrzSeComCd: string, + ognzSn: number, + userUuid: string, +): Promise { + const response = await client.delete(pkPath(atrzSeComCd, ognzSn, userUuid)); + return response.data; +} + +export const rvwMnpwMngService = { + findPage, + findById, + save, + update, + delete: deleteRvwMnpw, +} satisfies RvwMnpwMngService; diff --git a/apps/as/src/entities/rvw-mnpw/index.ts b/apps/as/src/entities/rvw-mnpw/index.ts new file mode 100644 index 000000000..14dd27dfc --- /dev/null +++ b/apps/as/src/entities/rvw-mnpw/index.ts @@ -0,0 +1,15 @@ +export { + useDeleteRvwMnpwMng, + useRvwMnpwMng, + useRvwMnpwMngPage, + useSaveRvwMnpwMng, + useUpdateRvwMnpwMng, +} from "./api/queries"; +export { rvwMnpwMngService } from "./api/rvw-mnpw-service"; +export type { + RvwMnpwMngResponseDto, + RvwMnpwMngSaveRequestDto, + RvwMnpwMngSearchDto, + RvwMnpwMngService, + RvwMnpwMngUpdateRequestDto, +} from "./model/rvw-mnpw-interface"; diff --git a/apps/as/src/entities/rvw-mnpw/model/rvw-mnpw-interface.ts b/apps/as/src/entities/rvw-mnpw/model/rvw-mnpw-interface.ts new file mode 100644 index 000000000..73aef5961 --- /dev/null +++ b/apps/as/src/entities/rvw-mnpw/model/rvw-mnpw-interface.ts @@ -0,0 +1,45 @@ +import type { PageableParams, PageResponse } from "@/shared/model"; + +/** 백엔드 RvwMnpwMngResponseDto */ +export interface RvwMnpwMngResponseDto { + atrzSeComCd: string; + atrzSeComCdNm?: string; + ognzSn: number; + userUuid: string; + userUuidNm?: string; + rgtr?: string; + regDt?: string; +} + +/** 백엔드 RvwMnpwMngSearchDto + Pageable */ +export interface RvwMnpwMngSearchDto extends PageableParams { + atrzSeComCd?: string; + ognzSn?: number; + userUuid?: string; +} + +/** 백엔드 RvwMnpwMngSaveRequestDto */ +export interface RvwMnpwMngSaveRequestDto { + atrzSeComCd: string; + ognzSn: number; + userUuid: string; +} + +/** 백엔드 RvwMnpwMngUpdateRequestDto */ +export interface RvwMnpwMngUpdateRequestDto { + newAtrzSeComCd: string; +} + +/** Controller public 메서드명·시그니처와 동일 */ +export interface RvwMnpwMngService { + findPage(params: RvwMnpwMngSearchDto): Promise>; + findById(atrzSeComCd: string, ognzSn: number, userUuid: string): Promise; + save(body: RvwMnpwMngSaveRequestDto): Promise; + update( + atrzSeComCd: string, + ognzSn: number, + userUuid: string, + body: RvwMnpwMngUpdateRequestDto, + ): Promise; + delete(atrzSeComCd: string, ognzSn: number, userUuid: string): Promise; +} diff --git a/apps/as/src/shared/config/api.ts b/apps/as/src/shared/config/api.ts index 84510a543..46ff4757d 100644 --- a/apps/as/src/shared/config/api.ts +++ b/apps/as/src/shared/config/api.ts @@ -7,6 +7,7 @@ export const ENDPOINT = { ACNTG_SE: "/as-service/api/v1/acntg-se", CNSTP_SE: "/as-service/api/v1/cnstp-se", ESNTL_ATCH_FILE: "/as-service/api/v1/esntl-atch-file", + RVW_MNPW: "/as-service/api/v1/rvw-mnpw", }, AS_INSTL_SERVICE: { INSTL_SNCN: "/as-service/api/v1/instl-sncn",