CREATE TABLE "ad_clicks" ( "id" serial PRIMARY KEY NOT NULL, "ad_id" integer NOT NULL, "session_id" text, "user_id" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "ad_impressions" ( "id" serial PRIMARY KEY NOT NULL, "ad_id" integer NOT NULL, "session_id" text, "user_id" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "ads" ( "id" serial PRIMARY KEY NOT NULL, "type" text NOT NULL, "variant" text, "image_path" text, "link_url" text, "title" text, "visibility" text DEFAULT 'everyone' NOT NULL, "is_active" boolean DEFAULT true, "position" integer DEFAULT 0, "impression_count" integer DEFAULT 0, "click_count" integer DEFAULT 0, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "app_settings" ( "key" text PRIMARY KEY NOT NULL, "value" text NOT NULL, "updated_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "auth_tokens" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "token" text NOT NULL, "type" text NOT NULL, "expires_at" timestamp with time zone NOT NULL, "created_at" timestamp with time zone DEFAULT now(), CONSTRAINT "auth_tokens_token_unique" UNIQUE("token") ); --> statement-breakpoint CREATE TABLE "chat_thread_read_status" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "media_id" integer NOT NULL, "last_seen_at" timestamp with time zone NOT NULL ); --> statement-breakpoint CREATE TABLE "close_friends" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "close_friend_id" integer NOT NULL, "added_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "comment_moderation" ( "id" serial PRIMARY KEY NOT NULL, "comment_id" integer NOT NULL, "status" text DEFAULT 'pending' NOT NULL, "moderated_by" integer, "moderated_at" timestamp with time zone, "reason" text ); --> statement-breakpoint CREATE TABLE "comments" ( "id" serial PRIMARY KEY NOT NULL, "media_id" integer NOT NULL, "session_id" text NOT NULL, "user_id" integer, "content" text NOT NULL, "created_at" timestamp with time zone DEFAULT now(), "safety_status" text DEFAULT 'pending', "safety_checked_at" timestamp with time zone, "safety_categories" jsonb, "safety_reasoning" text, "is_hidden" boolean DEFAULT false, "hidden_at" timestamp with time zone, "hidden_reason" text, "moderation_notes" text ); --> statement-breakpoint CREATE TABLE "compilations" ( "id" serial PRIMARY KEY NOT NULL, "filename" text NOT NULL, "path" text, "duration_seconds" integer, "video_ids" jsonb, "settings" jsonb, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "content_reports" ( "id" serial PRIMARY KEY NOT NULL, "media_id" integer NOT NULL, "session_id" text, "user_id" integer, "report_type" text NOT NULL, "description" text, "status" text DEFAULT 'pending' NOT NULL, "resolved_by" integer, "resolved_at" timestamp with time zone, "resolution_notes" text, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "creators" ( "id" serial PRIMARY KEY NOT NULL, "name" text NOT NULL, "slug" text NOT NULL, "gender" integer, "primary_face_id" integer, "face_count" integer DEFAULT 0, "video_count" integer DEFAULT 0, "tag_id" integer, "is_public" boolean DEFAULT false, "centroid_embedding" jsonb, "centroid_updated_at" timestamp with time zone, "centroid_face_count" integer DEFAULT 0, "embedding_variance" real, "avg_intra_cluster_similarity" real, "avg_age" real, "age_std_dev" real, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone DEFAULT now(), CONSTRAINT "creators_name_unique" UNIQUE("name"), CONSTRAINT "creators_slug_unique" UNIQUE("slug") ); --> statement-breakpoint CREATE TABLE "digest_clip_tags" ( "id" serial PRIMARY KEY NOT NULL, "clip_id" integer NOT NULL, "tag_id" integer NOT NULL, "source" text DEFAULT 'auto' NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "digest_compilations" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "folder_id" integer, "filename" text NOT NULL, "name" text, "path" text NOT NULL, "duration_seconds" integer, "orientation" text, "status" text DEFAULT 'pending' NOT NULL, "error" text, "has_captions" integer DEFAULT 0 NOT NULL, "caption_style" jsonb, "closing_ad_path" text, "closing_ad_duration" integer, "tags" jsonb, "created_at" timestamp with time zone DEFAULT now(), "completed_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "digest_generated_clips" ( "id" serial PRIMARY KEY NOT NULL, "selected_clip_id" integer NOT NULL, "digest_id" integer NOT NULL, "folder_id" integer, "clip_path" text, "gif_path" text, "status" text DEFAULT 'pending' NOT NULL, "error" text, "created_at" timestamp with time zone DEFAULT now(), "completed_at" timestamp with time zone, "published_to_public_media_id" integer, "published_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "digest_generated_scenes" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "folder_id" integer, "scene_number" integer NOT NULL, "scene_path" text, "start_time" real NOT NULL, "end_time" real NOT NULL, "duration" real NOT NULL, "tags" jsonb, "dominant_position" text, "created_at" timestamp with time zone DEFAULT now(), "published_to_public_media_id" integer, "published_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "digest_output_folders" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "folder_path" text NOT NULL, "folder_name" text NOT NULL, "folder_type" text DEFAULT 'clips' NOT NULL, "clip_count" integer DEFAULT 0, "compilation_count" integer DEFAULT 0, "total_size" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "digest_selected_clips" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "clip_type" text NOT NULL, "start_time" integer NOT NULL, "end_time" integer NOT NULL, "duration" integer NOT NULL, "reason" text, "interest_score" integer, "position" text, "transcript_hint" text, "tags" jsonb, "source" text DEFAULT 'machine' NOT NULL, "is_included" integer DEFAULT 1 NOT NULL, "is_hook" integer DEFAULT 0 NOT NULL, "sequence_order" integer DEFAULT 0 NOT NULL, "hook_source_clip_id" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "digest_suggested_tags" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "suggested_category" text NOT NULL, "suggested_value" text NOT NULL, "confidence" integer, "status" text DEFAULT 'pending' NOT NULL, "mapped_tag_id" integer, "reviewed_by" integer, "reviewed_at" timestamp with time zone, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "digest_video_tags" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "category" text NOT NULL, "value" text NOT NULL, "confidence" integer, "source" text DEFAULT 'digest', "evidence" jsonb, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "email_change_tokens" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "new_email" text NOT NULL, "token" text NOT NULL, "expires_at" timestamp with time zone NOT NULL, "created_at" timestamp with time zone DEFAULT now(), CONSTRAINT "email_change_tokens_token_unique" UNIQUE("token") ); --> statement-breakpoint CREATE TABLE "email_verification_tokens" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "token" text NOT NULL, "expires_at" timestamp with time zone NOT NULL, "created_at" timestamp with time zone DEFAULT now(), CONSTRAINT "email_verification_tokens_token_unique" UNIQUE("token") ); --> statement-breakpoint CREATE TABLE "featured_playlists" ( "id" serial PRIMARY KEY NOT NULL, "playlist_id" integer NOT NULL, "position" integer DEFAULT 0 NOT NULL, "featured_by" integer, "featured_at" timestamp with time zone, CONSTRAINT "featured_playlists_playlist_id_unique" UNIQUE("playlist_id") ); --> statement-breakpoint CREATE TABLE "friendships" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "friend_id" integer NOT NULL, "status" text DEFAULT 'pending' NOT NULL, "created_at" timestamp with time zone DEFAULT now(), "accepted_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "geo_blocking_rules" ( "id" serial PRIMARY KEY NOT NULL, "country" text NOT NULL, "country_name" text, "region" text, "city" text, "created_at" timestamp with time zone DEFAULT now(), "created_by" integer, "note" text ); --> statement-breakpoint CREATE TABLE "highlight_cooldowns" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "last_generated_at" timestamp with time zone NOT NULL ); --> statement-breakpoint CREATE TABLE "invoices" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "plan_id" integer, "invoice_number" text NOT NULL, "amount_cad" integer NOT NULL, "status" text DEFAULT 'pending' NOT NULL, "due_date" timestamp with time zone NOT NULL, "paid_at" timestamp with time zone, "payment_id" integer, "description" text, "notes" text, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone, CONSTRAINT "invoices_invoice_number_unique" UNIQUE("invoice_number") ); --> statement-breakpoint CREATE TABLE "jobs" ( "id" serial PRIMARY KEY NOT NULL, "type" text NOT NULL, "status" text DEFAULT 'pending', "progress" integer DEFAULT 0, "log" text, "params" jsonb, "started_at" timestamp with time zone, "completed_at" timestamp with time zone, "created_at" timestamp with time zone DEFAULT now(), "resource_category" text DEFAULT 'cpu', "vram_required" integer DEFAULT 0, "queue_position" integer, "waiting_reason" text, "priority" integer DEFAULT 5, "pipeline_id" integer, "pipeline_step_id" integer ); --> statement-breakpoint CREATE TABLE "moderation_word_lists" ( "id" serial PRIMARY KEY NOT NULL, "level" text NOT NULL, "word" text NOT NULL, "created_at" timestamp with time zone DEFAULT now(), "created_by" integer ); --> statement-breakpoint CREATE TABLE "notification_preferences" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "email_friend_request" boolean DEFAULT true, "email_friend_request_accepted" boolean DEFAULT true, "email_poke" boolean DEFAULT true, "email_video_recommendation" boolean DEFAULT true, "email_watch_party_invite" boolean DEFAULT true, "email_achievement" boolean DEFAULT false, "email_digest_complete" boolean DEFAULT true, "email_digest_failed" boolean DEFAULT true, "email_upload_approved" boolean DEFAULT true, "email_upload_rejected" boolean DEFAULT true, "inapp_friend_request" boolean DEFAULT true, "inapp_friend_request_accepted" boolean DEFAULT true, "inapp_poke" boolean DEFAULT true, "inapp_video_recommendation" boolean DEFAULT true, "inapp_watch_party_invite" boolean DEFAULT true, "inapp_achievement" boolean DEFAULT true, "inapp_digest_complete" boolean DEFAULT true, "inapp_digest_failed" boolean DEFAULT true, "inapp_upload_approved" boolean DEFAULT true, "inapp_upload_rejected" boolean DEFAULT true, "inapp_comment_reply" boolean DEFAULT true, "inapp_system" boolean DEFAULT true, "quiet_hours_enabled" boolean DEFAULT false, "quiet_hours_start" text, "quiet_hours_end" text, "updated_at" timestamp with time zone DEFAULT now(), CONSTRAINT "notification_preferences_user_id_unique" UNIQUE("user_id") ); --> statement-breakpoint CREATE TABLE "notifications" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "type" text NOT NULL, "title" text NOT NULL, "message" text, "reference_type" text, "reference_id" integer, "actor_id" integer, "metadata" jsonb, "is_read" boolean DEFAULT false, "action_url" text, "group_key" text, "created_at" timestamp with time zone DEFAULT now(), "read_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "password_reset_tokens" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "token" text NOT NULL, "expires_at" timestamp with time zone NOT NULL, "created_at" timestamp with time zone DEFAULT now(), "used_at" timestamp with time zone, CONSTRAINT "password_reset_tokens_token_unique" UNIQUE("token") ); --> statement-breakpoint CREATE TABLE "payment_audit_log" ( "id" serial PRIMARY KEY NOT NULL, "payment_id" integer, "invoice_id" integer, "user_id" integer, "action" text NOT NULL, "previous_state" jsonb, "new_state" jsonb, "performed_by" integer, "notes" text, "ip_address" text, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "payments" ( "id" serial PRIMARY KEY NOT NULL, "invoice_id" integer, "user_id" integer, "sender_email" text NOT NULL, "sender_name" text, "amount_cad" integer NOT NULL, "reference_number" text, "custom_message" text, "status" text DEFAULT 'unmatched' NOT NULL, "match_confidence" real, "match_method" text, "raw_email_json" jsonb, "received_at" timestamp with time zone NOT NULL, "processed_at" timestamp with time zone, "processed_by" integer, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone, CONSTRAINT "payments_reference_number_unique" UNIQUE("reference_number") ); --> statement-breakpoint CREATE TABLE "performer_discrepancies" ( "id" serial PRIMARY KEY NOT NULL, "video_id" integer, "digest_id" integer, "parsed_performer_name" text NOT NULL, "parsed_method" text, "parsed_confidence" real, "detected_performer_id" integer, "detected_performer_name" text, "face_match_confidence" real, "face_similarity" real, "discrepancy_type" text NOT NULL, "status" text DEFAULT 'pending' NOT NULL, "resolved_by" integer, "resolved_at" timestamp with time zone, "resolution" text, "admin_notes" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "performer_faces" ( "id" serial PRIMARY KEY NOT NULL, "performer_id" integer, "performer_name" text, "face_embedding" jsonb NOT NULL, "gender" integer, "age" integer, "detection_score" real, "bbox" jsonb, "face_crop_path" text, "source_frame" text, "source_video" text, "source_digest_id" integer, "frame_timestamp" real, "frame_index" integer, "faces_in_frame" integer DEFAULT 1, "status" text DEFAULT 'pending', "match_confidence" real, "is_verified" boolean DEFAULT false, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "pipeline_step_events" ( "id" serial PRIMARY KEY NOT NULL, "step_id" integer NOT NULL, "event_type" text NOT NULL, "event_data" jsonb, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "pipeline_steps" ( "id" serial PRIMARY KEY NOT NULL, "pipeline_id" integer NOT NULL, "name" text NOT NULL, "step_type" text NOT NULL, "sequence_order" integer NOT NULL, "depends_on" jsonb DEFAULT '[]'::jsonb, "resource_category" text DEFAULT 'cpu', "vram_required" integer DEFAULT 0, "required_containers" jsonb DEFAULT '[]'::jsonb, "config" jsonb, "status" text DEFAULT 'pending' NOT NULL, "progress" integer DEFAULT 0, "result" jsonb, "error" text, "estimated_duration_ms" integer, "started_at" timestamp with time zone, "completed_at" timestamp with time zone, "duration_ms" integer ); --> statement-breakpoint CREATE TABLE "pipeline_templates" ( "id" serial PRIMARY KEY NOT NULL, "name" text NOT NULL, "display_name" text NOT NULL, "description" text, "steps" jsonb NOT NULL, "context_schema" jsonb, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone, CONSTRAINT "pipeline_templates_name_unique" UNIQUE("name") ); --> statement-breakpoint CREATE TABLE "pipelines" ( "id" serial PRIMARY KEY NOT NULL, "name" text NOT NULL, "description" text, "status" text DEFAULT 'pending' NOT NULL, "priority" integer DEFAULT 5, "context" jsonb, "total_vram_required" integer DEFAULT 0, "estimated_duration_ms" integer, "progress" integer DEFAULT 0, "current_step_id" integer, "completed_steps" integer DEFAULT 0, "total_steps" integer DEFAULT 0, "error" text, "retry_count" integer DEFAULT 0, "max_retries" integer DEFAULT 3, "created_at" timestamp with time zone DEFAULT now(), "queued_at" timestamp with time zone, "started_at" timestamp with time zone, "completed_at" timestamp with time zone, "last_heartbeat" timestamp with time zone, "running_on_node" text ); --> statement-breakpoint CREATE TABLE "playlist_videos" ( "id" serial PRIMARY KEY NOT NULL, "playlist_id" integer NOT NULL, "media_id" integer NOT NULL, "position" integer DEFAULT 0 NOT NULL, "added_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "playlist_views" ( "id" serial PRIMARY KEY NOT NULL, "playlist_id" integer NOT NULL, "session_id" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "playlists" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "name" text NOT NULL, "description" text, "is_public" boolean DEFAULT false, "share_token" text, "thumbnail_media_id" integer, "video_count" integer DEFAULT 0, "total_duration_seconds" integer DEFAULT 0, "view_count" integer DEFAULT 0, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone, CONSTRAINT "playlists_share_token_unique" UNIQUE("share_token") ); --> statement-breakpoint CREATE TABLE "pokes" ( "id" serial PRIMARY KEY NOT NULL, "from_user_id" integer NOT NULL, "to_user_id" integer NOT NULL, "is_read" boolean DEFAULT false, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "privacy_settings" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "show_online_status" boolean DEFAULT true, "show_currently_watching" boolean DEFAULT true, "show_in_friend_activity" boolean DEFAULT true, "anonymize_public_comments" boolean DEFAULT false, "hide_public_reactions" boolean DEFAULT false, "hide_public_finishes" boolean DEFAULT false, "allow_friend_requests" boolean DEFAULT true, "close_friends_only_watching" boolean DEFAULT false, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone, CONSTRAINT "privacy_settings_user_id_unique" UNIQUE("user_id") ); --> statement-breakpoint CREATE TABLE "public_media" ( "id" serial PRIMARY KEY NOT NULL, "path" text NOT NULL, "filename" text NOT NULL, "category" text NOT NULL, "duration_seconds" integer, "quality" text, "orientation" text, "thumbnail_path" text, "file_size" bigint, "view_count" integer DEFAULT 0, "upvote_count" integer DEFAULT 0, "comment_count" integer DEFAULT 0, "finish_count" integer DEFAULT 0, "total_watch_time" integer DEFAULT 0, "created_at" timestamp with time zone DEFAULT now(), "is_locked" boolean DEFAULT false, "locked_at" timestamp with time zone, "locked_by" integer, "position" integer DEFAULT 0, "uploader_id" integer, CONSTRAINT "public_media_path_unique" UNIQUE("path") ); --> statement-breakpoint CREATE TABLE "public_media_performers" ( "id" serial PRIMARY KEY NOT NULL, "media_id" integer NOT NULL, "performer_id" integer NOT NULL, "added_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "public_media_tags" ( "id" serial PRIMARY KEY NOT NULL, "media_id" integer NOT NULL, "tag_id" integer NOT NULL, "added_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "published_inbox_files" ( "id" serial PRIMARY KEY NOT NULL, "source_inbox_path" text NOT NULL, "filename" text NOT NULL, "published_at" timestamp with time zone DEFAULT now(), "published_to_path" text, "public_media_id" integer, "file_type" text NOT NULL ); --> statement-breakpoint CREATE TABLE "rate_limits" ( "id" serial PRIMARY KEY NOT NULL, "key" text NOT NULL, "count" integer DEFAULT 1 NOT NULL, "reset_at" timestamp with time zone NOT NULL, CONSTRAINT "rate_limits_key_unique" UNIQUE("key") ); --> statement-breakpoint CREATE TABLE "resource_snapshots" ( "id" serial PRIMARY KEY NOT NULL, "gpu_index" integer DEFAULT 0, "gpu_name" text, "vram_used_mb" integer, "vram_total_mb" integer, "gpu_utilization" integer, "gpu_temperature" integer, "active_processes" jsonb, "pipeline_id" integer, "step_id" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "session_bans" ( "id" serial PRIMARY KEY NOT NULL, "session_id" text NOT NULL, "reason" text, "banned_by" integer, "created_at" timestamp with time zone DEFAULT now(), "expires_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "sessions" ( "id" text PRIMARY KEY NOT NULL, "created_at" timestamp with time zone DEFAULT now(), "last_seen_at" timestamp with time zone, "ip_address" text, "user_agent" text, "device_type" text, "browser" text, "os" text, "country" text, "country_name" text, "region" text, "city" text, "timezone" text, "latitude" real, "longitude" real, "user_id" integer, "first_seen_at" timestamp with time zone, "visit_count" integer DEFAULT 1 ); --> statement-breakpoint CREATE TABLE "subscription_plans" ( "id" serial PRIMARY KEY NOT NULL, "name" text NOT NULL, "display_name" text NOT NULL, "description" text, "price_cad" integer NOT NULL, "duration_days" integer, "is_active" boolean DEFAULT true, "sort_order" integer DEFAULT 0, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone, CONSTRAINT "subscription_plans_name_unique" UNIQUE("name") ); --> statement-breakpoint CREATE TABLE "tag_categories" ( "id" serial PRIMARY KEY NOT NULL, "name" text NOT NULL, "display_order" integer DEFAULT 0 NOT NULL, "created_at" timestamp with time zone DEFAULT now(), CONSTRAINT "tag_categories_name_unique" UNIQUE("name") ); --> statement-breakpoint CREATE TABLE "tag_generation_jobs" ( "id" serial PRIMARY KEY NOT NULL, "status" text DEFAULT 'pending' NOT NULL, "content_type" text NOT NULL, "content_ids" jsonb NOT NULL, "options" jsonb, "results" jsonb, "progress" integer DEFAULT 0, "current_item" integer DEFAULT 0, "total_items" integer DEFAULT 0, "error" text, "created_at" timestamp with time zone DEFAULT now(), "completed_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "tags" ( "id" serial PRIMARY KEY NOT NULL, "category_id" integer NOT NULL, "name" text NOT NULL, "display_order" integer DEFAULT 0 NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "upload_invites" ( "id" serial PRIMARY KEY NOT NULL, "code" text NOT NULL, "label" text, "created_by" integer NOT NULL, "status" text DEFAULT 'active' NOT NULL, "max_uploads" integer, "upload_count" integer DEFAULT 0 NOT NULL, "expires_at" timestamp with time zone, "created_at" timestamp with time zone DEFAULT now(), CONSTRAINT "upload_invites_code_unique" UNIQUE("code") ); --> statement-breakpoint CREATE TABLE "upvotes" ( "id" serial PRIMARY KEY NOT NULL, "media_id" integer NOT NULL, "session_id" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "user_achievements" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "achievement_id" text NOT NULL, "unlocked_at" timestamp with time zone NOT NULL, "progress" integer DEFAULT 0, "notified" boolean DEFAULT false ); --> statement-breakpoint CREATE TABLE "user_blocks" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "blocked_user_id" integer NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "user_daily_activity" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "activity_date" text NOT NULL, "watch_time_seconds" integer DEFAULT 0, "videos_watched" integer DEFAULT 0, "first_activity_hour" integer, "created_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "user_finishes" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "media_id" integer, "session_id" text, "created_at" timestamp with time zone NOT NULL ); --> statement-breakpoint CREATE TABLE "user_gallery_images" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "filename" text NOT NULL, "original_filename" text, "position" integer DEFAULT 0 NOT NULL, "uploaded_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "user_presence" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "is_online" boolean DEFAULT false, "current_media_id" integer, "last_activity_at" timestamp with time zone, "last_video_change_at" timestamp with time zone, CONSTRAINT "user_presence_user_id_unique" UNIQUE("user_id") ); --> statement-breakpoint CREATE TABLE "user_social_links" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "platform" text NOT NULL, "url" text NOT NULL, "display_name" text, "position" integer DEFAULT 0 NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "user_stats" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "total_watch_time_seconds" integer DEFAULT 0, "total_videos_watched" integer DEFAULT 0, "total_upvotes_given" integer DEFAULT 0, "total_comments_made" integer DEFAULT 0, "total_finishes" integer DEFAULT 0, "current_day_streak" integer DEFAULT 0, "longest_day_streak" integer DEFAULT 0, "last_active_date" text, "longest_single_session" integer DEFAULT 0, "categories_completed" jsonb, "night_owl_count" integer DEFAULT 0, "early_bird_count" integer DEFAULT 0, "updated_at" timestamp with time zone, CONSTRAINT "user_stats_user_id_unique" UNIQUE("user_id") ); --> statement-breakpoint CREATE TABLE "user_subscriptions" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "plan_id" integer, "status" text DEFAULT 'inactive' NOT NULL, "start_date" timestamp with time zone, "end_date" timestamp with time zone, "grace_period_end_date" timestamp with time zone, "last_payment_id" integer, "auto_renew" boolean DEFAULT true, "notes" text, "created_at" timestamp with time zone DEFAULT now(), "updated_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "user_tag_preferences" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "tag_id" integer NOT NULL, "saved_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "user_upload_suggested_tags" ( "id" serial PRIMARY KEY NOT NULL, "upload_id" integer NOT NULL, "tag_id" integer NOT NULL, "suggested_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "user_uploads" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "filename" text NOT NULL, "original_filename" text, "path" text NOT NULL, "duration_seconds" integer, "quality" text, "orientation" text, "file_size" bigint, "thumbnail_path" text, "status" text DEFAULT 'pending' NOT NULL, "reviewed_by" integer, "reviewed_at" timestamp with time zone, "review_notes" text, "public_media_id" integer, "upload_invite_id" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "users" ( "id" serial PRIMARY KEY NOT NULL, "username" text NOT NULL, "email" text NOT NULL, "password_hash" text NOT NULL, "role" text DEFAULT 'user' NOT NULL, "status" text DEFAULT 'pending' NOT NULL, "email_verified" boolean DEFAULT false, "linked_session_id" text, "created_at" timestamp with time zone DEFAULT now(), "approved_at" timestamp with time zone, "approved_by" integer, "last_login_at" timestamp with time zone, "is_trusted" boolean DEFAULT false, "max_upload_duration_seconds" integer DEFAULT 60, "auto_accept_uploads" boolean DEFAULT false, "trusted_at" timestamp with time zone, "trusted_by" integer, "default_playlist_id" integer, "social_links_public" boolean DEFAULT false, "subscription_status" text DEFAULT 'none', "subscription_plan_id" integer, "subscription_end_date" timestamp with time zone, "lifetime_member" boolean DEFAULT false, "total_paid_cad" integer DEFAULT 0, "last_moderation_action" timestamp with time zone, CONSTRAINT "users_username_unique" UNIQUE("username"), CONSTRAINT "users_email_unique" UNIQUE("email") ); --> statement-breakpoint CREATE TABLE "video_digests" ( "id" serial PRIMARY KEY NOT NULL, "video_id" integer NOT NULL, "job_id" integer, "status" text DEFAULT 'pending' NOT NULL, "progress" integer DEFAULT 0, "frame_count" integer, "config" jsonb, "frame_analyses" jsonb, "transcript" jsonb, "tags" jsonb, "suggested_clips" jsonb, "ad_cut_spec" jsonb, "stage_results" jsonb, "created_at" timestamp with time zone DEFAULT now(), "started_at" timestamp with time zone, "completed_at" timestamp with time zone, "error" text ); --> statement-breakpoint CREATE TABLE "video_ocr_results" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "frame_index" integer NOT NULL, "timestamp" real NOT NULL, "extracted_text" text NOT NULL, "confidence" real, "text_type" text, "source_frame" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "video_reactions" ( "id" serial PRIMARY KEY NOT NULL, "user_id" integer NOT NULL, "media_id" integer NOT NULL, "reaction_type" text NOT NULL, "video_timestamp" integer NOT NULL, "created_at" timestamp with time zone NOT NULL ); --> statement-breakpoint CREATE TABLE "video_recommendations" ( "id" serial PRIMARY KEY NOT NULL, "from_user_id" integer NOT NULL, "to_user_id" integer NOT NULL, "media_id" integer NOT NULL, "message" text, "is_read" boolean DEFAULT false, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "video_scene_cuts" ( "id" serial PRIMARY KEY NOT NULL, "video_id" integer NOT NULL, "cuts" jsonb NOT NULL, "scene_count" integer NOT NULL, "duration" real NOT NULL, "detector" text DEFAULT 'content' NOT NULL, "threshold" real DEFAULT 27 NOT NULL, "transnet_cuts" jsonb, "pyscenedetect_cuts" jsonb, "clip_cuts" jsonb, "merged_cuts_detailed" jsonb, "merge_strategy" text DEFAULT 'weighted', "tolerance_seconds" real DEFAULT 0.75, "detectors_used" jsonb, "processing_time_ms" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "video_segments" ( "id" serial PRIMARY KEY NOT NULL, "digest_id" integer NOT NULL, "video_id" integer NOT NULL, "segment_type" text NOT NULL, "start_time" real NOT NULL, "end_time" real NOT NULL, "duration" real NOT NULL, "tags" jsonb, "transcript_snippet" text, "vocal_category" text, "position_change" text, "dominant_position" text, "interest_score" real DEFAULT 0, "has_eye_contact" boolean DEFAULT false, "has_full_sentence" boolean DEFAULT false, "is_climax_moment" boolean DEFAULT false, "captioned" boolean DEFAULT false, "caption_text" text, "title" text, "keyframe_path" text, "keyframe_timestamp" real, "is_included" boolean DEFAULT true, "sequence_order" integer, "is_hook" boolean DEFAULT false, "include_in_clips" boolean DEFAULT true, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "video_tag_timeline" ( "id" serial PRIMARY KEY NOT NULL, "video_id" integer NOT NULL, "digest_id" integer NOT NULL, "timestamp" real NOT NULL, "tags" jsonb NOT NULL, "dominant_position" text, "performer_count" integer, "intensity" integer, "has_dialogue" boolean DEFAULT false, "has_eye_contact" boolean DEFAULT false, "frame_path" text, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "video_tags" ( "id" serial PRIMARY KEY NOT NULL, "video_id" integer NOT NULL, "tag_id" integer NOT NULL, "confidence" integer, "source" text DEFAULT 'manual' NOT NULL, "digest_id" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "videos" ( "id" serial PRIMARY KEY NOT NULL, "path" text NOT NULL, "filename" text NOT NULL, "producer" text, "creator" text, "title" text, "duration_seconds" integer, "quality" text, "orientation" text, "has_audio" boolean DEFAULT true, "file_size" bigint, "file_hash" text, "width" integer, "height" integer, "last_validated" timestamp with time zone, "is_valid" boolean DEFAULT true, "thumbnail_path" text, "created_at" timestamp with time zone DEFAULT now(), "tags" jsonb, "directory_type" text, "public_view_count" integer, "public_upvote_count" integer, "public_comment_count" integer, "public_completion_count" integer, "public_total_watch_time" integer, "moved_from_public_at" timestamp with time zone, "original_filename" text, "original_path" text, "standardized_at" timestamp with time zone, CONSTRAINT "videos_path_unique" UNIQUE("path") ); --> statement-breakpoint CREATE TABLE "views" ( "id" serial PRIMARY KEY NOT NULL, "media_id" integer NOT NULL, "session_id" text NOT NULL, "watch_time_seconds" integer DEFAULT 0, "last_updated" timestamp with time zone DEFAULT now(), "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "watch_party_chat_messages" ( "id" serial PRIMARY KEY NOT NULL, "party_id" integer NOT NULL, "user_id" integer NOT NULL, "content" text NOT NULL, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "watch_party_invites" ( "id" serial PRIMARY KEY NOT NULL, "party_id" integer NOT NULL, "from_user_id" integer NOT NULL, "to_user_id" integer NOT NULL, "status" text DEFAULT 'pending' NOT NULL, "created_at" timestamp with time zone DEFAULT now(), "responded_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "watch_party_participants" ( "id" serial PRIMARY KEY NOT NULL, "party_id" integer NOT NULL, "user_id" integer NOT NULL, "is_connected" boolean DEFAULT false, "is_kicked" boolean DEFAULT false, "joined_at" timestamp with time zone DEFAULT now(), "left_at" timestamp with time zone ); --> statement-breakpoint CREATE TABLE "watch_party_reactions" ( "id" serial PRIMARY KEY NOT NULL, "party_id" integer NOT NULL, "user_id" integer NOT NULL, "reaction_type" text NOT NULL, "video_timestamp" integer, "created_at" timestamp with time zone DEFAULT now() ); --> statement-breakpoint CREATE TABLE "watch_party_sessions" ( "id" serial PRIMARY KEY NOT NULL, "host_id" integer NOT NULL, "media_id" integer NOT NULL, "invite_code" text NOT NULL, "status" text DEFAULT 'waiting' NOT NULL, "current_time" integer DEFAULT 0, "is_playing" boolean DEFAULT false, "max_participants" integer DEFAULT 20, "allow_chat" boolean DEFAULT true, "created_at" timestamp with time zone DEFAULT now(), "started_at" timestamp with time zone, "ended_at" timestamp with time zone, "summary_stats" jsonb, CONSTRAINT "watch_party_sessions_invite_code_unique" UNIQUE("invite_code") ); --> statement-breakpoint ALTER TABLE "ad_clicks" ADD CONSTRAINT "ad_clicks_ad_id_ads_id_fk" FOREIGN KEY ("ad_id") REFERENCES "public"."ads"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "ad_impressions" ADD CONSTRAINT "ad_impressions_ad_id_ads_id_fk" FOREIGN KEY ("ad_id") REFERENCES "public"."ads"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "close_friends" ADD CONSTRAINT "close_friends_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "close_friends" ADD CONSTRAINT "close_friends_close_friend_id_users_id_fk" FOREIGN KEY ("close_friend_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "geo_blocking_rules" ADD CONSTRAINT "geo_blocking_rules_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "invoices" ADD CONSTRAINT "invoices_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "invoices" ADD CONSTRAINT "invoices_plan_id_subscription_plans_id_fk" FOREIGN KEY ("plan_id") REFERENCES "public"."subscription_plans"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "notification_preferences" ADD CONSTRAINT "notification_preferences_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "notifications" ADD CONSTRAINT "notifications_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "notifications" ADD CONSTRAINT "notifications_actor_id_users_id_fk" FOREIGN KEY ("actor_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "payment_audit_log" ADD CONSTRAINT "payment_audit_log_payment_id_payments_id_fk" FOREIGN KEY ("payment_id") REFERENCES "public"."payments"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "payment_audit_log" ADD CONSTRAINT "payment_audit_log_invoice_id_invoices_id_fk" FOREIGN KEY ("invoice_id") REFERENCES "public"."invoices"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "payment_audit_log" ADD CONSTRAINT "payment_audit_log_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "payments" ADD CONSTRAINT "payments_invoice_id_invoices_id_fk" FOREIGN KEY ("invoice_id") REFERENCES "public"."invoices"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "payments" ADD CONSTRAINT "payments_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "performer_discrepancies" ADD CONSTRAINT "performer_discrepancies_video_id_videos_id_fk" FOREIGN KEY ("video_id") REFERENCES "public"."videos"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "performer_discrepancies" ADD CONSTRAINT "performer_discrepancies_digest_id_video_digests_id_fk" FOREIGN KEY ("digest_id") REFERENCES "public"."video_digests"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "performer_discrepancies" ADD CONSTRAINT "performer_discrepancies_detected_performer_id_creators_id_fk" FOREIGN KEY ("detected_performer_id") REFERENCES "public"."creators"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "performer_discrepancies" ADD CONSTRAINT "performer_discrepancies_resolved_by_users_id_fk" FOREIGN KEY ("resolved_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "pipeline_step_events" ADD CONSTRAINT "pipeline_step_events_step_id_pipeline_steps_id_fk" FOREIGN KEY ("step_id") REFERENCES "public"."pipeline_steps"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "pipeline_steps" ADD CONSTRAINT "pipeline_steps_pipeline_id_pipelines_id_fk" FOREIGN KEY ("pipeline_id") REFERENCES "public"."pipelines"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "privacy_settings" ADD CONSTRAINT "privacy_settings_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "published_inbox_files" ADD CONSTRAINT "published_inbox_files_public_media_id_public_media_id_fk" FOREIGN KEY ("public_media_id") REFERENCES "public"."public_media"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "user_subscriptions" ADD CONSTRAINT "user_subscriptions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "user_subscriptions" ADD CONSTRAINT "user_subscriptions_plan_id_subscription_plans_id_fk" FOREIGN KEY ("plan_id") REFERENCES "public"."subscription_plans"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_chat_messages" ADD CONSTRAINT "watch_party_chat_messages_party_id_watch_party_sessions_id_fk" FOREIGN KEY ("party_id") REFERENCES "public"."watch_party_sessions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_chat_messages" ADD CONSTRAINT "watch_party_chat_messages_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_invites" ADD CONSTRAINT "watch_party_invites_party_id_watch_party_sessions_id_fk" FOREIGN KEY ("party_id") REFERENCES "public"."watch_party_sessions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_invites" ADD CONSTRAINT "watch_party_invites_from_user_id_users_id_fk" FOREIGN KEY ("from_user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_invites" ADD CONSTRAINT "watch_party_invites_to_user_id_users_id_fk" FOREIGN KEY ("to_user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_participants" ADD CONSTRAINT "watch_party_participants_party_id_watch_party_sessions_id_fk" FOREIGN KEY ("party_id") REFERENCES "public"."watch_party_sessions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_participants" ADD CONSTRAINT "watch_party_participants_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_reactions" ADD CONSTRAINT "watch_party_reactions_party_id_watch_party_sessions_id_fk" FOREIGN KEY ("party_id") REFERENCES "public"."watch_party_sessions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_reactions" ADD CONSTRAINT "watch_party_reactions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_sessions" ADD CONSTRAINT "watch_party_sessions_host_id_users_id_fk" FOREIGN KEY ("host_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "watch_party_sessions" ADD CONSTRAINT "watch_party_sessions_media_id_public_media_id_fk" FOREIGN KEY ("media_id") REFERENCES "public"."public_media"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint CREATE INDEX "idx_ad_clicks_ad" ON "ad_clicks" USING btree ("ad_id");--> statement-breakpoint CREATE INDEX "idx_ad_clicks_session" ON "ad_clicks" USING btree ("session_id");--> statement-breakpoint CREATE INDEX "idx_ad_clicks_date" ON "ad_clicks" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_ad_impressions_ad" ON "ad_impressions" USING btree ("ad_id");--> statement-breakpoint CREATE INDEX "idx_ad_impressions_session" ON "ad_impressions" USING btree ("session_id");--> statement-breakpoint CREATE INDEX "idx_ad_impressions_date" ON "ad_impressions" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_ads_type" ON "ads" USING btree ("type");--> statement-breakpoint CREATE INDEX "idx_ads_is_active" ON "ads" USING btree ("is_active");--> statement-breakpoint CREATE INDEX "idx_ads_visibility" ON "ads" USING btree ("visibility");--> statement-breakpoint CREATE INDEX "idx_auth_tokens_token" ON "auth_tokens" USING btree ("token");--> statement-breakpoint CREATE INDEX "idx_auth_tokens_user" ON "auth_tokens" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_chat_thread_read_unique" ON "chat_thread_read_status" USING btree ("user_id","media_id");--> statement-breakpoint CREATE INDEX "idx_chat_thread_read_user" ON "chat_thread_read_status" USING btree ("user_id");--> statement-breakpoint CREATE UNIQUE INDEX "idx_close_friends_unique" ON "close_friends" USING btree ("user_id","close_friend_id");--> statement-breakpoint CREATE INDEX "idx_close_friends_user" ON "close_friends" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_comment_moderation_comment" ON "comment_moderation" USING btree ("comment_id");--> statement-breakpoint CREATE INDEX "idx_comment_moderation_status" ON "comment_moderation" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_comments_media" ON "comments" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_comments_session" ON "comments" USING btree ("session_id");--> statement-breakpoint CREATE INDEX "idx_comments_user" ON "comments" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_comments_safety_status" ON "comments" USING btree ("safety_status");--> statement-breakpoint CREATE INDEX "idx_comments_is_hidden" ON "comments" USING btree ("is_hidden");--> statement-breakpoint CREATE INDEX "idx_content_reports_media" ON "content_reports" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_content_reports_status" ON "content_reports" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_content_reports_session" ON "content_reports" USING btree ("session_id");--> statement-breakpoint CREATE INDEX "idx_content_reports_created" ON "content_reports" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_creators_name" ON "creators" USING btree ("name");--> statement-breakpoint CREATE INDEX "idx_creators_slug" ON "creators" USING btree ("slug");--> statement-breakpoint CREATE INDEX "idx_creators_gender" ON "creators" USING btree ("gender");--> statement-breakpoint CREATE INDEX "idx_creators_tag" ON "creators" USING btree ("tag_id");--> statement-breakpoint CREATE INDEX "idx_creators_public" ON "creators" USING btree ("is_public");--> statement-breakpoint CREATE INDEX "idx_digest_clip_tags_clip" ON "digest_clip_tags" USING btree ("clip_id");--> statement-breakpoint CREATE INDEX "idx_digest_clip_tags_tag" ON "digest_clip_tags" USING btree ("tag_id");--> statement-breakpoint CREATE INDEX "idx_digest_clip_tags_unique" ON "digest_clip_tags" USING btree ("clip_id","tag_id");--> statement-breakpoint CREATE INDEX "idx_digest_compilations_digest" ON "digest_compilations" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_digest_compilations_video" ON "digest_compilations" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_digest_compilations_status" ON "digest_compilations" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_digest_compilations_folder" ON "digest_compilations" USING btree ("folder_id");--> statement-breakpoint CREATE INDEX "idx_digest_generated_clips_selected" ON "digest_generated_clips" USING btree ("selected_clip_id");--> statement-breakpoint CREATE INDEX "idx_digest_generated_clips_digest" ON "digest_generated_clips" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_digest_generated_clips_status" ON "digest_generated_clips" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_digest_generated_clips_folder" ON "digest_generated_clips" USING btree ("folder_id");--> statement-breakpoint CREATE INDEX "idx_digest_generated_scenes_digest" ON "digest_generated_scenes" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_digest_generated_scenes_video" ON "digest_generated_scenes" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_digest_generated_scenes_folder" ON "digest_generated_scenes" USING btree ("folder_id");--> statement-breakpoint CREATE INDEX "idx_digest_generated_scenes_path" ON "digest_generated_scenes" USING btree ("scene_path");--> statement-breakpoint CREATE INDEX "idx_digest_output_folders_digest" ON "digest_output_folders" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_digest_output_folders_video" ON "digest_output_folders" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_digest_output_folders_path" ON "digest_output_folders" USING btree ("folder_path");--> statement-breakpoint CREATE INDEX "idx_digest_selected_clips_digest" ON "digest_selected_clips" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_digest_selected_clips_video" ON "digest_selected_clips" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_digest_selected_clips_type" ON "digest_selected_clips" USING btree ("clip_type");--> statement-breakpoint CREATE INDEX "idx_digest_selected_clips_source" ON "digest_selected_clips" USING btree ("source");--> statement-breakpoint CREATE INDEX "idx_digest_selected_clips_sequence" ON "digest_selected_clips" USING btree ("sequence_order");--> statement-breakpoint CREATE INDEX "idx_digest_selected_clips_is_hook" ON "digest_selected_clips" USING btree ("is_hook");--> statement-breakpoint CREATE INDEX "idx_digest_selected_clips_hook_source" ON "digest_selected_clips" USING btree ("hook_source_clip_id");--> statement-breakpoint CREATE INDEX "idx_digest_suggested_tags_digest" ON "digest_suggested_tags" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_digest_suggested_tags_video" ON "digest_suggested_tags" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_digest_suggested_tags_status" ON "digest_suggested_tags" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_digest_suggested_tags_cat_val" ON "digest_suggested_tags" USING btree ("suggested_category","suggested_value");--> statement-breakpoint CREATE INDEX "idx_digest_video_tags_digest" ON "digest_video_tags" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_digest_video_tags_video" ON "digest_video_tags" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_digest_video_tags_category" ON "digest_video_tags" USING btree ("category");--> statement-breakpoint CREATE INDEX "idx_digest_video_tags_value" ON "digest_video_tags" USING btree ("value");--> statement-breakpoint CREATE INDEX "idx_digest_video_tags_cat_val" ON "digest_video_tags" USING btree ("category","value");--> statement-breakpoint CREATE INDEX "idx_email_change_tokens_token" ON "email_change_tokens" USING btree ("token");--> statement-breakpoint CREATE INDEX "idx_email_change_tokens_user" ON "email_change_tokens" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_email_verification_tokens_token" ON "email_verification_tokens" USING btree ("token");--> statement-breakpoint CREATE INDEX "idx_email_verification_tokens_user" ON "email_verification_tokens" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_featured_playlists_position" ON "featured_playlists" USING btree ("position");--> statement-breakpoint CREATE INDEX "idx_friendships_user_friend" ON "friendships" USING btree ("user_id","friend_id");--> statement-breakpoint CREATE INDEX "idx_friendships_user" ON "friendships" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_friendships_friend" ON "friendships" USING btree ("friend_id");--> statement-breakpoint CREATE INDEX "idx_friendships_status" ON "friendships" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_geo_blocking_country" ON "geo_blocking_rules" USING btree ("country");--> statement-breakpoint CREATE UNIQUE INDEX "idx_geo_blocking_unique" ON "geo_blocking_rules" USING btree ("country","region","city");--> statement-breakpoint CREATE INDEX "idx_highlight_cooldowns_user" ON "highlight_cooldowns" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_invoices_user" ON "invoices" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_invoices_status" ON "invoices" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_invoices_due_date" ON "invoices" USING btree ("due_date");--> statement-breakpoint CREATE INDEX "idx_invoices_number" ON "invoices" USING btree ("invoice_number");--> statement-breakpoint CREATE INDEX "idx_jobs_queue" ON "jobs" USING btree ("status","priority","created_at");--> statement-breakpoint CREATE INDEX "idx_jobs_resource" ON "jobs" USING btree ("resource_category","status");--> statement-breakpoint CREATE INDEX "idx_jobs_pipeline" ON "jobs" USING btree ("pipeline_id");--> statement-breakpoint CREATE INDEX "idx_moderation_word_lists_level" ON "moderation_word_lists" USING btree ("level");--> statement-breakpoint CREATE INDEX "idx_moderation_word_lists_word" ON "moderation_word_lists" USING btree ("word");--> statement-breakpoint CREATE INDEX "idx_notification_preferences_user" ON "notification_preferences" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_notifications_user_unread" ON "notifications" USING btree ("user_id","is_read");--> statement-breakpoint CREATE INDEX "idx_notifications_user_created" ON "notifications" USING btree ("user_id","created_at");--> statement-breakpoint CREATE INDEX "idx_notifications_type" ON "notifications" USING btree ("type");--> statement-breakpoint CREATE INDEX "idx_notifications_created" ON "notifications" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_notifications_actor" ON "notifications" USING btree ("actor_id");--> statement-breakpoint CREATE INDEX "idx_password_reset_tokens_token" ON "password_reset_tokens" USING btree ("token");--> statement-breakpoint CREATE INDEX "idx_password_reset_tokens_user" ON "password_reset_tokens" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_payment_audit_payment" ON "payment_audit_log" USING btree ("payment_id");--> statement-breakpoint CREATE INDEX "idx_payment_audit_invoice" ON "payment_audit_log" USING btree ("invoice_id");--> statement-breakpoint CREATE INDEX "idx_payment_audit_user" ON "payment_audit_log" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_payment_audit_action" ON "payment_audit_log" USING btree ("action");--> statement-breakpoint CREATE INDEX "idx_payment_audit_created" ON "payment_audit_log" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_payments_user" ON "payments" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_payments_invoice" ON "payments" USING btree ("invoice_id");--> statement-breakpoint CREATE INDEX "idx_payments_status" ON "payments" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_payments_sender_email" ON "payments" USING btree ("sender_email");--> statement-breakpoint CREATE INDEX "idx_payments_reference" ON "payments" USING btree ("reference_number");--> statement-breakpoint CREATE INDEX "idx_payments_received_at" ON "payments" USING btree ("received_at");--> statement-breakpoint CREATE INDEX "idx_discrepancies_video" ON "performer_discrepancies" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_discrepancies_digest" ON "performer_discrepancies" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_discrepancies_status" ON "performer_discrepancies" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_discrepancies_type" ON "performer_discrepancies" USING btree ("discrepancy_type");--> statement-breakpoint CREATE INDEX "idx_discrepancies_detected_performer" ON "performer_discrepancies" USING btree ("detected_performer_id");--> statement-breakpoint CREATE INDEX "idx_performer_faces_performer" ON "performer_faces" USING btree ("performer_id");--> statement-breakpoint CREATE INDEX "idx_performer_faces_name" ON "performer_faces" USING btree ("performer_name");--> statement-breakpoint CREATE INDEX "idx_performer_faces_video" ON "performer_faces" USING btree ("source_video");--> statement-breakpoint CREATE INDEX "idx_performer_faces_gender" ON "performer_faces" USING btree ("gender");--> statement-breakpoint CREATE INDEX "idx_performer_faces_digest" ON "performer_faces" USING btree ("source_digest_id");--> statement-breakpoint CREATE INDEX "idx_performer_faces_crop" ON "performer_faces" USING btree ("face_crop_path");--> statement-breakpoint CREATE INDEX "idx_performer_faces_status" ON "performer_faces" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_performer_faces_faces_in_frame" ON "performer_faces" USING btree ("faces_in_frame");--> statement-breakpoint CREATE INDEX "idx_performer_faces_det_score" ON "performer_faces" USING btree ("detection_score");--> statement-breakpoint CREATE INDEX "idx_pipeline_step_events_step" ON "pipeline_step_events" USING btree ("step_id");--> statement-breakpoint CREATE INDEX "idx_pipeline_step_events_created" ON "pipeline_step_events" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_pipeline_steps_pipeline" ON "pipeline_steps" USING btree ("pipeline_id");--> statement-breakpoint CREATE INDEX "idx_pipeline_steps_sequence" ON "pipeline_steps" USING btree ("pipeline_id","sequence_order");--> statement-breakpoint CREATE INDEX "idx_pipeline_steps_status" ON "pipeline_steps" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_pipeline_templates_name" ON "pipeline_templates" USING btree ("name");--> statement-breakpoint CREATE INDEX "idx_pipelines_status" ON "pipelines" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_pipelines_priority" ON "pipelines" USING btree ("priority","created_at");--> statement-breakpoint CREATE INDEX "idx_pipelines_heartbeat" ON "pipelines" USING btree ("last_heartbeat");--> statement-breakpoint CREATE INDEX "idx_playlist_videos_playlist" ON "playlist_videos" USING btree ("playlist_id");--> statement-breakpoint CREATE INDEX "idx_playlist_videos_media" ON "playlist_videos" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_playlist_videos_unique" ON "playlist_videos" USING btree ("playlist_id","media_id");--> statement-breakpoint CREATE INDEX "idx_playlist_views_playlist" ON "playlist_views" USING btree ("playlist_id");--> statement-breakpoint CREATE INDEX "idx_playlist_views_unique" ON "playlist_views" USING btree ("playlist_id","session_id");--> statement-breakpoint CREATE INDEX "idx_playlists_user" ON "playlists" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_playlists_public" ON "playlists" USING btree ("is_public");--> statement-breakpoint CREATE INDEX "idx_playlists_share_token" ON "playlists" USING btree ("share_token");--> statement-breakpoint CREATE UNIQUE INDEX "idx_playlists_user_name" ON "playlists" USING btree ("user_id","name");--> statement-breakpoint CREATE INDEX "idx_pokes_to_user" ON "pokes" USING btree ("to_user_id");--> statement-breakpoint CREATE INDEX "idx_pokes_from_user" ON "pokes" USING btree ("from_user_id");--> statement-breakpoint CREATE INDEX "idx_privacy_settings_user" ON "privacy_settings" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_public_media_category" ON "public_media" USING btree ("category");--> statement-breakpoint CREATE INDEX "idx_public_media_path" ON "public_media" USING btree ("path");--> statement-breakpoint CREATE INDEX "idx_public_media_is_locked" ON "public_media" USING btree ("is_locked");--> statement-breakpoint CREATE INDEX "idx_public_media_position" ON "public_media" USING btree ("position");--> statement-breakpoint CREATE INDEX "idx_public_media_uploader" ON "public_media" USING btree ("uploader_id");--> statement-breakpoint CREATE INDEX "idx_public_media_category_date" ON "public_media" USING btree ("category","created_at");--> statement-breakpoint CREATE INDEX "idx_public_media_orientation" ON "public_media" USING btree ("orientation");--> statement-breakpoint CREATE INDEX "idx_public_media_category_locked_date" ON "public_media" USING btree ("category","is_locked","created_at");--> statement-breakpoint CREATE INDEX "idx_public_media_performers_media" ON "public_media_performers" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_public_media_performers_performer" ON "public_media_performers" USING btree ("performer_id");--> statement-breakpoint CREATE UNIQUE INDEX "idx_public_media_performers_unique" ON "public_media_performers" USING btree ("media_id","performer_id");--> statement-breakpoint CREATE INDEX "idx_public_media_tags_media" ON "public_media_tags" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_public_media_tags_tag" ON "public_media_tags" USING btree ("tag_id");--> statement-breakpoint CREATE INDEX "idx_public_media_tags_unique" ON "public_media_tags" USING btree ("media_id","tag_id");--> statement-breakpoint CREATE INDEX "idx_published_inbox_source" ON "published_inbox_files" USING btree ("source_inbox_path");--> statement-breakpoint CREATE INDEX "idx_published_inbox_file_type" ON "published_inbox_files" USING btree ("file_type");--> statement-breakpoint CREATE UNIQUE INDEX "idx_rate_limits_key" ON "rate_limits" USING btree ("key");--> statement-breakpoint CREATE INDEX "idx_rate_limits_reset_at" ON "rate_limits" USING btree ("reset_at");--> statement-breakpoint CREATE INDEX "idx_resource_snapshots_created" ON "resource_snapshots" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_resource_snapshots_pipeline" ON "resource_snapshots" USING btree ("pipeline_id");--> statement-breakpoint CREATE INDEX "idx_session_bans_session" ON "session_bans" USING btree ("session_id");--> statement-breakpoint CREATE INDEX "idx_sessions_user_id" ON "sessions" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_sessions_country" ON "sessions" USING btree ("country");--> statement-breakpoint CREATE INDEX "idx_tag_categories_display_order" ON "tag_categories" USING btree ("display_order");--> statement-breakpoint CREATE INDEX "idx_tag_gen_status" ON "tag_generation_jobs" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_tag_gen_content_type" ON "tag_generation_jobs" USING btree ("content_type");--> statement-breakpoint CREATE INDEX "idx_tag_gen_created_at" ON "tag_generation_jobs" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_tags_category" ON "tags" USING btree ("category_id");--> statement-breakpoint CREATE INDEX "idx_tags_display_order" ON "tags" USING btree ("display_order");--> statement-breakpoint CREATE INDEX "idx_tags_unique_name" ON "tags" USING btree ("category_id","name");--> statement-breakpoint CREATE INDEX "idx_upload_invites_code" ON "upload_invites" USING btree ("code");--> statement-breakpoint CREATE INDEX "idx_upload_invites_status" ON "upload_invites" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_upload_invites_created_by" ON "upload_invites" USING btree ("created_by");--> statement-breakpoint CREATE INDEX "idx_upvotes_unique" ON "upvotes" USING btree ("media_id","session_id");--> statement-breakpoint CREATE INDEX "idx_upvotes_media" ON "upvotes" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_user_achievements_user" ON "user_achievements" USING btree ("user_id");--> statement-breakpoint CREATE UNIQUE INDEX "idx_user_achievements_unique" ON "user_achievements" USING btree ("user_id","achievement_id");--> statement-breakpoint CREATE INDEX "idx_user_blocks_unique" ON "user_blocks" USING btree ("user_id","blocked_user_id");--> statement-breakpoint CREATE INDEX "idx_user_blocks_user" ON "user_blocks" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_daily_activity_unique" ON "user_daily_activity" USING btree ("user_id","activity_date");--> statement-breakpoint CREATE INDEX "idx_user_finishes_user" ON "user_finishes" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_finishes_date" ON "user_finishes" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_user_gallery_user" ON "user_gallery_images" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_gallery_position" ON "user_gallery_images" USING btree ("user_id","position");--> statement-breakpoint CREATE INDEX "idx_user_presence_online" ON "user_presence" USING btree ("is_online");--> statement-breakpoint CREATE INDEX "idx_user_presence_user" ON "user_presence" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_social_links_user" ON "user_social_links" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_social_links_position" ON "user_social_links" USING btree ("user_id","position");--> statement-breakpoint CREATE UNIQUE INDEX "idx_user_subscriptions_user" ON "user_subscriptions" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_subscriptions_status" ON "user_subscriptions" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_user_subscriptions_end_date" ON "user_subscriptions" USING btree ("end_date");--> statement-breakpoint CREATE INDEX "idx_user_tag_preferences_user" ON "user_tag_preferences" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_tag_preferences_tag" ON "user_tag_preferences" USING btree ("tag_id");--> statement-breakpoint CREATE INDEX "idx_user_tag_preferences_unique" ON "user_tag_preferences" USING btree ("user_id","tag_id");--> statement-breakpoint CREATE INDEX "idx_user_upload_suggested_tags_upload" ON "user_upload_suggested_tags" USING btree ("upload_id");--> statement-breakpoint CREATE INDEX "idx_user_upload_suggested_tags_tag" ON "user_upload_suggested_tags" USING btree ("tag_id");--> statement-breakpoint CREATE INDEX "idx_user_upload_suggested_tags_unique" ON "user_upload_suggested_tags" USING btree ("upload_id","tag_id");--> statement-breakpoint CREATE INDEX "idx_user_uploads_user" ON "user_uploads" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_user_uploads_status" ON "user_uploads" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_user_uploads_created" ON "user_uploads" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_user_uploads_invite" ON "user_uploads" USING btree ("upload_invite_id");--> statement-breakpoint CREATE INDEX "idx_users_email" ON "users" USING btree ("email");--> statement-breakpoint CREATE INDEX "idx_users_username" ON "users" USING btree ("username");--> statement-breakpoint CREATE INDEX "idx_users_status" ON "users" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_users_trusted" ON "users" USING btree ("is_trusted");--> statement-breakpoint CREATE INDEX "idx_users_subscription_status" ON "users" USING btree ("subscription_status");--> statement-breakpoint CREATE INDEX "idx_video_digests_video" ON "video_digests" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_video_digests_status" ON "video_digests" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_video_digests_created" ON "video_digests" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_video_ocr_results_digest" ON "video_ocr_results" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_video_ocr_results_video" ON "video_ocr_results" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_video_reactions_user_media_type" ON "video_reactions" USING btree ("user_id","media_id","reaction_type");--> statement-breakpoint CREATE INDEX "idx_video_reactions_media_timestamp" ON "video_reactions" USING btree ("media_id","video_timestamp");--> statement-breakpoint CREATE INDEX "idx_video_reactions_media" ON "video_reactions" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_video_reactions_created" ON "video_reactions" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_video_recommendations_to_user" ON "video_recommendations" USING btree ("to_user_id");--> statement-breakpoint CREATE INDEX "idx_video_recommendations_from_user" ON "video_recommendations" USING btree ("from_user_id");--> statement-breakpoint CREATE INDEX "idx_video_recommendations_media" ON "video_recommendations" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_video_scene_cuts_video" ON "video_scene_cuts" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_video_segments_digest" ON "video_segments" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_video_segments_video" ON "video_segments" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_video_segments_type" ON "video_segments" USING btree ("segment_type");--> statement-breakpoint CREATE INDEX "idx_video_segments_time" ON "video_segments" USING btree ("video_id","start_time");--> statement-breakpoint CREATE INDEX "idx_video_segments_included" ON "video_segments" USING btree ("digest_id","is_included");--> statement-breakpoint CREATE INDEX "idx_video_segments_sequence" ON "video_segments" USING btree ("digest_id","sequence_order");--> statement-breakpoint CREATE INDEX "idx_video_segments_clips" ON "video_segments" USING btree ("digest_id","include_in_clips");--> statement-breakpoint CREATE INDEX "idx_video_tag_timeline_video" ON "video_tag_timeline" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_video_tag_timeline_digest" ON "video_tag_timeline" USING btree ("digest_id");--> statement-breakpoint CREATE INDEX "idx_video_tag_timeline_timestamp" ON "video_tag_timeline" USING btree ("video_id","timestamp");--> statement-breakpoint CREATE INDEX "idx_video_tag_timeline_position" ON "video_tag_timeline" USING btree ("dominant_position");--> statement-breakpoint CREATE INDEX "idx_video_tags_video" ON "video_tags" USING btree ("video_id");--> statement-breakpoint CREATE INDEX "idx_video_tags_tag" ON "video_tags" USING btree ("tag_id");--> statement-breakpoint CREATE INDEX "idx_video_tags_source" ON "video_tags" USING btree ("source");--> statement-breakpoint CREATE INDEX "idx_video_tags_unique" ON "video_tags" USING btree ("video_id","tag_id");--> statement-breakpoint CREATE INDEX "idx_orientation" ON "videos" USING btree ("orientation");--> statement-breakpoint CREATE INDEX "idx_producer" ON "videos" USING btree ("producer");--> statement-breakpoint CREATE INDEX "idx_is_valid" ON "videos" USING btree ("is_valid");--> statement-breakpoint CREATE INDEX "idx_directory_type" ON "videos" USING btree ("directory_type");--> statement-breakpoint CREATE INDEX "idx_videos_fingerprint" ON "videos" USING btree ("duration_seconds","file_size","width","height");--> statement-breakpoint CREATE INDEX "idx_videos_directory_valid_orientation" ON "videos" USING btree ("directory_type","is_valid","orientation");--> statement-breakpoint CREATE INDEX "idx_views_unique" ON "views" USING btree ("media_id","session_id");--> statement-breakpoint CREATE INDEX "idx_views_media" ON "views" USING btree ("media_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_chat_party" ON "watch_party_chat_messages" USING btree ("party_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_chat_created" ON "watch_party_chat_messages" USING btree ("created_at");--> statement-breakpoint CREATE INDEX "idx_watch_party_invites_party" ON "watch_party_invites" USING btree ("party_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_invites_to_user" ON "watch_party_invites" USING btree ("to_user_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_invites_from_user" ON "watch_party_invites" USING btree ("from_user_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_invites_status" ON "watch_party_invites" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_watch_party_participants_party" ON "watch_party_participants" USING btree ("party_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_participants_user" ON "watch_party_participants" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_participants_unique" ON "watch_party_participants" USING btree ("party_id","user_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_reactions_party" ON "watch_party_reactions" USING btree ("party_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_reactions_user" ON "watch_party_reactions" USING btree ("user_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_sessions_host" ON "watch_party_sessions" USING btree ("host_id");--> statement-breakpoint CREATE INDEX "idx_watch_party_sessions_invite" ON "watch_party_sessions" USING btree ("invite_code");--> statement-breakpoint CREATE INDEX "idx_watch_party_sessions_status" ON "watch_party_sessions" USING btree ("status");--> statement-breakpoint CREATE INDEX "idx_watch_party_sessions_created" ON "watch_party_sessions" USING btree ("created_at");