diff --git a/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/[pstNo]/modify/page.tsx b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/[pstNo]/modify/page.tsx
new file mode 100644
index 000000000..76f2d06c3
--- /dev/null
+++ b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/[pstNo]/modify/page.tsx
@@ -0,0 +1,10 @@
+import { ModifyPage } from "@/pages/(pst)/movie";
+
+export default async function PstBbsMoviePostModifyPage({
+ params,
+}: {
+ params: Promise<{ bbsId: string; pstNo: string }>;
+}) {
+ const { bbsId, pstNo } = await params;
+ return ;
+}
diff --git a/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/[pstNo]/page.tsx b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/[pstNo]/page.tsx
new file mode 100644
index 000000000..e0983bd61
--- /dev/null
+++ b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/[pstNo]/page.tsx
@@ -0,0 +1,10 @@
+import { MoviePost } from "@/pages/(pst)/movie";
+
+export default async function PstBbsMoviePostPage({
+ params,
+}: {
+ params: Promise<{ bbsId: string; pstNo: string }>;
+}) {
+ const { bbsId, pstNo } = await params;
+ return ;
+}
diff --git a/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/page.tsx b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/page.tsx
new file mode 100644
index 000000000..bbd6b2619
--- /dev/null
+++ b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/page.tsx
@@ -0,0 +1,10 @@
+import { MoviePage } from "@/pages/(pst)/movie";
+
+export default async function PstBbsMoviePage({
+ params,
+}: {
+ params: Promise<{ bbsId: string }>;
+}) {
+ const { bbsId } = await params;
+ return ;
+}
diff --git a/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/register/page.tsx b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/register/page.tsx
new file mode 100644
index 000000000..5cfffb031
--- /dev/null
+++ b/apps/common/features/app/(with-base-layout)/pst/bbsmovie/[bbsId]/register/page.tsx
@@ -0,0 +1,10 @@
+import { CreatePage } from "@/pages/(pst)/movie";
+
+export default async function PstBbsMovieRegisterPage({
+ params,
+}: {
+ params: Promise<{ bbsId: string }>;
+}) {
+ const { bbsId } = await params;
+ return ;
+}
diff --git a/apps/common/features/src/pages/(pst)/movie/index.ts b/apps/common/features/src/pages/(pst)/movie/index.ts
new file mode 100644
index 000000000..c746cff6c
--- /dev/null
+++ b/apps/common/features/src/pages/(pst)/movie/index.ts
@@ -0,0 +1,4 @@
+export { CreatePage } from "./ui/create-page";
+export { ModifyPage } from "./ui/modify-page";
+export { MoviePage } from "./ui/movie-page";
+export { MoviePost } from "./ui/movie-post";
diff --git a/apps/common/features/src/pages/(pst)/movie/ui/create-page.tsx b/apps/common/features/src/pages/(pst)/movie/ui/create-page.tsx
new file mode 100644
index 000000000..f7e2e837f
--- /dev/null
+++ b/apps/common/features/src/pages/(pst)/movie/ui/create-page.tsx
@@ -0,0 +1,43 @@
+"use client";
+
+import { useRouter } from "next/navigation";
+import { useForm } from "react-hook-form";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { useMutation } from "@tanstack/react-query";
+import { PostForm } from "@/widgets/post";
+import { PostApi, postFormSchema, type PostFormData } from "@/entities/post";
+import { useAlertStore, useUserStore } from "@/shared/lib";
+
+function CreatePage({ bbsId }: { bbsId: string }) {
+ const router = useRouter();
+ const { userInfo } = useUserStore((state) => state);
+ const { setMessage: alert } = useAlertStore((state) => state);
+
+ const { mutateAsync: createPost } = useMutation({
+ mutationFn: (data: PostFormData) => PostApi.createPost(data),
+ onSuccess: () => {
+ alert("등록되었습니다.", router.back);
+ },
+ });
+
+ const form = useForm({
+ resolver: zodResolver(postFormSchema),
+ values: {
+ bbsId: parseInt(bbsId),
+ pstTtl: "",
+ wrtrNm: userInfo?.userName ?? "",
+ pstPswd: userInfo?.userUnqId ?? "",
+ },
+ });
+
+ return (
+
+ );
+}
+
+export { CreatePage };
diff --git a/apps/common/features/src/pages/(pst)/movie/ui/modify-page.tsx b/apps/common/features/src/pages/(pst)/movie/ui/modify-page.tsx
new file mode 100644
index 000000000..6bbdd8d94
--- /dev/null
+++ b/apps/common/features/src/pages/(pst)/movie/ui/modify-page.tsx
@@ -0,0 +1,53 @@
+"use client";
+
+import { useRouter } from "next/navigation";
+import { useForm } from "react-hook-form";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { useMutation, useQuery } from "@tanstack/react-query";
+import { PostForm } from "@/widgets/post";
+import {
+ PostApi,
+ postUpdateFormSchema,
+ type PostUpdateFormData,
+} from "@/entities/post";
+import { ENDPOINT } from "@/shared/config";
+import { useAlertStore, useUserStore } from "@/shared/lib";
+
+function ModifyPage({ bbsId, pstNo }: { bbsId: string; pstNo: string }) {
+ const router = useRouter();
+ const { setMessage: alert } = useAlertStore((state) => state);
+ const { userInfo } = useUserStore((state) => state);
+
+ const { data: postInfo } = useQuery({
+ queryKey: [ENDPOINT.BOARD_SERVICE.POSTS_USER, bbsId, pstNo],
+ queryFn: () => PostApi.getPostInfo(parseInt(bbsId), parseInt(pstNo)),
+ });
+
+ const { mutateAsync: updatePost } = useMutation({
+ mutationFn: (data: PostUpdateFormData) =>
+ PostApi.updatePost(parseInt(bbsId), parseInt(pstNo), data),
+ onSuccess: () => {
+ alert("수정되었습니다.", router.back);
+ },
+ });
+
+ const form = useForm({
+ resolver: zodResolver(postUpdateFormSchema),
+ values: {
+ ...postInfo,
+ pstTtl: postInfo?.pstTtl ?? "",
+ pstPswd: userInfo?.userUnqId ?? "",
+ },
+ });
+
+ return (
+
+ );
+}
+
+export { ModifyPage };
diff --git a/apps/common/features/src/pages/(pst)/movie/ui/movie-page.tsx b/apps/common/features/src/pages/(pst)/movie/ui/movie-page.tsx
new file mode 100644
index 000000000..5ba24e94b
--- /dev/null
+++ b/apps/common/features/src/pages/(pst)/movie/ui/movie-page.tsx
@@ -0,0 +1,3 @@
+"use client";
+
+export { PostPage as MoviePage } from "@/widgets/post";
diff --git a/apps/common/features/src/pages/(pst)/movie/ui/movie-post.tsx b/apps/common/features/src/pages/(pst)/movie/ui/movie-post.tsx
new file mode 100644
index 000000000..8a5bf6996
--- /dev/null
+++ b/apps/common/features/src/pages/(pst)/movie/ui/movie-post.tsx
@@ -0,0 +1,3 @@
+"use client";
+
+export { Post as MoviePost } from "@/widgets/post";
diff --git a/apps/common/features/src/widgets/post/ui/post.tsx b/apps/common/features/src/widgets/post/ui/post.tsx
index 19e271315..44e549a70 100644
--- a/apps/common/features/src/widgets/post/ui/post.tsx
+++ b/apps/common/features/src/widgets/post/ui/post.tsx
@@ -36,7 +36,10 @@ function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) {
queryKey: [ENDPOINT.ATTACH_SERVICE.DOWNLOAD, postData?.atflCd],
queryFn: () =>
AttachmentApi.downloadAttachmentByAtflCd(postData?.atflCd as string),
- enabled: !!postData?.atflCd && bbsInfo?.bbsTypeCd !== "BBSIMAGE",
+ enabled:
+ !!postData?.atflCd &&
+ bbsInfo?.bbsTypeCd !== "BBSIMAGE" &&
+ bbsInfo?.bbsTypeCd !== "BBSMOVIE",
});
const { data: imageUrl, isLoading } = useQuery({
@@ -46,6 +49,22 @@ function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) {
enabled: !!postData?.atflCd,
});
+ const { data: videoAttachment } = useQuery({
+ queryKey: [ENDPOINT.ATTACH_SERVICE.ATTACHMENTS, postData?.atflCd],
+ queryFn: () => AttachmentApi.getAttachmentsInfo(postData?.atflCd as string),
+ select: (data) => data[0],
+ enabled: !!postData?.atflCd && bbsInfo?.bbsTypeCd === "BBSMOVIE",
+ });
+
+ const { data: videoUrl } = useQuery({
+ queryKey: [ENDPOINT.ATTACH_SERVICE.STREAM_VIDEO, videoAttachment?.atflId],
+ queryFn: () =>
+ AttachmentApi.getStreamVideoUrlByAtflId(
+ videoAttachment?.atflId as string,
+ ),
+ enabled: !!videoAttachment?.atflId,
+ });
+
const { mutate: deletePost } = useMutation({
mutationFn: (pstPswd: string) =>
PostApi.deletePost(parseInt(bbsId), parseInt(pstNo), pstPswd),
@@ -144,6 +163,11 @@ function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) {
)}
>
)}
+ {bbsInfo?.bbsTypeCd === "BBSMOVIE" && (
+
+
+
+ )}
{postData?.pstCn ?? ""}
diff --git a/apps/cs/src/pages/bbs/model/table-columns.tsx b/apps/cs/src/pages/bbs/model/table-columns.tsx
index f3975aca2..12b241a8a 100644
--- a/apps/cs/src/pages/bbs/model/table-columns.tsx
+++ b/apps/cs/src/pages/bbs/model/table-columns.tsx
@@ -45,6 +45,7 @@ export const columns: ColumnDef[] = [
const ManageButton = ({ row }: { row: Row }) => {
const router = useRouter();
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
const pathname = usePathname();
const [, setBbsInfo] = useLocalStorage("bbs-info", "");
const { setBbsInfo: setStoreBbsInfo } = useMenuStore((state) => state);
@@ -55,7 +56,8 @@ const ManageButton = ({ row }: { row: Row }) => {
size="sm"
onClick={(e) => {
e.stopPropagation();
- router.push(`${pathname}/${bbsTypeCd.toLowerCase()}/${bbsId}`);
+ // router.push(`${pathname}/${bbsTypeCd.toLowerCase()}/${bbsId}`);
+ router.push(`/pst/${bbsTypeCd.toLowerCase()}/${bbsId}`);
setBbsInfo(JSON.stringify(row.original));
setStoreBbsInfo(row.original);
}}