get_charset_collate(); $prefix = $wpdb->prefix . 'prautoblogger_'; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; // Source data — raw posts/comments from social platforms. $sql_source_data = "CREATE TABLE {$prefix}source_data ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, source_type VARCHAR(50) NOT NULL, source_id VARCHAR(255) NOT NULL, subreddit VARCHAR(255) DEFAULT NULL, title TEXT DEFAULT NULL, content LONGTEXT DEFAULT NULL, author VARCHAR(255) DEFAULT NULL, score INT DEFAULT 0, comment_count INT DEFAULT 0, permalink VARCHAR(500) DEFAULT NULL, collected_at DATETIME NOT NULL, metadata_json LONGTEXT DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY source_unique (source_type, source_id), KEY source_collected (source_type, collected_at) ) {$charset_collate};"; // Analysis results — detected patterns from source data. $sql_analysis = "CREATE TABLE {$prefix}analysis_results ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, analysis_type VARCHAR(50) NOT NULL, topic VARCHAR(500) NOT NULL, summary TEXT DEFAULT NULL, frequency INT DEFAULT 1, relevance_score FLOAT DEFAULT 0, source_ids_json LONGTEXT DEFAULT NULL, analyzed_at DATETIME NOT NULL, metadata_json LONGTEXT DEFAULT NULL, PRIMARY KEY (id), KEY type_relevance (analysis_type, relevance_score), KEY analyzed_at (analyzed_at) ) {$charset_collate};"; // Generation log — every API call with cost tracking. `run_id` // groups all entries from a single pipeline execution so // `link_generation_logs()` can accurately attribute costs to a post. $sql_generation_log = "CREATE TABLE {$prefix}generation_log ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, post_id BIGINT UNSIGNED DEFAULT NULL, run_id VARCHAR(36) DEFAULT NULL, stage VARCHAR(50) NOT NULL, provider VARCHAR(50) NOT NULL, model VARCHAR(100) NOT NULL, prompt_tokens INT DEFAULT 0, completion_tokens INT DEFAULT 0, estimated_cost DECIMAL(10,6) DEFAULT 0, request_json LONGTEXT DEFAULT NULL, response_status VARCHAR(20) NOT NULL DEFAULT 'success', error_message TEXT DEFAULT NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id), KEY post_id (post_id), KEY run_id (run_id), KEY created_at (created_at), KEY stage (stage) ) {$charset_collate};"; // Content scores — post performance metrics for self-improvement. $sql_content_scores = "CREATE TABLE {$prefix}content_scores ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, post_id BIGINT UNSIGNED NOT NULL, pageviews INT DEFAULT 0, avg_time_on_page FLOAT DEFAULT 0, bounce_rate FLOAT DEFAULT 0, comment_count INT DEFAULT 0, composite_score FLOAT DEFAULT 0, score_factors_json LONGTEXT DEFAULT NULL, measured_at DATETIME NOT NULL, PRIMARY KEY (id), KEY post_id (post_id), KEY measured_at (measured_at), KEY composite_score (composite_score) ) {$charset_collate};"; // Event log — structured application log entries for the admin log viewer. $sql_event_log = "CREATE TABLE {$prefix}event_log ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, level VARCHAR(10) NOT NULL DEFAULT 'info', context VARCHAR(100) DEFAULT NULL, message TEXT NOT NULL, meta_json LONGTEXT DEFAULT NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id), KEY level (level), KEY created_at (created_at), KEY level_created (level, created_at) ) {$charset_collate};"; dbDelta( $sql_source_data ); dbDelta( $sql_analysis ); dbDelta( $sql_generation_log ); dbDelta( $sql_content_scores ); dbDelta( $sql_event_log ); } }