49 lines
1.7 KiB
JavaScript
49 lines
1.7 KiB
JavaScript
const db = require('../db');
|
|
|
|
async function createTables() {
|
|
const client = await db.pool.connect();
|
|
try {
|
|
console.log('开始创建通知相关表...');
|
|
await client.query('BEGIN');
|
|
|
|
// 创建 notifications 表
|
|
await client.query(`
|
|
CREATE TABLE IF NOT EXISTS notifications (
|
|
id SERIAL PRIMARY KEY,
|
|
title VARCHAR(255) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
publisher_id INTEGER REFERENCES users(id),
|
|
publisher_name VARCHAR(100),
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
is_top BOOLEAN DEFAULT FALSE,
|
|
status VARCHAR(20) DEFAULT 'published' -- published, draft, archived
|
|
);
|
|
`);
|
|
console.log('notifications 表创建成功');
|
|
|
|
// 创建 notification_attachments 表
|
|
await client.query(`
|
|
CREATE TABLE IF NOT EXISTS notification_attachments (
|
|
id SERIAL PRIMARY KEY,
|
|
notification_id INTEGER REFERENCES notifications(id) ON DELETE CASCADE,
|
|
file_name VARCHAR(255) NOT NULL,
|
|
file_path VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`);
|
|
console.log('notification_attachments 表创建成功');
|
|
|
|
await client.query('COMMIT');
|
|
console.log('所有表创建完成');
|
|
} catch (err) {
|
|
await client.query('ROLLBACK');
|
|
console.error('创建表失败:', err);
|
|
} finally {
|
|
client.release();
|
|
process.exit();
|
|
}
|
|
}
|
|
|
|
createTables();
|