diff --git a/apps/cs/app/site/register/page.tsx b/apps/cs/app/site/register/page.tsx index a11d0b60c..01e25cc43 100644 --- a/apps/cs/app/site/register/page.tsx +++ b/apps/cs/app/site/register/page.tsx @@ -1,2 +1,2 @@ -import { RegisterPage } from "@/pages/site"; -export default RegisterPage; +import { CreatePage } from "@/pages/site"; +export default CreatePage; diff --git a/apps/cs/src/entities/site/api/site-service.ts b/apps/cs/src/entities/site/api/site-service.ts index 0430377e6..478143392 100644 --- a/apps/cs/src/entities/site/api/site-service.ts +++ b/apps/cs/src/entities/site/api/site-service.ts @@ -1,11 +1,12 @@ import { client } from "@/shared/api/client"; import { ENDPOINT } from "@/shared/config/api"; -import type { - ISiteInfo, - SiteService, - ISiteDetail, - ISiteParams, - SiteFormData, +import { + siteFormSchema, + type ISiteInfo, + type SiteService, + type ISiteDetail, + type ISiteParams, + type SiteFormData, } from "../model/site-interface"; export class SiteApiService implements SiteService { @@ -25,9 +26,19 @@ export class SiteApiService implements SiteService { } public async modifySite(siteId: string, data: SiteFormData): Promise { + const validatedData = siteFormSchema.parse(data); const response = await client.put( `${ENDPOINT.CMS_SERVICE.SITES}/${siteId}`, - data, + validatedData, + ); + return response.data; + } + + public async createSite(data: SiteFormData): Promise { + const validatedData = siteFormSchema.parse(data); + const response = await client.post( + `${ENDPOINT.CMS_SERVICE.SITES}`, + validatedData, ); return response.data; } diff --git a/apps/cs/src/entities/site/model/site-interface.ts b/apps/cs/src/entities/site/model/site-interface.ts index fbf94bfd8..4d03e2c8b 100644 --- a/apps/cs/src/entities/site/model/site-interface.ts +++ b/apps/cs/src/entities/site/model/site-interface.ts @@ -63,17 +63,17 @@ export interface ISiteDetail extends SiteFormData { } export const siteFormSchema = z.object({ - siteId: z.string().max(2), - siteNm: z.string().max(100), + siteId: z.string().max(2).nonempty(), + siteNm: z.string().max(100).nonempty(), siteExpln: z.string().max(1000).optional(), - siteKndCd: z.string().max(10), + siteKndCd: z.string().max(10).nonempty(), siteAddr: z.string().max(2000).optional(), faxNo: z.string().max(100).optional(), telNo: z.string().max(1000).optional(), lwndCn: z.string().max(2000).optional(), - bscSiteYn: z.string().optional(), + bscSiteYn: z.string(), bkmkIcon: z.string().max(100).optional(), - useYn: z.string().optional(), + useYn: z.string(), siteSkn: z.string().max(10).optional(), }); @@ -83,4 +83,5 @@ export interface SiteService { siteInfo(query: ISiteParams): Promise; siteDetail(siteId: string): Promise; modifySite(siteId: string, data: SiteFormData): Promise; + createSite(data: SiteFormData): Promise; } diff --git a/apps/cs/src/pages/site/ui/create-page.tsx b/apps/cs/src/pages/site/ui/create-page.tsx index cbffb5fc5..10d2d9030 100644 --- a/apps/cs/src/pages/site/ui/create-page.tsx +++ b/apps/cs/src/pages/site/ui/create-page.tsx @@ -1,22 +1,53 @@ "use client"; -import type { z } from "zod"; +import { useState } from "react"; +import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; +import { useMutation } from "@tanstack/react-query"; import { zodResolver } from "@hookform/resolvers/zod"; -import { siteFormSchema } from "../model/form-schema"; +import { SiteApi, siteFormSchema, type SiteFormData } from "@/entities/site"; +import { SitePageLayout } from "./layout"; import { SiteForm } from "./site-form"; +import { + Button, + Dialog, + DialogClose, + DialogContent, + DialogFooter, +} from "@common/components/ui"; function CreatePage() { - const form = useForm>({ - defaultValues: siteFormSchema.parse({ - siteId: "", - siteNm: "", - siteKndCd: "", - }), + const router = useRouter(); + const { mutateAsync: createSite } = useMutation({ + mutationFn: (data: SiteFormData) => SiteApi.createSite(data), + onSuccess: () => { + setIsCreateSuccess(true); + }, + }); + + const [isCreateSuccess, setIsCreateSuccess] = useState(false); + + const form = useForm({ resolver: zodResolver(siteFormSchema), }); - return {}} />; + return ( + + + router.back()}> + +
+

등록되었습니다.

+
+ + + + + +
+
+
+ ); } export { CreatePage }; diff --git a/apps/cs/src/pages/site/ui/modify-page.tsx b/apps/cs/src/pages/site/ui/modify-page.tsx index a7bbc224d..5534c75bc 100644 --- a/apps/cs/src/pages/site/ui/modify-page.tsx +++ b/apps/cs/src/pages/site/ui/modify-page.tsx @@ -1,6 +1,7 @@ "use client"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; +import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { useMutation, useQuery } from "@tanstack/react-query"; import { zodResolver } from "@hookform/resolvers/zod"; @@ -13,10 +14,18 @@ import { import { ENDPOINT } from "@/shared/config/api"; import { SitePageLayout } from "./layout"; import { SiteForm } from "./site-form"; +import { + Button, + Dialog, + DialogClose, + DialogContent, + DialogFooter, +} from "@common/components/ui"; function ModifyPage({ siteId }: { siteId: string }) { const isModifyMode = !!siteId; + const router = useRouter(); const { data: siteDetail } = useQuery({ queryKey: [ENDPOINT.CMS_SERVICE.SITES, siteId], queryFn: () => SiteApi.siteDetail(siteId), @@ -30,24 +39,17 @@ function ModifyPage({ siteId }: { siteId: string }) { const { mutateAsync: modifySite } = useMutation({ mutationFn: (data: SiteFormData) => SiteApi.modifySite(siteId, data), - onSuccess: (data) => { - console.log("success!", data); + onSuccess: () => { + setIsModifySuccess(true); }, }); + const [isModifySuccess, setIsModifySuccess] = useState(false); + const form = useForm({ - defaultValues: siteFormSchema.omit({ siteId: true }).parse({ - siteNm: "", - siteKndCd: "", - }), resolver: zodResolver(siteFormSchema), }); - const handleSave = (data: SiteFormData) => { - console.log(data); - modifySite(data); - }; - useEffect(() => { if (!siteDetail) return; @@ -55,16 +57,26 @@ function ModifyPage({ siteId }: { siteId: string }) { for (const key of keys) { form.setValue( key as keyof SiteFormData, - siteDetail[key as keyof ISiteDetail], + siteDetail[key as keyof ISiteDetail] ?? "", ); } }, [siteDetail]); - console.log(form.watch()); - return ( - + + router.back()}> + +
+

수정되었습니다.

+
+ + + + + +
+
); } diff --git a/apps/cs/src/pages/site/ui/site-form.tsx b/apps/cs/src/pages/site/ui/site-form.tsx index 8bbeee156..c1a5dfc02 100644 --- a/apps/cs/src/pages/site/ui/site-form.tsx +++ b/apps/cs/src/pages/site/ui/site-form.tsx @@ -187,17 +187,19 @@ function SiteForm({ form, siteId, handleSave }: SiteFormProps) { /> - - 사이트 도메인 - -
-
- {representativeDomain} + {isModifyMode && ( + + 사이트 도메인 + +
+
+ {representativeDomain} +
+
- -
- - + + + )} 사이트 하단 표기 주소 @@ -368,15 +370,17 @@ function SiteForm({ form, siteId, handleSave }: SiteFormProps) {
+ - - + {isModifyMode && ( + + )}