agora-ai/backend/src/db/schema.js
Muyue 85319b5ca6 Fix session lifecycle: change initial status from 'ongoing' to 'created'
Update database schema and backend services to properly track session lifecycle:
- Sessions now start with 'created' status
- Frontend auto-start logic works when status is 'created'
- Status transitions to 'ongoing' when session actually starts
- Prevents issues with premature round execution

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 17:38:41 +02:00

64 lines
1.9 KiB
JavaScript

import Database from 'better-sqlite3';
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';
import { mkdirSync, existsSync } from 'fs';
const __dirname = dirname(fileURLToPath(import.meta.url));
const dbPath = process.env.DATABASE_PATH || join(__dirname, '../../data/agora.db');
// Ensure data directory exists
const dataDir = dirname(dbPath);
if (!existsSync(dataDir)) {
mkdirSync(dataDir, { recursive: true });
}
const db = new Database(dbPath);
// Enable foreign keys
db.pragma('foreign_keys = ON');
// Create collaborative sessions table
db.exec(`
CREATE TABLE IF NOT EXISTS collaborative_sessions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
initial_prompt TEXT NOT NULL,
document_format TEXT DEFAULT 'md' CHECK(document_format IN ('md', 'txt')),
status TEXT CHECK(status IN ('created', 'ongoing', 'completed', 'failed')) DEFAULT 'created',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP,
final_document TEXT
)
`);
// Create document versions table
db.exec(`
CREATE TABLE IF NOT EXISTS document_versions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL,
version_number INTEGER NOT NULL,
content TEXT NOT NULL,
modified_by TEXT NOT NULL,
modification_reason TEXT,
round_number INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (session_id) REFERENCES collaborative_sessions(id) ON DELETE CASCADE
)
`);
// Create document rounds table (track each round of agents)
db.exec(`
CREATE TABLE IF NOT EXISTS document_rounds (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id INTEGER NOT NULL,
round_number INTEGER NOT NULL,
agents_in_round TEXT NOT NULL,
agents_made_changes TEXT DEFAULT '',
completed_at TIMESTAMP,
FOREIGN KEY (session_id) REFERENCES collaborative_sessions(id) ON DELETE CASCADE
)
`);
console.log('Database initialized successfully');
export default db;