From a6da87837ad822318e926ee36009873728cf9514 Mon Sep 17 00:00:00 2001 From: bicochan Date: Tue, 19 May 2026 16:17:09 +0900 Subject: [PATCH] =?UTF-8?q?[as]=20feat:=20=EC=B2=B4=ED=81=AC=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entities/cklst/api/cklst-artcl-service.ts | 70 ++++++++ .../entities/cklst/api/cklst-mng-service.ts | 48 +++++ apps/as/src/entities/cklst/api/queries.ts | 167 ++++++++++++++++++ apps/as/src/entities/cklst/index.ts | 29 +++ .../cklst/model/cklst-artcl-interface.ts | 48 +++++ .../cklst/model/cklst-mng-interface.ts | 36 ++++ apps/as/src/shared/config/api.ts | 4 + 7 files changed, 402 insertions(+) create mode 100644 apps/as/src/entities/cklst/api/cklst-artcl-service.ts create mode 100644 apps/as/src/entities/cklst/api/cklst-mng-service.ts create mode 100644 apps/as/src/entities/cklst/api/queries.ts create mode 100644 apps/as/src/entities/cklst/index.ts create mode 100644 apps/as/src/entities/cklst/model/cklst-artcl-interface.ts create mode 100644 apps/as/src/entities/cklst/model/cklst-mng-interface.ts diff --git a/apps/as/src/entities/cklst/api/cklst-artcl-service.ts b/apps/as/src/entities/cklst/api/cklst-artcl-service.ts new file mode 100644 index 000000000..dda8defd5 --- /dev/null +++ b/apps/as/src/entities/cklst/api/cklst-artcl-service.ts @@ -0,0 +1,70 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + CklstArtcl, + CklstArtclId, + CklstArtclSaveRequest, + CklstArtclSearchParams, + CklstArtclService, + CklstArtclUpdateRequest, +} from "../model/cklst-artcl-interface"; + +async function findPage(params: CklstArtclSearchParams): Promise> { + const response = await client.get>( + ENDPOINT.AS_CHECKLIST_SERVICE.CKLST_ARTCL, + { params }, + ); + return response.data; +} + +async function findByCklstSn(cklstSn: number): Promise { + const response = await client.get( + `${ENDPOINT.AS_CHECKLIST_SERVICE.CKLST_ARTCL}/by-cklst/${cklstSn}`, + ); + return response.data; +} + +async function findById(cklstArtclSn: number, cklstSn: number): Promise { + const response = await client.get( + `${ENDPOINT.AS_CHECKLIST_SERVICE.CKLST_ARTCL}/${cklstArtclSn}/${cklstSn}`, + ); + return response.data; +} + +async function create(body: CklstArtclSaveRequest): Promise { + const response = await client.post( + ENDPOINT.AS_CHECKLIST_SERVICE.CKLST_ARTCL, + body, + ); + return response.data; +} + +async function update( + cklstArtclSn: number, + cklstSn: number, + body: CklstArtclUpdateRequest, +): Promise { + const response = await client.put( + `${ENDPOINT.AS_CHECKLIST_SERVICE.CKLST_ARTCL}/${cklstArtclSn}/${cklstSn}`, + body, + ); + return response.data; +} + +async function remove(cklstArtclSn: number, cklstSn: number): Promise { + const response = await client.delete( + `${ENDPOINT.AS_CHECKLIST_SERVICE.CKLST_ARTCL}/${cklstArtclSn}/${cklstSn}`, + ); + return response.data; +} + +export const cklstArtclService = { + findPage, + findByCklstSn, + findById, + create, + update, + remove, +} satisfies CklstArtclService; diff --git a/apps/as/src/entities/cklst/api/cklst-mng-service.ts b/apps/as/src/entities/cklst/api/cklst-mng-service.ts new file mode 100644 index 000000000..67f22d3b1 --- /dev/null +++ b/apps/as/src/entities/cklst/api/cklst-mng-service.ts @@ -0,0 +1,48 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageResponse } from "@/shared/model"; + +import type { + CklstMng, + CklstMngSaveRequest, + CklstMngSearchParams, + CklstMngService, +} from "../model/cklst-mng-interface"; + +async function findPage(params: CklstMngSearchParams): Promise> { + const response = await client.get>(ENDPOINT.AS_CHECKLIST_SERVICE.CKLST, { + params, + }); + return response.data; +} + +async function findById(cklstSn: number): Promise { + const response = await client.get(`${ENDPOINT.AS_CHECKLIST_SERVICE.CKLST}/${cklstSn}`); + return response.data; +} + +async function create(body: CklstMngSaveRequest): Promise { + const response = await client.post(ENDPOINT.AS_CHECKLIST_SERVICE.CKLST, body); + return response.data; +} + +async function update(cklstSn: number, body: CklstMngSaveRequest): Promise { + const response = await client.put( + `${ENDPOINT.AS_CHECKLIST_SERVICE.CKLST}/${cklstSn}`, + body, + ); + return response.data; +} + +async function remove(cklstSn: number): Promise { + const response = await client.delete(`${ENDPOINT.AS_CHECKLIST_SERVICE.CKLST}/${cklstSn}`); + return response.data; +} + +export const cklstMngService = { + findPage, + findById, + create, + update, + remove, +} satisfies CklstMngService; diff --git a/apps/as/src/entities/cklst/api/queries.ts b/apps/as/src/entities/cklst/api/queries.ts new file mode 100644 index 000000000..d7b8fd2e5 --- /dev/null +++ b/apps/as/src/entities/cklst/api/queries.ts @@ -0,0 +1,167 @@ +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; + +import { ENDPOINT } from "@/shared/config"; + +import type { + CklstArtclSaveRequest, + CklstArtclSearchParams, + CklstArtclUpdateRequest, +} from "../model/cklst-artcl-interface"; +import type { CklstMngSaveRequest, CklstMngSearchParams } from "../model/cklst-mng-interface"; + +import { cklstArtclService } from "./cklst-artcl-service"; +import { cklstMngService } from "./cklst-mng-service"; + +const cklstMngBaseKey = [ENDPOINT.AS_CHECKLIST_SERVICE.CKLST] as const; +const cklstArtclBaseKey = [ENDPOINT.AS_CHECKLIST_SERVICE.CKLST_ARTCL] as const; + +export function useCklstMngPage(params: CklstMngSearchParams) { + return useQuery({ + queryKey: [...cklstMngBaseKey, "page", params], + queryFn: () => cklstMngService.findPage(params), + }); +} + +export function useCklstMng(cklstSn: number | null | undefined) { + return useQuery({ + queryKey: [...cklstMngBaseKey, cklstSn], + queryFn: () => cklstMngService.findById(cklstSn!), + enabled: cklstSn != null, + }); +} + +export function useCreateCklstMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (body: CklstMngSaveRequest) => cklstMngService.create(body), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: cklstMngBaseKey }); + }, + }); +} + +export function useUpdateCklstMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ cklstSn, body }: { cklstSn: number; body: CklstMngSaveRequest }) => + cklstMngService.update(cklstSn, body), + onSuccess: (_data, { cklstSn }) => { + queryClient.invalidateQueries({ queryKey: cklstMngBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...cklstMngBaseKey, cklstSn], + }); + }, + }); +} + +export function useDeleteCklstMng() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (cklstSn: number) => cklstMngService.remove(cklstSn), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: cklstMngBaseKey }); + }, + }); +} + +export function useCklstArtclPage(params: CklstArtclSearchParams) { + const { cklstSn } = params; + + return useQuery({ + queryKey: [...cklstArtclBaseKey, "page", params], + queryFn: () => cklstArtclService.findPage(params), + enabled: cklstSn != null, + }); +} + +export function useCklstArtclList(cklstSn: number | null | undefined) { + return useQuery({ + queryKey: [...cklstArtclBaseKey, "by-cklst", cklstSn], + queryFn: () => cklstArtclService.findByCklstSn(cklstSn!), + enabled: cklstSn != null, + }); +} + +export function useCklstArtcl(params: { + cklstArtclSn: number | null | undefined; + cklstSn: number | null | undefined; +}) { + const { cklstArtclSn, cklstSn } = params; + + return useQuery({ + queryKey: [...cklstArtclBaseKey, cklstArtclSn, cklstSn], + queryFn: () => cklstArtclService.findById(cklstArtclSn!, cklstSn!), + enabled: cklstArtclSn != null && cklstSn != null, + }); +} + +export function useCreateCklstArtcl() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: (body: CklstArtclSaveRequest) => cklstArtclService.create(body), + onSuccess: (_data, { cklstSn }) => { + queryClient.invalidateQueries({ queryKey: cklstArtclBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...cklstArtclBaseKey, "page", { cklstSn }], + }); + queryClient.invalidateQueries({ + queryKey: [...cklstArtclBaseKey, "by-cklst", cklstSn], + }); + }, + }); +} + +export function useUpdateCklstArtcl() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ + cklstArtclSn, + cklstSn, + body, + }: { + cklstArtclSn: number; + cklstSn: number; + body: CklstArtclUpdateRequest; + }) => cklstArtclService.update(cklstArtclSn, cklstSn, body), + onSuccess: (_data, { cklstArtclSn, cklstSn }) => { + queryClient.invalidateQueries({ queryKey: cklstArtclBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...cklstArtclBaseKey, cklstArtclSn, cklstSn], + }); + queryClient.invalidateQueries({ + queryKey: [...cklstArtclBaseKey, "page", { cklstSn }], + }); + queryClient.invalidateQueries({ + queryKey: [...cklstArtclBaseKey, "by-cklst", cklstSn], + }); + }, + }); +} + +export function useDeleteCklstArtcl() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: ({ + cklstArtclSn, + cklstSn, + }: { + cklstArtclSn: number; + cklstSn: number; + }) => cklstArtclService.remove(cklstArtclSn, cklstSn), + onSuccess: (_data, { cklstSn }) => { + queryClient.invalidateQueries({ queryKey: cklstArtclBaseKey }); + queryClient.invalidateQueries({ + queryKey: [...cklstArtclBaseKey, "page", { cklstSn }], + }); + queryClient.invalidateQueries({ + queryKey: [...cklstArtclBaseKey, "by-cklst", cklstSn], + }); + }, + }); +} diff --git a/apps/as/src/entities/cklst/index.ts b/apps/as/src/entities/cklst/index.ts new file mode 100644 index 000000000..499003f90 --- /dev/null +++ b/apps/as/src/entities/cklst/index.ts @@ -0,0 +1,29 @@ +export { cklstArtclService } from "./api/cklst-artcl-service"; +export { cklstMngService } from "./api/cklst-mng-service"; +export { + useCklstArtcl, + useCklstArtclList, + useCklstArtclPage, + useCklstMng, + useCklstMngPage, + useCreateCklstArtcl, + useCreateCklstMng, + useDeleteCklstArtcl, + useDeleteCklstMng, + useUpdateCklstArtcl, + useUpdateCklstMng, +} from "./api/queries"; +export type { + CklstArtcl, + CklstArtclId, + CklstArtclSaveRequest, + CklstArtclSearchParams, + CklstArtclService, + CklstArtclUpdateRequest, +} from "./model/cklst-artcl-interface"; +export type { + CklstMng, + CklstMngSaveRequest, + CklstMngSearchParams, + CklstMngService, +} from "./model/cklst-mng-interface"; diff --git a/apps/as/src/entities/cklst/model/cklst-artcl-interface.ts b/apps/as/src/entities/cklst/model/cklst-artcl-interface.ts new file mode 100644 index 000000000..9d6e0e055 --- /dev/null +++ b/apps/as/src/entities/cklst/model/cklst-artcl-interface.ts @@ -0,0 +1,48 @@ +import type { PageableParams, PageResponse } from "@/shared/model"; + +export interface CklstArtclId { + cklstArtclSn: number; + cklstSn: number; +} + +export interface CklstArtcl { + cklstArtclSn: number; + cklstSn: number; + cklstArtclNm?: string; + useYn?: "Y" | "N"; + rgtr?: string; + rgtrNm?: string; + mdfr?: string; + regDt?: string; + mdfcnDt?: string; +} + +export interface CklstArtclSearchParams extends PageableParams { + cklstSn?: number; + cklstArtclNm?: string; + useYn?: "Y" | "N"; +} + +export interface CklstArtclSaveRequest { + cklstSn: number; + cklstArtclNm?: string; + useYn?: "Y" | "N"; +} + +export interface CklstArtclUpdateRequest { + cklstArtclNm?: string; + useYn?: "Y" | "N"; +} + +export interface CklstArtclService { + findPage(params: CklstArtclSearchParams): Promise>; + findByCklstSn(cklstSn: number): Promise; + findById(cklstArtclSn: number, cklstSn: number): Promise; + create(body: CklstArtclSaveRequest): Promise; + update( + cklstArtclSn: number, + cklstSn: number, + body: CklstArtclUpdateRequest, + ): Promise; + remove(cklstArtclSn: number, cklstSn: number): Promise; +} diff --git a/apps/as/src/entities/cklst/model/cklst-mng-interface.ts b/apps/as/src/entities/cklst/model/cklst-mng-interface.ts new file mode 100644 index 000000000..ad1302b00 --- /dev/null +++ b/apps/as/src/entities/cklst/model/cklst-mng-interface.ts @@ -0,0 +1,36 @@ +import type { PageableParams, PageResponse } from "@/shared/model"; + +export interface CklstMng { + cklstSn: number; + cklstNm: string; + taskSeComCd: string; + useYn?: "Y" | "N"; + docSeComCd?: string; + rgtr?: string; + rgtrNm?: string; + mdfr?: string; + regDt?: string; + mdfcnDt?: string; +} + +export interface CklstMngSearchParams extends PageableParams { + cklstNm?: string; + taskSeComCd?: string; + useYn?: "Y" | "N"; + docSeComCd?: string; +} + +export interface CklstMngSaveRequest { + cklstNm: string; + taskSeComCd: string; + useYn?: "Y" | "N"; + docSeComCd?: string; +} + +export interface CklstMngService { + findPage(params: CklstMngSearchParams): Promise>; + findById(cklstSn: number): Promise; + create(body: CklstMngSaveRequest): Promise; + update(cklstSn: number, body: CklstMngSaveRequest): Promise; + remove(cklstSn: number): Promise; +} diff --git a/apps/as/src/shared/config/api.ts b/apps/as/src/shared/config/api.ts index de6c577a9..b7738e948 100644 --- a/apps/as/src/shared/config/api.ts +++ b/apps/as/src/shared/config/api.ts @@ -11,6 +11,10 @@ export const ENDPOINT = { ELAPR_TMPLT: "/as-elapr-service/api/v1/elapr-tmplt", ELAPR_APLN: "/as-elapr-service/api/v1/elapr-apln", }, + AS_CHECKLIST_SERVICE: { + CKLST: "/as-checklist-service/api/v1/cklst", + CKLST_ARTCL: "/as-checklist-service/api/v1/cklst-artcl", + }, CMS_SERVICE: { CODE: "/cms-service/api/v1/code/cache", MENU_ROLES: "/cms-service/api/v1/menu-roles",