119 lines
2.9 KiB
TypeScript
119 lines
2.9 KiB
TypeScript
import { z } from "zod";
|
|
import type { PageableList, PageableParams } from "@/shared/model";
|
|
|
|
export interface PostParams extends PageableParams {
|
|
keywordType?: string;
|
|
keyword?: string;
|
|
popupYn?: string;
|
|
upndFixYn?: string;
|
|
prdPstgYn?: string;
|
|
siteId?: string;
|
|
bbsTypeCd?: string;
|
|
}
|
|
|
|
export interface RecentPostParams extends PageableParams {
|
|
keywordType?: string;
|
|
keyword?: string;
|
|
bbsId?: number | null;
|
|
delYn?: string;
|
|
frDateYmd?: string;
|
|
toDateYmd?: string;
|
|
}
|
|
|
|
export interface Post {
|
|
rowNo: number;
|
|
bbsId: number;
|
|
pstNo: number;
|
|
pstTtl: string;
|
|
pstCn: string;
|
|
inqNocs: number;
|
|
rfrncUrl: string;
|
|
popupYn: string;
|
|
upndFixYn: string;
|
|
prdPstgYn: string;
|
|
rootPath: string;
|
|
pstPath: string;
|
|
ansPstn: number;
|
|
wrtrNm: string;
|
|
wrtrCplc: string;
|
|
atflCd: string;
|
|
regDt: string;
|
|
rgtrNm: string;
|
|
cmntCnt: number;
|
|
}
|
|
|
|
export interface RecentPost extends Post {
|
|
bbsNm: string;
|
|
bbsTypeCd: string;
|
|
}
|
|
|
|
export interface PostInfo extends Post {
|
|
pstCn: string;
|
|
rgtr: string;
|
|
mdfcnDt: string;
|
|
mdfr: string;
|
|
}
|
|
|
|
export interface MovePost {
|
|
fromBbsId: number;
|
|
toBbsId?: number;
|
|
pstNo: number;
|
|
}
|
|
|
|
export interface DeletePost {
|
|
bbsId: number;
|
|
pstNo: number;
|
|
delRsn?: string;
|
|
}
|
|
|
|
const postEtcSchema = z.object({
|
|
bbsPstgTypeCd: z.string(),
|
|
pstgPrdSeCd: z.string(),
|
|
pstgBgngDt: z.string().nullish(),
|
|
pstgEndDt: z.string().nullish(),
|
|
});
|
|
|
|
export const postFormSchema = z.object({
|
|
bbsId: z.number(),
|
|
pstTtl: z.string().nonempty(),
|
|
pstCn: z.string().nullish(),
|
|
rfrncUrl: z.string().nullish(),
|
|
popupYn: z.string().nullish(),
|
|
popupYnEtc: z.array(postEtcSchema).nullish(),
|
|
upndFixYn: z.string().nullish(),
|
|
upndFixYnEtc: z.array(postEtcSchema).nullish(),
|
|
prdPstgYn: z.string().nullish(),
|
|
prdPstgYnEtc: z.array(postEtcSchema).nullish(),
|
|
pstPswd: z.string(),
|
|
wrtrNm: z.string().nullish(),
|
|
wrtrCplc: z.string().nullish(),
|
|
atflCd: z.string().nullish(),
|
|
parentPstNo: z.number().nullish(),
|
|
});
|
|
|
|
export const postUpdateFormSchema = postFormSchema.omit({
|
|
bbsId: true,
|
|
parentPstNo: true,
|
|
});
|
|
|
|
export type PostList = PageableList<Post>;
|
|
export type RecentPostList = PageableList<RecentPost>;
|
|
export type PostFormData = z.infer<typeof postFormSchema>;
|
|
export type PostUpdateFormData = z.infer<typeof postUpdateFormSchema>;
|
|
|
|
export interface PostService {
|
|
getPostList(bbsId: number, params: PostParams): Promise<PostList>;
|
|
getRecentPostList(params: RecentPostParams): Promise<RecentPostList>;
|
|
getPostInfo(bbsId: number, pstNo: number): Promise<PostInfo>;
|
|
createPost(data: PostFormData): Promise<Post>;
|
|
updatePost(
|
|
bbsId: number,
|
|
pstNo: number,
|
|
data: PostUpdateFormData,
|
|
): Promise<Post>;
|
|
deletePost(bbsId: number, pstNo: number, delRsn?: string): Promise<void>;
|
|
softDeletePost(data: DeletePost[]): Promise<void>;
|
|
hardDeletePost(data: DeletePost[]): Promise<void>;
|
|
movePost(data: MovePost[]): Promise<void>;
|
|
}
|