'token'])); $action = $_GET['action'] ?? ''; $db = new PDO('pgsql:host=127.0.0.1;dbname=adx_system','admin',weval_secret('WEVAL_PG_ADMIN_PASS')); $db->exec("SET search_path TO admin"); // Create sequences table if not exists try { $db->exec("CREATE TABLE IF NOT EXISTS sequences ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, status TEXT DEFAULT 'draft', steps JSONB DEFAULT '[]', contacts_list TEXT, total_contacts INT DEFAULT 0, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() )"); $db->exec("CREATE TABLE IF NOT EXISTS sequence_enrollments ( id SERIAL PRIMARY KEY, sequence_id INT REFERENCES sequences(id), contact_email TEXT NOT NULL, current_step INT DEFAULT 0, status TEXT DEFAULT 'active', next_action_at TIMESTAMP, created_at TIMESTAMP DEFAULT NOW() )"); $db->exec("CREATE TABLE IF NOT EXISTS sequence_events ( id SERIAL PRIMARY KEY, sequence_id INT, enrollment_id INT, step_index INT, event_type TEXT, details JSONB, created_at TIMESTAMP DEFAULT NOW() )"); } catch (Exception $e) {} switch ($action) { case 'list': $seqs = []; foreach ($db->query("SELECT id, name, status, total_contacts, created_at, (SELECT COUNT(*) FROM sequence_enrollments WHERE sequence_id = sequences.id AND status = 'active') as active_contacts, jsonb_array_length(steps) as step_count FROM sequences ORDER BY created_at DESC LIMIT 20") as $r) $seqs[] = $r; echo json_encode(['ok'=>1, 'sequences'=>$seqs]); break; case 'create': if ($_SERVER['REQUEST_METHOD'] !== 'POST') die(json_encode(['error'=>'POST'])); $data = json_decode(file_get_contents('php://input'), true); $name = $data['name'] ?? 'New Sequence'; $steps = json_encode($data['steps'] ?? [ ['type'=>'email','delay_days'=>0,'subject'=>'','html'=>'','wait_hours'=>0], ['type'=>'email','delay_days'=>3,'subject'=>'','html'=>'','wait_hours'=>72], ['type'=>'email','delay_days'=>5,'subject'=>'','html'=>'','wait_hours'=>120] ]); $db->prepare("INSERT INTO sequences (name, steps) VALUES (?, ?)")->execute([$name, $steps]); echo json_encode(['ok'=>1, 'id'=>$db->lastInsertId()]); break; case 'get': $id = intval($_GET['id'] ?? 0); $seq = $db->query("SELECT * FROM sequences WHERE id = $id")->fetch(PDO::FETCH_ASSOC); $enrollments = []; foreach ($db->query("SELECT * FROM sequence_enrollments WHERE sequence_id = $id ORDER BY created_at DESC LIMIT 50") as $r) $enrollments[] = $r; echo json_encode(['ok'=>1, 'sequence'=>$seq, 'enrollments'=>$enrollments]); break; case 'stats': $total = $db->query("SELECT COUNT(*) FROM sequences")->fetchColumn(); $active = $db->query("SELECT COUNT(*) FROM sequences WHERE status = 'active'")->fetchColumn(); $enrolled = $db->query("SELECT COUNT(*) FROM sequence_enrollments WHERE status = 'active'")->fetchColumn(); $events = $db->query("SELECT COUNT(*) FROM sequence_events")->fetchColumn(); $by_step = []; foreach ($db->query("SELECT event_type, COUNT(*) as cnt FROM sequence_events GROUP BY event_type ORDER BY cnt DESC") as $r) $by_step[] = $r; echo json_encode(['ok'=>1, 'total'=>(int)$total, 'active'=>(int)$active, 'enrolled'=>(int)$enrolled, 'events'=>(int)$events, 'by_type'=>$by_step]); break; }