61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
// miaoBlog/server/api/posts/deletePost.ts
|
|
import DB from 'better-sqlite3';
|
|
import cacheResult from '~/server/utils/cacheRes';
|
|
|
|
function prepareDB() {
|
|
const db = new DB('./userData/db/posts.db');
|
|
|
|
const deletePostStmt = db.prepare('DELETE FROM posts WHERE id = ?');
|
|
const deleteContentStmt = db.prepare('DELETE FROM postContent WHERE id = ?');
|
|
const getTagIdStmt = db.prepare('SELECT tag_id FROM posts WHERE id = ?');
|
|
const deleteTagsStmt = db.prepare('DELETE FROM tags WHERE id = ?');
|
|
|
|
return { db, deletePostStmt, deleteContentStmt, getTagIdStmt, deleteTagsStmt };
|
|
}
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const { db, deletePostStmt, deleteContentStmt, getTagIdStmt, deleteTagsStmt } = cacheResult(prepareDB)();
|
|
|
|
const body = await readBody(event);
|
|
const { id } = body;
|
|
|
|
// 检查是否提供了有效的id
|
|
if (!id || isNaN(Number(id))) {
|
|
db.close();
|
|
return {
|
|
code: 400,
|
|
msg: '无效的id'
|
|
};
|
|
}
|
|
|
|
try {
|
|
// 开启事务
|
|
db.transaction(() => {
|
|
// 先从posts表中删除文章记录
|
|
deletePostStmt.run(Number(id));
|
|
|
|
// 再从postContent表中删除文章内容记录
|
|
deleteContentStmt.run(Number(id));
|
|
|
|
// 查找该文章对应的tag_id
|
|
const tagRow: any = getTagIdStmt.get(Number(id));
|
|
if (tagRow && tagRow.tag_id) {
|
|
// 如果存在tag_id,从tags表中删除对应的标签记录
|
|
deleteTagsStmt.run(tagRow.tag_id);
|
|
}
|
|
})();
|
|
|
|
db.close();
|
|
return {
|
|
code: 200,
|
|
msg: '删除成功'
|
|
};
|
|
} catch (error) {
|
|
console.error('删除数据时出错:', error);
|
|
db.close();
|
|
return {
|
|
code: 500,
|
|
msg: '服务器内部错误'
|
|
};
|
|
}
|
|
}); |