narasiahli-be/plan/old/init-db.js

112 lines
3.7 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const Database = require('better-sqlite3');
const path = require('path');
// Database file path
const dbPath = path.join(process.cwd(), 'lib', 'db', 'chat_history.db');
console.log('🚀 Initializing database at:', dbPath);
// Initialize database
const db = new Database(dbPath);
// Create tables if they don't exist
const initDatabase = () => {
console.log('📋 Creating tables...');
// Create chat_sessions table
db.exec(`
CREATE TABLE IF NOT EXISTS chat_sessions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT UNIQUE NOT NULL,
user_id TEXT NOT NULL,
agent_id TEXT NOT NULL,
title TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
message_count INTEGER DEFAULT 0,
status TEXT DEFAULT 'active'
)
`);
console.log('✅ chat_sessions table created');
// Create chat_messages table
db.exec(`
CREATE TABLE IF NOT EXISTS chat_messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL,
message_type TEXT NOT NULL CHECK (message_type IN ('user', 'assistant')),
content TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (session_id) REFERENCES chat_sessions (session_id) ON DELETE CASCADE
)
`);
console.log('✅ chat_messages table created');
// Create indexes for better performance
db.exec(`
CREATE INDEX IF NOT EXISTS idx_sessions_user_id ON chat_sessions (user_id);
CREATE INDEX IF NOT EXISTS idx_sessions_agent_id ON chat_sessions (agent_id);
CREATE INDEX IF NOT EXISTS idx_sessions_created_at ON chat_sessions (created_at);
CREATE INDEX IF NOT EXISTS idx_messages_session_id ON chat_messages (session_id);
CREATE INDEX IF NOT EXISTS idx_messages_created_at ON chat_messages (created_at);
`);
console.log('✅ Indexes created');
// Insert sample data (optional)
const sampleSession = {
session_id: 'sample-session-123',
user_id: 'user_123',
agent_id: 'd04bbced-ae93-4fb3-a015-9472e4e5e539',
title: 'Sample Chat Session'
};
const existingSession = db.prepare('SELECT id FROM chat_sessions WHERE session_id = ?').get(sampleSession.session_id);
if (!existingSession) {
db.prepare(`
INSERT INTO chat_sessions (session_id, user_id, agent_id, title, message_count)
VALUES (?, ?, ?, ?, ?)
`).run(sampleSession.session_id, sampleSession.user_id, sampleSession.agent_id, sampleSession.title, 2);
console.log('✅ Sample session inserted');
// Insert sample messages
const sampleMessages = [
{ type: 'user', content: 'Halo, ada yang bisa saya tanyakan?' },
{ type: 'assistant', content: 'Halo! Tentu saja, saya siap membantu Anda dengan pertanyaan apapun.' }
];
const insertMessage = db.prepare(`
INSERT INTO chat_messages (session_id, message_type, content)
VALUES (?, ?, ?)
`);
sampleMessages.forEach(msg => {
insertMessage.run(sampleSession.session_id, msg.type, msg.content);
});
console.log('✅ Sample messages inserted');
} else {
console.log(' Sample session already exists, skipping...');
}
};
// Run initialization
try {
initDatabase();
console.log('🎉 Database initialization completed successfully!');
// Show database info
const sessionCount = db.prepare('SELECT COUNT(*) as count FROM chat_sessions').get();
const messageCount = db.prepare('SELECT COUNT(*) as count FROM chat_messages').get();
console.log('📊 Database Statistics:');
console.log(` - Sessions: ${sessionCount.count}`);
console.log(` - Messages: ${messageCount.count}`);
} catch (error) {
console.error('❌ Error initializing database:', error);
} finally {
db.close();
console.log('🔒 Database connection closed');
}