-- Create users table CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create workflows table CREATE TABLE IF NOT EXISTS workflows ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, nodes JSONB, edges JSONB, user_id INTEGER REFERENCES users(id), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create workflow_versions table CREATE TABLE IF NOT EXISTS workflow_versions ( id SERIAL PRIMARY KEY, workflow_id INTEGER REFERENCES workflows(id), version INTEGER NOT NULL, nodes JSONB, edges JSONB, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create workflow_executions table CREATE TABLE IF NOT EXISTS workflow_executions ( id SERIAL PRIMARY KEY, workflow_id INTEGER REFERENCES workflows(id), status VARCHAR(50) NOT NULL, started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, completed_at TIMESTAMP, logs JSONB, results JSONB ); -- Create workflow_schedules table CREATE TABLE IF NOT EXISTS workflow_schedules ( id SERIAL PRIMARY KEY, workflow_id INTEGER REFERENCES workflows(id), cron_expression VARCHAR(100) NOT NULL, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create webhooks table CREATE TABLE IF NOT EXISTS webhooks ( id SERIAL PRIMARY KEY, workflow_id INTEGER REFERENCES workflows(id), node_id VARCHAR(255) NOT NULL, path VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Insert a default admin user INSERT INTO users (email, password) VALUES ('admin@flowforge.test', '$2b$10$3euPcmQFCiblsZeEu5s7p.9wVdLajnYhAbcjkru4KkUGBIm3WVYjK') ON CONFLICT (email) DO NOTHING; -- Password is 'FlowForge123!' (pre-hashed with bcrypt)