import { z } from "zod"; import type { PageableList, PageableParams } from "@/shared/model"; import type { BbsType } from "@/shared/store"; export const BOARD_POSTING_CODE = { 팝업게시: "01", 상단게시: "02", 기간게시: "03", } as const; export type BoardPostingCode = (typeof BOARD_POSTING_CODE)[keyof typeof BOARD_POSTING_CODE]; export interface BoardParams extends PageableParams { keywordType?: string; keyword?: string; bbsId?: number; bbsTypeCd?: string; bbsNm?: string; bbsExpln?: string; rfrncUseYn?: string; atflUseYn?: string; atflMaxCnt?: number; atflMaxFileSz?: number; ansUseYn?: string; cmntUseYn?: string; dgstfnEvlUseYn?: string; smsUseYn?: string; upndFixUseYn?: string; pstgPrdUseYn?: string; popupUseYn?: string; delYn?: string; } export interface BoardPopupParams extends PageableParams { bbsNm?: string; } export interface Board { bbsId: number; bbsTypeCd: BbsType; bbsTypeNm: string; bbsNm: string; bbsExpln: string; rfrncUseYn: string; atflUseYn: string; atflMaxCnt: number; atflMaxFileSz: number; ansUseYn: string; ansUseAuthrt: string; cmntUseYn: string; dgstfnEvlUseYn: string; smsUseYn: string; upndFixUseYn: string; pstgPrdUseYn: string; popupUseYn: string; delYn: string; useYn: string; prvcIndctYn: string; mdfcnDt: string; mdfrNm: string; } export interface BoardPopup extends Board { pstCnt: number; } export const boardFormSchema = z.object({ bbsTypeCd: z.string(), bbsNm: z.string(), bbsExpln: z.string(), rfrncUseYn: z.string(), atflUseYn: z.string(), atflMaxCnt: z.number().nullish(), atflMaxFileSz: z.number().nullish(), ansUseYn: z.string(), ansUseAuthrt: z.string().nullish(), cmntUseYn: z.string(), dgstfnEvlUseYn: z.string(), smsUseYn: z.string(), upndFixUseYn: z.string(), pstgPrdUseYn: z.string(), popupUseYn: z.string(), useYn: z.string(), prvcIndctYn: z.string(), }); export type BoardList = PageableList; export type BoardPopupList = PageableList; export type BoardFormData = z.infer; export interface BoardService { getBoardList: (params: BoardParams) => Promise; getBoardPopupList: (params: BoardPopupParams) => Promise; getBoardInfo: (bbsId: string) => Promise; createBoard: (data: BoardFormData) => Promise; updateBoard: (bbsId: string, data: BoardFormData) => Promise; deleteBoard: (bbsId: string) => Promise; }