import request from "@/utils/request";

// 帖子相关API
export const createPost = (params) => {
  return request.post("/posts/create", {...params});
};

export const getPosts = (params) => {
  return request.get("/posts/list", {params});
};

export const deletePost = (params) => {
  return request.delete("/posts/delete", { params });
};

// 评论相关API
export const addComment = (params) => {
  return request.post("/comment/add", {...params});
};

export const getComments = (params) => {
  return request.get('/comment/get', {params});
};

export const deleteComment = (params) => {
  return request.delete("/comment/delete", { params });
}; 