diff --git a/apps/as/src/entities/pwrk-cnsltn-doc-evl/api/pwrk-cnsltn-doc-evl-service.ts b/apps/as/src/entities/pwrk-cnsltn-doc-evl/api/pwrk-cnsltn-doc-evl-service.ts new file mode 100644 index 000000000..54b3c8b2c --- /dev/null +++ b/apps/as/src/entities/pwrk-cnsltn-doc-evl/api/pwrk-cnsltn-doc-evl-service.ts @@ -0,0 +1,19 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; + +import type { + PwrkCnsltnDocEvlId, + PwrkCnsltnDocEvlService, +} from "../model/pwrk-cnsltn-doc-evl-interface"; +import type { PwrkCnsltnDocEvlSaveRequestDto } from "../model/pwrk-cnsltn-doc-evl-payload-schema"; + +const BASE = ENDPOINT.AS_SERVICE.PWRK_CNSLTN_DOC_EVL; + +async function save(body: PwrkCnsltnDocEvlSaveRequestDto): Promise { + const response = await client.post(BASE, body); + return response.data; +} + +export const pwrkCnsltnDocEvlService = { + save, +} satisfies PwrkCnsltnDocEvlService; diff --git a/apps/as/src/entities/pwrk-cnsltn-doc-evl/api/queries.ts b/apps/as/src/entities/pwrk-cnsltn-doc-evl/api/queries.ts new file mode 100644 index 000000000..dcd696ac8 --- /dev/null +++ b/apps/as/src/entities/pwrk-cnsltn-doc-evl/api/queries.ts @@ -0,0 +1,11 @@ +import { useMutation } from "@tanstack/react-query"; + +import type { PwrkCnsltnDocEvlSaveRequestDto } from "../model/pwrk-cnsltn-doc-evl-payload-schema"; + +import { pwrkCnsltnDocEvlService } from "./pwrk-cnsltn-doc-evl-service"; + +export function useSavePwrkCnsltnDocEvl() { + return useMutation({ + mutationFn: (body: PwrkCnsltnDocEvlSaveRequestDto) => pwrkCnsltnDocEvlService.save(body), + }); +} diff --git a/apps/as/src/entities/pwrk-cnsltn-doc-evl/index.ts b/apps/as/src/entities/pwrk-cnsltn-doc-evl/index.ts new file mode 100644 index 000000000..4b8ee4d9c --- /dev/null +++ b/apps/as/src/entities/pwrk-cnsltn-doc-evl/index.ts @@ -0,0 +1,10 @@ +export { pwrkCnsltnDocEvlService } from "./api/pwrk-cnsltn-doc-evl-service"; +export { useSavePwrkCnsltnDocEvl } from "./api/queries"; +export type { + PwrkCnsltnDocEvlId, + PwrkCnsltnDocEvlService, +} from "./model/pwrk-cnsltn-doc-evl-interface"; +export { + type PwrkCnsltnDocEvlSaveRequestDto, + pwrkCnsltnDocEvlSaveRequestSchema, +} from "./model/pwrk-cnsltn-doc-evl-payload-schema"; diff --git a/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-interface.ts b/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-interface.ts new file mode 100644 index 000000000..e2735e028 --- /dev/null +++ b/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-interface.ts @@ -0,0 +1,12 @@ +import type { PwrkCnsltnDocEvlSaveRequestDto } from "./pwrk-cnsltn-doc-evl-payload-schema"; + +/** 백엔드 PwrkCnsltnDocEvlId (IdClass) */ +export interface PwrkCnsltnDocEvlId { + pwrkCnsltnDocMng: string; + pwrkCnsltnDocEvlUuid: string; +} + +/** Controller public 메서드명·시그니처와 동일 (save만) */ +export interface PwrkCnsltnDocEvlService { + save(body: PwrkCnsltnDocEvlSaveRequestDto): Promise; +} diff --git a/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-payload-schema.ts b/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-payload-schema.ts new file mode 100644 index 000000000..5418c7c63 --- /dev/null +++ b/apps/as/src/entities/pwrk-cnsltn-doc-evl/model/pwrk-cnsltn-doc-evl-payload-schema.ts @@ -0,0 +1,12 @@ +import { z } from "zod"; + +/** 백엔드 PwrkCnsltnDocEvlSaveRequestDto */ +export const pwrkCnsltnDocEvlSaveRequestSchema = z.object({ + pwrkCnsltnDocNo: z.string().min(1), + pwrkCnsltnDocEvlUuid: z.string().uuid().optional(), + pwrkCnsltnDocEvlCn: z.string().max(2000).optional(), + pwrkCnsltnDocEvlScr: z.number().optional(), + pwrkCnsltnDocEvlDt: z.string().optional(), +}); + +export type PwrkCnsltnDocEvlSaveRequestDto = z.infer; diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts b/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts index 6f711405b..3b0aca199 100644 --- a/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts +++ b/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts @@ -141,11 +141,9 @@ const ROLE_USER01_ATRZ_STATUS_ACTIONS: Record< ATRZ01: [ FNRS_CNSLTN_VIEW_BUTTON_ACTION.pwrkCnsltnDocMng, FNRS_CNSLTN_VIEW_BUTTON_ACTION.dsgntRvwr, - ], - ATRZ02: [ - FNRS_CNSLTN_VIEW_BUTTON_ACTION.pwrkCnsltnDocMng, FNRS_CNSLTN_VIEW_BUTTON_ACTION.costVrfc, ], + ATRZ02: [FNRS_CNSLTN_VIEW_BUTTON_ACTION.pwrkCnsltnDocMng], ATRZ03: [FNRS_CNSLTN_VIEW_BUTTON_ACTION.pwrkCnsltnDocMng], ATRZ99: [FNRS_CNSLTN_VIEW_BUTTON_ACTION.pwrkCnsltnDocMng], }, @@ -235,6 +233,9 @@ function resolveRoleUser01AtrzButtonActions( if (action === FNRS_CNSLTN_VIEW_BUTTON_ACTION.fileVrfc) { return options?.canRetryFileVrfc === true; } + if (action === FNRS_CNSLTN_VIEW_BUTTON_ACTION.fileSplmnt) { + return options?.canRetryFileVrfc !== true; + } if (action === FNRS_CNSLTN_VIEW_BUTTON_ACTION.pwrkCnsltnDocCrt) { return options?.canRetryDraftGen === true; } diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/pwrk-cnsltn-doc-evl-schema.ts b/apps/as/src/pages/fnrs-cnsltn/lib/pwrk-cnsltn-doc-evl-schema.ts new file mode 100644 index 000000000..569c4f9c2 --- /dev/null +++ b/apps/as/src/pages/fnrs-cnsltn/lib/pwrk-cnsltn-doc-evl-schema.ts @@ -0,0 +1,32 @@ +import { z } from "zod"; + +import { pwrkCnsltnDocEvlSaveRequestSchema } from "@/entities/pwrk-cnsltn-doc-evl"; + +export const PWRK_CNSLTN_DOC_EVL_SCR_OPTIONS = [ + { value: "5", label: "매우 만족" }, + { value: "4", label: "만족" }, + { value: "3", label: "보통" }, + { value: "2", label: "불만족" }, + { value: "1", label: "매우 불만족" }, +] as const; + +export const pwrkCnsltnDocEvlFormSchema = z.object({ + pwrkCnsltnDocEvlScr: z.enum(["1", "2", "3", "4", "5"], { + required_error: "만족도를 선택해 주세요.", + invalid_type_error: "만족도를 선택해 주세요.", + }), + pwrkCnsltnDocEvlCn: z.string().max(2000).optional(), +}); + +export type PwrkCnsltnDocEvlFormValues = z.infer; + +export function buildPwrkCnsltnDocEvlSavePayload( + pwrkCnsltnDocNo: string, + form: PwrkCnsltnDocEvlFormValues, +) { + return pwrkCnsltnDocEvlSaveRequestSchema.parse({ + pwrkCnsltnDocNo, + pwrkCnsltnDocEvlScr: Number(form.pwrkCnsltnDocEvlScr), + pwrkCnsltnDocEvlCn: form.pwrkCnsltnDocEvlCn?.trim() || undefined, + }); +} diff --git a/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx b/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx index 4076a83fa..b06bf2334 100644 --- a/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx +++ b/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx @@ -709,6 +709,7 @@ function FloatingActionButtons({ )} {shouldShowButton(FNRS_CNSLTN_VIEW_BUTTON_ACTION.fileVrfc) && ( + )} {shouldShowButton(FNRS_CNSLTN_VIEW_BUTTON_ACTION.dsgntRvwr) && !isRagIndexingInProgress(prgrsSttsComCd, data.ragIndexingInfo) && ( - )} {shouldShowButton(FNRS_CNSLTN_VIEW_BUTTON_ACTION.actnCmptn) && (