'use server'; import { executeServerAction, type ActionResult } from '@/lib/api/execute-server-action'; import type { PostApiData, PostPaginationResponse, PostFilters, CommentApiData, CommentsApiResponse, } from '@/components/customer-center/shared/types'; const API_URL = process.env.NEXT_PUBLIC_API_URL; // ===== 게시글 API ===== export async function getDynamicBoardPosts( boardCode: string, filters?: PostFilters ): Promise> { const params = new URLSearchParams(); if (filters?.search) params.append('search', filters.search); if (filters?.is_notice !== undefined) params.append('is_notice', String(filters.is_notice)); if (filters?.status) params.append('status', filters.status); if (filters?.per_page) params.append('per_page', String(filters.per_page)); if (filters?.page) params.append('page', String(filters.page)); const queryString = params.toString(); return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts${queryString ? `?${queryString}` : ''}`, errorMessage: '게시글 목록 조회에 실패했습니다.', }); } export async function getDynamicBoardPost( boardCode: string, postId: number | string ): Promise> { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts/${postId}`, errorMessage: '게시글을 찾을 수 없습니다.', }); } export async function createDynamicBoardPost( boardCode: string, data: { title: string; content: string; is_secret?: boolean; is_notice?: boolean; custom_fields?: Record } ): Promise> { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts`, method: 'POST', body: data, errorMessage: '게시글 등록에 실패했습니다.', }); } export async function updateDynamicBoardPost( boardCode: string, postId: number | string, data: { title?: string; content?: string; is_secret?: boolean; is_notice?: boolean; custom_fields?: Record } ): Promise> { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts/${postId}`, method: 'PUT', body: data, errorMessage: '게시글 수정에 실패했습니다.', }); } export async function deleteDynamicBoardPost( boardCode: string, postId: number | string ): Promise { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts/${postId}`, method: 'DELETE', errorMessage: '게시글 삭제에 실패했습니다.', }); } // ===== 댓글 API ===== export async function getDynamicBoardComments( boardCode: string, postId: number | string ): Promise> { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts/${postId}/comments`, errorMessage: '댓글 목록 조회에 실패했습니다.', }); } export async function createDynamicBoardComment( boardCode: string, postId: number | string, content: string ): Promise> { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts/${postId}/comments`, method: 'POST', body: { content }, errorMessage: '댓글 등록에 실패했습니다.', }); } export async function updateDynamicBoardComment( boardCode: string, postId: number | string, commentId: number | string, content: string ): Promise> { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts/${postId}/comments/${commentId}`, method: 'PUT', body: { content }, errorMessage: '댓글 수정에 실패했습니다.', }); } export async function deleteDynamicBoardComment( boardCode: string, postId: number | string, commentId: number | string ): Promise { return executeServerAction({ url: `${API_URL}/api/v1/boards/${boardCode}/posts/${postId}/comments/${commentId}`, method: 'DELETE', errorMessage: '댓글 삭제에 실패했습니다.', }); }