84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
// editPost.ts
|
|
import DB from 'better-sqlite3';
|
|
import cacheResult from '~/server/utils/cacheRes';
|
|
function prepareDB() {
|
|
const db = new DB('./userData/db/posts.db');
|
|
|
|
const updatePostStmt = db.prepare(`
|
|
UPDATE posts
|
|
SET title = ?, summary = ?, type = ?, url = ?, date = ?, tag_id = ?
|
|
WHERE id = ?
|
|
`);
|
|
|
|
const updateContentStmt = db.prepare(`
|
|
UPDATE postContent
|
|
SET content = ?
|
|
WHERE id = ?
|
|
`);
|
|
|
|
const updateTagsStmt = db.prepare(`
|
|
UPDATE tags
|
|
SET tag1 = ?, tag2 = ?, tag3 = ?, tag4 = ?, tag5 = ?,
|
|
tag6 = ?, tag7 = ?, tag8 = ?, tag9 = ?, tag10 = ?,
|
|
tag11 = ?, tag12 = ?, tag13 = ?, tag14 = ?, tag15 = ?
|
|
WHERE id = ?
|
|
`);
|
|
|
|
const insertTagsStmt = db.prepare(`
|
|
INSERT INTO tags (tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10, tag11, tag12, tag13, tag14, tag15)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
`);
|
|
return { updatePostStmt, updateContentStmt, updateTagsStmt, insertTagsStmt, db };
|
|
}
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const { updatePostStmt, updateContentStmt, updateTagsStmt, insertTagsStmt, db } = cacheResult(prepareDB)();
|
|
|
|
const body = await readBody(event);
|
|
const { id, title, summary, tags: _tags, type, url, date, content } = body;
|
|
|
|
if ([id, title, summary, _tags, type, url, date, content].some(item => item === undefined)) {
|
|
return {
|
|
code: 400,
|
|
msg: '参数错误',
|
|
body
|
|
}
|
|
}
|
|
|
|
const tagsArray = Array.isArray(_tags) ? _tags : [_tags];
|
|
const tags = tagsArray.slice(0, 15).concat(new Array(15 - tagsArray.length).fill(null));
|
|
|
|
try {
|
|
db.transaction(() => {
|
|
// 检查是否存在tag_id,如果不存在则插入新标签
|
|
const tagRow: any = db.prepare(`SELECT tag_id FROM posts WHERE id = ?`).get(id);
|
|
if (tagRow.tag_id) {
|
|
// 更新现有标签
|
|
updateTagsStmt.run(...tags, tagRow.tag_id);
|
|
} else {
|
|
// 插入新标签并获取tag_id
|
|
const tagResult = insertTagsStmt.run(...tags);
|
|
const tagId = tagResult.lastInsertRowid;
|
|
// 更新posts表中的tag_id
|
|
updatePostStmt.run(title, summary, type, url, date, tagId, id);
|
|
}
|
|
|
|
// 更新posts表
|
|
updatePostStmt.run(title, summary, type, url, date, tagRow.tag_id, id);
|
|
|
|
// 更新postContent表
|
|
updateContentStmt.run(content, id);
|
|
})();
|
|
|
|
return {
|
|
code: 200,
|
|
msg: '更新成功'
|
|
};
|
|
} catch (error) {
|
|
console.error('更新数据时出错:', error);
|
|
return {
|
|
code: 500,
|
|
msg: '服务器内部错误'
|
|
};
|
|
}
|
|
}); |