forked from admin/zeropost-engine
2229 lines
56 KiB
SQL
2229 lines
56 KiB
SQL
--
|
|
-- PostgreSQL database dump
|
|
--
|
|
|
|
\restrict VhNY3y2jfbhtHWUJNX17PN7SRgHPDQoK22OdEvgq8EbNJ3oFJFZi6W1o1ShNkWQ
|
|
|
|
-- Dumped from database version 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
|
|
-- Dumped by pg_dump version 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
|
|
|
|
SET statement_timeout = 0;
|
|
SET lock_timeout = 0;
|
|
SET idle_in_transaction_session_timeout = 0;
|
|
SET client_encoding = 'UTF8';
|
|
SET standard_conforming_strings = on;
|
|
SELECT pg_catalog.set_config('search_path', '', false);
|
|
SET check_function_bodies = false;
|
|
SET xmloption = content;
|
|
SET client_min_messages = warning;
|
|
SET row_security = off;
|
|
|
|
SET default_tablespace = '';
|
|
|
|
SET default_table_access_method = heap;
|
|
|
|
--
|
|
-- Name: ai_usage; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.ai_usage (
|
|
id bigint NOT NULL,
|
|
service text NOT NULL,
|
|
provider text NOT NULL,
|
|
request_type text NOT NULL,
|
|
model text NOT NULL,
|
|
user_id integer,
|
|
prompt_tokens integer,
|
|
completion_tokens integer,
|
|
total_tokens integer,
|
|
image_count integer,
|
|
cost_rub numeric(10,4),
|
|
request_id text,
|
|
meta jsonb,
|
|
duration_ms integer,
|
|
succeeded boolean DEFAULT true NOT NULL,
|
|
error_message text,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: ai_usage_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.ai_usage_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: ai_usage_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.ai_usage_id_seq OWNED BY public.ai_usage.id;
|
|
|
|
|
|
--
|
|
-- Name: app_settings; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.app_settings (
|
|
key text NOT NULL,
|
|
value text,
|
|
description text,
|
|
category text DEFAULT 'general'::text NOT NULL,
|
|
is_secret boolean DEFAULT false NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: articles; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.articles (
|
|
id integer NOT NULL,
|
|
slug character varying(255) NOT NULL,
|
|
title character varying(500) NOT NULL,
|
|
excerpt text,
|
|
content text NOT NULL,
|
|
cover_url text,
|
|
tags jsonb DEFAULT '[]'::jsonb,
|
|
author character varying(100) DEFAULT 'ZeroPost AI'::character varying,
|
|
reading_time integer,
|
|
status character varying(20) DEFAULT 'published'::character varying,
|
|
views integer DEFAULT 0,
|
|
seo_title character varying(500),
|
|
seo_descr text,
|
|
job_id integer,
|
|
published_at timestamp with time zone DEFAULT now(),
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
category character varying(50) DEFAULT 'ai-tools'::character varying,
|
|
source_topic text,
|
|
topic_hash character varying(64)
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: articles_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.articles_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: articles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.articles_id_seq OWNED BY public.articles.id;
|
|
|
|
|
|
--
|
|
-- Name: autogen_settings; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.autogen_settings (
|
|
id integer NOT NULL,
|
|
category character varying(50) NOT NULL,
|
|
enabled boolean DEFAULT true,
|
|
per_day integer DEFAULT 1,
|
|
last_run_at timestamp with time zone,
|
|
next_run_at timestamp with time zone,
|
|
run_hour integer DEFAULT 8,
|
|
run_minute integer DEFAULT 0
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: autogen_settings_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.autogen_settings_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: autogen_settings_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.autogen_settings_id_seq OWNED BY public.autogen_settings.id;
|
|
|
|
|
|
--
|
|
-- Name: blog_topics; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.blog_topics (
|
|
id integer NOT NULL,
|
|
category character varying(50) NOT NULL,
|
|
topic text NOT NULL,
|
|
tags text[] DEFAULT '{}'::text[],
|
|
is_used boolean DEFAULT false,
|
|
used_at timestamp with time zone,
|
|
source character varying(16) DEFAULT 'manual'::character varying,
|
|
priority integer DEFAULT 5,
|
|
created_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: blog_topics_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.blog_topics_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: blog_topics_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.blog_topics_id_seq OWNED BY public.blog_topics.id;
|
|
|
|
|
|
--
|
|
-- Name: categories; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.categories (
|
|
id integer NOT NULL,
|
|
slug character varying(50) NOT NULL,
|
|
name character varying(100) NOT NULL,
|
|
description text,
|
|
color character varying(20) DEFAULT 'emerald'::character varying,
|
|
icon character varying(10) DEFAULT '🤖'::character varying,
|
|
sort_order integer DEFAULT 0
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: categories_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.categories_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: categories_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.categories_id_seq OWNED BY public.categories.id;
|
|
|
|
|
|
--
|
|
-- Name: channel_schedule; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channel_schedule (
|
|
channel_id integer NOT NULL,
|
|
posts_per_day integer DEFAULT 1,
|
|
time_slots jsonb DEFAULT '[]'::jsonb,
|
|
timezone character varying(50) DEFAULT 'Europe/Moscow'::character varying,
|
|
rubrics jsonb DEFAULT '[]'::jsonb,
|
|
sources jsonb DEFAULT '[]'::jsonb,
|
|
auto_publish boolean DEFAULT false,
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: channel_stats; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channel_stats (
|
|
id integer NOT NULL,
|
|
channel_id integer NOT NULL,
|
|
captured_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
members integer,
|
|
views_last_post integer,
|
|
avg_views_30d integer,
|
|
err_percent numeric(5,2)
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: TABLE channel_stats; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON TABLE public.channel_stats IS 'История метрик каналов: подписчики, просмотры, ERR';
|
|
|
|
|
|
--
|
|
-- Name: channel_stats_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.channel_stats_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: channel_stats_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.channel_stats_id_seq OWNED BY public.channel_stats.id;
|
|
|
|
|
|
--
|
|
-- Name: channel_style; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channel_style (
|
|
channel_id integer NOT NULL,
|
|
tone character varying(50) DEFAULT 'friendly'::character varying,
|
|
tone_custom text,
|
|
formality character varying(20) DEFAULT 'informal'::character varying,
|
|
humor character varying(20) DEFAULT 'moderate'::character varying,
|
|
post_length character varying(20) DEFAULT 'medium'::character varying,
|
|
structure character varying(50) DEFAULT 'mixed'::character varying,
|
|
emoji_level character varying(20) DEFAULT 'moderate'::character varying,
|
|
hashtags_mode character varying(20) DEFAULT 'end'::character varying,
|
|
cta_mode character varying(20) DEFAULT 'sometimes'::character varying,
|
|
example_posts jsonb DEFAULT '[]'::jsonb,
|
|
banned_words jsonb DEFAULT '[]'::jsonb,
|
|
banned_topics jsonb DEFAULT '[]'::jsonb,
|
|
expertise jsonb DEFAULT '[]'::jsonb,
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
image_enabled boolean DEFAULT false,
|
|
image_style character varying(255) DEFAULT 'flat-illustration'::character varying,
|
|
image_palette character varying(30) DEFAULT 'auto'::character varying,
|
|
image_custom_colors text,
|
|
image_prompt_instructions text,
|
|
image_rubrics jsonb DEFAULT '[]'::jsonb,
|
|
last_rubrics_used jsonb DEFAULT '[]'::jsonb
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: channel_topics; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channel_topics (
|
|
id bigint NOT NULL,
|
|
channel_id integer NOT NULL,
|
|
topic text NOT NULL,
|
|
keywords text[] DEFAULT '{}'::text[],
|
|
is_used boolean DEFAULT false NOT NULL,
|
|
used_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: channel_topics_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.channel_topics_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: channel_topics_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.channel_topics_id_seq OWNED BY public.channel_topics.id;
|
|
|
|
|
|
--
|
|
-- Name: channels; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.channels (
|
|
id integer NOT NULL,
|
|
user_id integer NOT NULL,
|
|
name character varying(255) NOT NULL,
|
|
tg_channel_id character varying(255),
|
|
tg_username character varying(255),
|
|
bot_token text,
|
|
niche text,
|
|
audience text,
|
|
goal character varying(255) DEFAULT 'educational'::character varying,
|
|
language character varying(10) DEFAULT 'ru'::character varying,
|
|
region character varying(50) DEFAULT 'ru'::character varying,
|
|
is_active boolean DEFAULT true,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
platform character varying(20) DEFAULT 'telegram'::character varying,
|
|
vk_group_id character varying(255),
|
|
vk_access_token text,
|
|
max_channel_id character varying(255),
|
|
max_access_token text,
|
|
is_system boolean DEFAULT false,
|
|
photo_search_profile_id integer,
|
|
auto_publish_enabled boolean DEFAULT false NOT NULL,
|
|
auto_publish_categories text[] DEFAULT '{}'::text[] NOT NULL,
|
|
auto_publish_delay_min integer DEFAULT 0 NOT NULL,
|
|
auto_publish_template text,
|
|
auto_publish_with_cover boolean DEFAULT true NOT NULL,
|
|
auto_publish_button_text text,
|
|
auto_publish_image_source text DEFAULT 'cover'::text NOT NULL,
|
|
ai_style_prompt text,
|
|
image_quality character varying(16) DEFAULT 'standard'::character varying,
|
|
tg_webhook_enabled boolean DEFAULT false,
|
|
topics_min_stock integer DEFAULT 5,
|
|
auto_draft_enabled boolean DEFAULT false,
|
|
auto_draft_count integer DEFAULT 3,
|
|
auto_draft_time character varying(5) DEFAULT '08:00'::character varying,
|
|
image_enabled boolean DEFAULT true,
|
|
CONSTRAINT channels_auto_publish_image_source_check CHECK ((auto_publish_image_source = ANY (ARRAY['cover'::text, 'zero'::text, 'alternating'::text, 'none'::text])))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: COLUMN channels.auto_publish_enabled; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.channels.auto_publish_enabled IS 'Включена ли автопубликация статей в этот канал';
|
|
|
|
|
|
--
|
|
-- Name: COLUMN channels.auto_publish_categories; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.channels.auto_publish_categories IS 'Категории статей, которые попадают в этот канал автоматически. Пустой массив = все.';
|
|
|
|
|
|
--
|
|
-- Name: COLUMN channels.auto_publish_delay_min; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.channels.auto_publish_delay_min IS 'Задержка в минутах после publish_at статьи. 0 = сразу на ближайший слот.';
|
|
|
|
|
|
--
|
|
-- Name: COLUMN channels.auto_publish_template; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.channels.auto_publish_template IS 'Шаблон поста. Плейсхолдеры: {title} {excerpt} {url} {category}. Если NULL — дефолт.';
|
|
|
|
|
|
--
|
|
-- Name: COLUMN channels.auto_publish_with_cover; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.channels.auto_publish_with_cover IS 'Прикреплять cover_url статьи к посту';
|
|
|
|
|
|
--
|
|
-- Name: COLUMN channels.auto_publish_button_text; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.channels.auto_publish_button_text IS 'Текст inline-кнопки в TG (по умолчанию «📖 Читать на сайте →»). Для VK/MAX автоматически вставляется в текст.';
|
|
|
|
|
|
--
|
|
-- Name: COLUMN channels.auto_publish_image_source; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.channels.auto_publish_image_source IS 'cover = обложка статьи, zero = иллюстрация Зеро по позе, none = без картинки';
|
|
|
|
|
|
--
|
|
-- Name: channels_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.channels_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: channels_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.channels_id_seq OWNED BY public.channels.id;
|
|
|
|
|
|
--
|
|
-- Name: content_queue; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.content_queue (
|
|
id integer NOT NULL,
|
|
category character varying(50) NOT NULL,
|
|
topic text NOT NULL,
|
|
keywords jsonb DEFAULT '[]'::jsonb,
|
|
tags jsonb DEFAULT '[]'::jsonb,
|
|
priority integer DEFAULT 5,
|
|
status character varying(20) DEFAULT 'pending'::character varying,
|
|
article_id integer,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
processed_at timestamp with time zone
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: content_queue_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.content_queue_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: content_queue_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.content_queue_id_seq OWNED BY public.content_queue.id;
|
|
|
|
|
|
--
|
|
-- Name: credit_costs; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.credit_costs (
|
|
operation character varying(64) NOT NULL,
|
|
credits integer NOT NULL,
|
|
description text
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: editor_notes; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.editor_notes (
|
|
id integer NOT NULL,
|
|
title character varying(255),
|
|
content text NOT NULL,
|
|
author character varying(100) DEFAULT 'Редактор'::character varying,
|
|
tags jsonb DEFAULT '[]'::jsonb,
|
|
is_pinned boolean DEFAULT false,
|
|
is_published boolean DEFAULT true,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: editor_notes_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.editor_notes_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: editor_notes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.editor_notes_id_seq OWNED BY public.editor_notes.id;
|
|
|
|
|
|
--
|
|
-- Name: generation_jobs; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.generation_jobs (
|
|
id integer NOT NULL,
|
|
user_id integer,
|
|
channel_id integer,
|
|
type character varying(50) NOT NULL,
|
|
topic text,
|
|
rubric character varying(255),
|
|
prompt_debug text,
|
|
result text,
|
|
tokens_in integer,
|
|
tokens_out integer,
|
|
cost_cents integer DEFAULT 0,
|
|
status character varying(20) DEFAULT 'pending'::character varying,
|
|
error text,
|
|
metadata jsonb DEFAULT '{}'::jsonb,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: generation_jobs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.generation_jobs_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: generation_jobs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.generation_jobs_id_seq OWNED BY public.generation_jobs.id;
|
|
|
|
|
|
--
|
|
-- Name: inbox_messages; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.inbox_messages (
|
|
id bigint NOT NULL,
|
|
channel_id integer NOT NULL,
|
|
platform character varying(16) DEFAULT 'telegram'::character varying NOT NULL,
|
|
external_msg_id character varying(128),
|
|
from_user_id character varying(128),
|
|
from_username character varying(128),
|
|
from_name character varying(255),
|
|
reply_to_msg_id character varying(128),
|
|
text text NOT NULL,
|
|
raw jsonb DEFAULT '{}'::jsonb,
|
|
ai_type character varying(32),
|
|
ai_reply text,
|
|
ai_processed_at timestamp with time zone,
|
|
status character varying(16) DEFAULT 'new'::character varying NOT NULL,
|
|
replied_text text,
|
|
replied_at timestamp with time zone,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: inbox_messages_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.inbox_messages_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: inbox_messages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.inbox_messages_id_seq OWNED BY public.inbox_messages.id;
|
|
|
|
|
|
--
|
|
-- Name: payment_orders; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.payment_orders (
|
|
id bigint NOT NULL,
|
|
user_id integer NOT NULL,
|
|
plan_code character varying(32) NOT NULL,
|
|
yukassa_payment_id character varying(128),
|
|
amount_rub integer NOT NULL,
|
|
status character varying(32) DEFAULT 'pending'::character varying NOT NULL,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
updated_at timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: payment_orders_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.payment_orders_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: payment_orders_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.payment_orders_id_seq OWNED BY public.payment_orders.id;
|
|
|
|
|
|
--
|
|
-- Name: photo_search_profiles; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.photo_search_profiles (
|
|
id integer NOT NULL,
|
|
slug text NOT NULL,
|
|
name text NOT NULL,
|
|
description text,
|
|
domains text[] DEFAULT '{}'::text[] NOT NULL,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: photo_search_profiles_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.photo_search_profiles_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: photo_search_profiles_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.photo_search_profiles_id_seq OWNED BY public.photo_search_profiles.id;
|
|
|
|
|
|
--
|
|
-- Name: plans; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.plans (
|
|
id integer NOT NULL,
|
|
code character varying(32) NOT NULL,
|
|
name character varying(64) NOT NULL,
|
|
price_rub integer DEFAULT 0 NOT NULL,
|
|
credits_month integer DEFAULT 0 NOT NULL,
|
|
channels_max integer DEFAULT 1 NOT NULL,
|
|
features jsonb DEFAULT '{}'::jsonb,
|
|
is_active boolean DEFAULT true,
|
|
sort_order integer DEFAULT 0
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: plans_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.plans_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: plans_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.plans_id_seq OWNED BY public.plans.id;
|
|
|
|
|
|
--
|
|
-- Name: post_drafts; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.post_drafts (
|
|
id bigint NOT NULL,
|
|
channel_id integer NOT NULL,
|
|
user_id integer,
|
|
topic text,
|
|
text text NOT NULL,
|
|
image_url text,
|
|
image_local text,
|
|
status character varying(16) DEFAULT 'pending'::character varying NOT NULL,
|
|
scheduled_at timestamp with time zone,
|
|
gen_job_ids integer[],
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
reviewed_at timestamp with time zone
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: post_drafts_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.post_drafts_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: post_drafts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.post_drafts_id_seq OWNED BY public.post_drafts.id;
|
|
|
|
|
|
--
|
|
-- Name: post_metrics; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.post_metrics (
|
|
id integer NOT NULL,
|
|
post_id integer,
|
|
user_post_id integer,
|
|
captured_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
views integer DEFAULT 0,
|
|
forwards integer DEFAULT 0,
|
|
reactions jsonb DEFAULT '{}'::jsonb,
|
|
CONSTRAINT chk_one_source CHECK (((((post_id IS NOT NULL))::integer + ((user_post_id IS NOT NULL))::integer) = 1))
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: post_metrics_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.post_metrics_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: post_metrics_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.post_metrics_id_seq OWNED BY public.post_metrics.id;
|
|
|
|
|
|
--
|
|
-- Name: posts; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.posts (
|
|
id integer NOT NULL,
|
|
channel_id integer,
|
|
job_id integer,
|
|
content text NOT NULL,
|
|
image_url text,
|
|
status character varying(20) DEFAULT 'draft'::character varying,
|
|
scheduled_at timestamp with time zone,
|
|
published_at timestamp with time zone,
|
|
tg_message_id bigint,
|
|
metadata jsonb DEFAULT '{}'::jsonb,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
views integer DEFAULT 0,
|
|
forwards integer DEFAULT 0,
|
|
reactions jsonb DEFAULT '{}'::jsonb,
|
|
metrics_at timestamp with time zone
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: posts_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.posts_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: posts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.posts_id_seq OWNED BY public.posts.id;
|
|
|
|
|
|
--
|
|
-- Name: promo_codes; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.promo_codes (
|
|
id integer NOT NULL,
|
|
code character varying(32) NOT NULL,
|
|
type character varying(16) DEFAULT 'credits'::character varying NOT NULL,
|
|
value integer NOT NULL,
|
|
max_uses integer DEFAULT 1,
|
|
used_count integer DEFAULT 0,
|
|
expires_at timestamp with time zone,
|
|
is_active boolean DEFAULT true,
|
|
description text,
|
|
created_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: promo_codes_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.promo_codes_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: promo_codes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.promo_codes_id_seq OWNED BY public.promo_codes.id;
|
|
|
|
|
|
--
|
|
-- Name: promo_usages; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.promo_usages (
|
|
id bigint NOT NULL,
|
|
code_id integer NOT NULL,
|
|
user_id integer NOT NULL,
|
|
used_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: promo_usages_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.promo_usages_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: promo_usages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.promo_usages_id_seq OWNED BY public.promo_usages.id;
|
|
|
|
|
|
--
|
|
-- Name: publish_slots; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.publish_slots (
|
|
id integer NOT NULL,
|
|
channel_id integer,
|
|
slot_hour integer NOT NULL,
|
|
slot_minute integer NOT NULL,
|
|
enabled boolean DEFAULT true,
|
|
label character varying(50),
|
|
sort_order integer DEFAULT 0
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: publish_slots_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.publish_slots_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: publish_slots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.publish_slots_id_seq OWNED BY public.publish_slots.id;
|
|
|
|
|
|
--
|
|
-- Name: scheduled_posts; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.scheduled_posts (
|
|
id integer NOT NULL,
|
|
channel_id integer,
|
|
article_id integer,
|
|
custom_text text,
|
|
status character varying(20) DEFAULT 'pending'::character varying,
|
|
scheduled_at timestamp with time zone NOT NULL,
|
|
published_at timestamp with time zone,
|
|
error text,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
cover_regen_attempts integer DEFAULT 0,
|
|
post_type character varying(16) DEFAULT 'article'::character varying,
|
|
meta jsonb DEFAULT '{}'::jsonb
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: scheduled_posts_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.scheduled_posts_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: scheduled_posts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.scheduled_posts_id_seq OWNED BY public.scheduled_posts.id;
|
|
|
|
|
|
--
|
|
-- Name: series; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.series (
|
|
id integer NOT NULL,
|
|
slug character varying(120) NOT NULL,
|
|
title character varying(255) NOT NULL,
|
|
intro text,
|
|
icon character varying(40),
|
|
color character varying(20) DEFAULT 'emerald'::character varying,
|
|
article_ids jsonb DEFAULT '[]'::jsonb,
|
|
is_featured boolean DEFAULT false,
|
|
sort_order integer DEFAULT 0,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now()
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: series_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.series_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: series_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.series_id_seq OWNED BY public.series.id;
|
|
|
|
|
|
--
|
|
-- Name: user_balance; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.user_balance (
|
|
user_id integer NOT NULL,
|
|
credits integer DEFAULT 0 NOT NULL,
|
|
credits_monthly_reset integer DEFAULT 0 NOT NULL,
|
|
reset_at timestamp with time zone,
|
|
updated_at timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: user_posts; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.user_posts (
|
|
id integer NOT NULL,
|
|
user_id integer NOT NULL,
|
|
channel_id integer,
|
|
content text NOT NULL,
|
|
image_url text,
|
|
topic text,
|
|
status character varying(20) DEFAULT 'draft'::character varying,
|
|
scheduled_at timestamp with time zone,
|
|
published_at timestamp with time zone,
|
|
tg_message_id integer,
|
|
error text,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
updated_at timestamp with time zone DEFAULT now(),
|
|
image_credit jsonb,
|
|
views integer DEFAULT 0,
|
|
forwards integer DEFAULT 0,
|
|
reactions jsonb DEFAULT '{}'::jsonb,
|
|
metrics_at timestamp with time zone
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: COLUMN user_posts.image_credit; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.user_posts.image_credit IS 'Атрибуция фото из photo-search: { domain, sourceUrl, title }';
|
|
|
|
|
|
--
|
|
-- Name: user_posts_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.user_posts_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: user_posts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.user_posts_id_seq OWNED BY public.user_posts.id;
|
|
|
|
|
|
--
|
|
-- Name: user_subscriptions; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.user_subscriptions (
|
|
id integer NOT NULL,
|
|
user_id integer NOT NULL,
|
|
plan_id integer NOT NULL,
|
|
status character varying(16) DEFAULT 'active'::character varying NOT NULL,
|
|
started_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
expires_at timestamp with time zone,
|
|
yukassa_sub_id character varying(128),
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: user_subscriptions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.user_subscriptions_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: user_subscriptions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.user_subscriptions_id_seq OWNED BY public.user_subscriptions.id;
|
|
|
|
|
|
--
|
|
-- Name: user_transactions; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.user_transactions (
|
|
id bigint NOT NULL,
|
|
user_id integer NOT NULL,
|
|
type character varying(32) NOT NULL,
|
|
amount integer NOT NULL,
|
|
balance_after integer NOT NULL,
|
|
description text,
|
|
meta jsonb DEFAULT '{}'::jsonb,
|
|
created_at timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: user_transactions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.user_transactions_id_seq
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: user_transactions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.user_transactions_id_seq OWNED BY public.user_transactions.id;
|
|
|
|
|
|
--
|
|
-- Name: users; Type: TABLE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE TABLE public.users (
|
|
id integer NOT NULL,
|
|
email character varying(255) NOT NULL,
|
|
password text NOT NULL,
|
|
name character varying(255),
|
|
plan character varying(20) DEFAULT 'free'::character varying,
|
|
api_key character varying(64),
|
|
tokens_used bigint DEFAULT 0,
|
|
created_at timestamp with time zone DEFAULT now(),
|
|
is_admin boolean DEFAULT false NOT NULL,
|
|
is_blocked boolean DEFAULT false
|
|
);
|
|
|
|
|
|
--
|
|
-- Name: COLUMN users.is_admin; Type: COMMENT; Schema: public; Owner: -
|
|
--
|
|
|
|
COMMENT ON COLUMN public.users.is_admin IS 'Админ tool (доступ к /system и т.п.)';
|
|
|
|
|
|
--
|
|
-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE SEQUENCE public.users_id_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
|
|
--
|
|
-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id;
|
|
|
|
|
|
--
|
|
-- Name: ai_usage id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.ai_usage ALTER COLUMN id SET DEFAULT nextval('public.ai_usage_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: articles id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.articles ALTER COLUMN id SET DEFAULT nextval('public.articles_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: autogen_settings id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.autogen_settings ALTER COLUMN id SET DEFAULT nextval('public.autogen_settings_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: blog_topics id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.blog_topics ALTER COLUMN id SET DEFAULT nextval('public.blog_topics_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: categories id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.categories ALTER COLUMN id SET DEFAULT nextval('public.categories_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: channel_stats id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_stats ALTER COLUMN id SET DEFAULT nextval('public.channel_stats_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: channel_topics id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_topics ALTER COLUMN id SET DEFAULT nextval('public.channel_topics_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: channels id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channels ALTER COLUMN id SET DEFAULT nextval('public.channels_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: content_queue id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.content_queue ALTER COLUMN id SET DEFAULT nextval('public.content_queue_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: editor_notes id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.editor_notes ALTER COLUMN id SET DEFAULT nextval('public.editor_notes_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: generation_jobs id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_jobs ALTER COLUMN id SET DEFAULT nextval('public.generation_jobs_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: inbox_messages id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.inbox_messages ALTER COLUMN id SET DEFAULT nextval('public.inbox_messages_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: payment_orders id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.payment_orders ALTER COLUMN id SET DEFAULT nextval('public.payment_orders_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: photo_search_profiles id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.photo_search_profiles ALTER COLUMN id SET DEFAULT nextval('public.photo_search_profiles_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: plans id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.plans ALTER COLUMN id SET DEFAULT nextval('public.plans_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: post_drafts id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_drafts ALTER COLUMN id SET DEFAULT nextval('public.post_drafts_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: post_metrics id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_metrics ALTER COLUMN id SET DEFAULT nextval('public.post_metrics_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: posts id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.posts ALTER COLUMN id SET DEFAULT nextval('public.posts_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: promo_codes id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_codes ALTER COLUMN id SET DEFAULT nextval('public.promo_codes_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: promo_usages id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_usages ALTER COLUMN id SET DEFAULT nextval('public.promo_usages_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: publish_slots id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.publish_slots ALTER COLUMN id SET DEFAULT nextval('public.publish_slots_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: scheduled_posts id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.scheduled_posts ALTER COLUMN id SET DEFAULT nextval('public.scheduled_posts_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: series id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.series ALTER COLUMN id SET DEFAULT nextval('public.series_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: user_posts id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_posts ALTER COLUMN id SET DEFAULT nextval('public.user_posts_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: user_subscriptions id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_subscriptions ALTER COLUMN id SET DEFAULT nextval('public.user_subscriptions_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: user_transactions id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_transactions ALTER COLUMN id SET DEFAULT nextval('public.user_transactions_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: users id; Type: DEFAULT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass);
|
|
|
|
|
|
--
|
|
-- Name: ai_usage ai_usage_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.ai_usage
|
|
ADD CONSTRAINT ai_usage_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: app_settings app_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.app_settings
|
|
ADD CONSTRAINT app_settings_pkey PRIMARY KEY (key);
|
|
|
|
|
|
--
|
|
-- Name: articles articles_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.articles
|
|
ADD CONSTRAINT articles_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: articles articles_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.articles
|
|
ADD CONSTRAINT articles_slug_key UNIQUE (slug);
|
|
|
|
|
|
--
|
|
-- Name: autogen_settings autogen_settings_category_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.autogen_settings
|
|
ADD CONSTRAINT autogen_settings_category_key UNIQUE (category);
|
|
|
|
|
|
--
|
|
-- Name: autogen_settings autogen_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.autogen_settings
|
|
ADD CONSTRAINT autogen_settings_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: blog_topics blog_topics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.blog_topics
|
|
ADD CONSTRAINT blog_topics_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: categories categories_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.categories
|
|
ADD CONSTRAINT categories_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: categories categories_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.categories
|
|
ADD CONSTRAINT categories_slug_key UNIQUE (slug);
|
|
|
|
|
|
--
|
|
-- Name: channel_schedule channel_schedule_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_schedule
|
|
ADD CONSTRAINT channel_schedule_pkey PRIMARY KEY (channel_id);
|
|
|
|
|
|
--
|
|
-- Name: channel_stats channel_stats_channel_id_captured_at_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_stats
|
|
ADD CONSTRAINT channel_stats_channel_id_captured_at_key UNIQUE (channel_id, captured_at);
|
|
|
|
|
|
--
|
|
-- Name: channel_stats channel_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_stats
|
|
ADD CONSTRAINT channel_stats_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: channel_style channel_style_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_style
|
|
ADD CONSTRAINT channel_style_pkey PRIMARY KEY (channel_id);
|
|
|
|
|
|
--
|
|
-- Name: channel_topics channel_topics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_topics
|
|
ADD CONSTRAINT channel_topics_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: channels channels_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channels
|
|
ADD CONSTRAINT channels_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: content_queue content_queue_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.content_queue
|
|
ADD CONSTRAINT content_queue_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: credit_costs credit_costs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.credit_costs
|
|
ADD CONSTRAINT credit_costs_pkey PRIMARY KEY (operation);
|
|
|
|
|
|
--
|
|
-- Name: editor_notes editor_notes_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.editor_notes
|
|
ADD CONSTRAINT editor_notes_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: generation_jobs generation_jobs_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_jobs
|
|
ADD CONSTRAINT generation_jobs_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: inbox_messages inbox_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.inbox_messages
|
|
ADD CONSTRAINT inbox_messages_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: payment_orders payment_orders_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.payment_orders
|
|
ADD CONSTRAINT payment_orders_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: payment_orders payment_orders_yukassa_payment_id_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.payment_orders
|
|
ADD CONSTRAINT payment_orders_yukassa_payment_id_key UNIQUE (yukassa_payment_id);
|
|
|
|
|
|
--
|
|
-- Name: photo_search_profiles photo_search_profiles_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.photo_search_profiles
|
|
ADD CONSTRAINT photo_search_profiles_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: photo_search_profiles photo_search_profiles_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.photo_search_profiles
|
|
ADD CONSTRAINT photo_search_profiles_slug_key UNIQUE (slug);
|
|
|
|
|
|
--
|
|
-- Name: plans plans_code_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.plans
|
|
ADD CONSTRAINT plans_code_key UNIQUE (code);
|
|
|
|
|
|
--
|
|
-- Name: plans plans_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.plans
|
|
ADD CONSTRAINT plans_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: post_drafts post_drafts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_drafts
|
|
ADD CONSTRAINT post_drafts_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: post_metrics post_metrics_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_metrics
|
|
ADD CONSTRAINT post_metrics_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: posts posts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.posts
|
|
ADD CONSTRAINT posts_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: promo_codes promo_codes_code_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_codes
|
|
ADD CONSTRAINT promo_codes_code_key UNIQUE (code);
|
|
|
|
|
|
--
|
|
-- Name: promo_codes promo_codes_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_codes
|
|
ADD CONSTRAINT promo_codes_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: promo_usages promo_usages_code_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_usages
|
|
ADD CONSTRAINT promo_usages_code_id_user_id_key UNIQUE (code_id, user_id);
|
|
|
|
|
|
--
|
|
-- Name: promo_usages promo_usages_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_usages
|
|
ADD CONSTRAINT promo_usages_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: publish_slots publish_slots_channel_id_slot_hour_slot_minute_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.publish_slots
|
|
ADD CONSTRAINT publish_slots_channel_id_slot_hour_slot_minute_key UNIQUE (channel_id, slot_hour, slot_minute);
|
|
|
|
|
|
--
|
|
-- Name: publish_slots publish_slots_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.publish_slots
|
|
ADD CONSTRAINT publish_slots_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: scheduled_posts scheduled_posts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.scheduled_posts
|
|
ADD CONSTRAINT scheduled_posts_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: series series_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.series
|
|
ADD CONSTRAINT series_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: series series_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.series
|
|
ADD CONSTRAINT series_slug_key UNIQUE (slug);
|
|
|
|
|
|
--
|
|
-- Name: user_balance user_balance_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_balance
|
|
ADD CONSTRAINT user_balance_pkey PRIMARY KEY (user_id);
|
|
|
|
|
|
--
|
|
-- Name: user_posts user_posts_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_posts
|
|
ADD CONSTRAINT user_posts_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: user_subscriptions user_subscriptions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_subscriptions
|
|
ADD CONSTRAINT user_subscriptions_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: user_transactions user_transactions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_transactions
|
|
ADD CONSTRAINT user_transactions_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: users users_api_key_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_api_key_key UNIQUE (api_key);
|
|
|
|
|
|
--
|
|
-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_email_key UNIQUE (email);
|
|
|
|
|
|
--
|
|
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.users
|
|
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
|
|
|
|
|
|
--
|
|
-- Name: ai_usage_created_at_idx; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX ai_usage_created_at_idx ON public.ai_usage USING btree (created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: ai_usage_provider_model_idx; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX ai_usage_provider_model_idx ON public.ai_usage USING btree (provider, model);
|
|
|
|
|
|
--
|
|
-- Name: ai_usage_service_idx; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX ai_usage_service_idx ON public.ai_usage USING btree (service, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_articles_slug; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_articles_slug ON public.articles USING btree (slug);
|
|
|
|
|
|
--
|
|
-- Name: idx_articles_status_pub; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_articles_status_pub ON public.articles USING btree (status, published_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_articles_title_lower; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_articles_title_lower ON public.articles USING btree (lower((title)::text) text_pattern_ops);
|
|
|
|
|
|
--
|
|
-- Name: idx_articles_topic_hash; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_articles_topic_hash ON public.articles USING btree (topic_hash) WHERE (topic_hash IS NOT NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_blog_topics_category; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_blog_topics_category ON public.blog_topics USING btree (category, is_used);
|
|
|
|
|
|
--
|
|
-- Name: idx_blog_topics_unique; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_blog_topics_unique ON public.blog_topics USING btree (category, topic);
|
|
|
|
|
|
--
|
|
-- Name: idx_channel_stats_channel_time; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_channel_stats_channel_time ON public.channel_stats USING btree (channel_id, captured_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_channel_topics_channel; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_channel_topics_channel ON public.channel_topics USING btree (channel_id, is_used, created_at);
|
|
|
|
|
|
--
|
|
-- Name: idx_channels_user; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_channels_user ON public.channels USING btree (user_id);
|
|
|
|
|
|
--
|
|
-- Name: idx_inbox_channel; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_inbox_channel ON public.inbox_messages USING btree (channel_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_inbox_ext; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE UNIQUE INDEX idx_inbox_ext ON public.inbox_messages USING btree (channel_id, external_msg_id) WHERE (external_msg_id IS NOT NULL);
|
|
|
|
|
|
--
|
|
-- Name: idx_inbox_status; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_inbox_status ON public.inbox_messages USING btree (channel_id, status);
|
|
|
|
|
|
--
|
|
-- Name: idx_jobs_status; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_jobs_status ON public.generation_jobs USING btree (status);
|
|
|
|
|
|
--
|
|
-- Name: idx_jobs_user; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_jobs_user ON public.generation_jobs USING btree (user_id);
|
|
|
|
|
|
--
|
|
-- Name: idx_notes_pub; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_notes_pub ON public.editor_notes USING btree (is_published, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_payment_orders_user; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_payment_orders_user ON public.payment_orders USING btree (user_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_post_drafts_channel; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_post_drafts_channel ON public.post_drafts USING btree (channel_id, status, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_post_drafts_user; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_post_drafts_user ON public.post_drafts USING btree (user_id, status);
|
|
|
|
|
|
--
|
|
-- Name: idx_post_metrics_post; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_post_metrics_post ON public.post_metrics USING btree (post_id, captured_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_post_metrics_userpost; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_post_metrics_userpost ON public.post_metrics USING btree (user_post_id, captured_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_posts_channel; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_posts_channel ON public.posts USING btree (channel_id);
|
|
|
|
|
|
--
|
|
-- Name: idx_posts_scheduled; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_posts_scheduled ON public.posts USING btree (scheduled_at) WHERE ((status)::text = 'scheduled'::text);
|
|
|
|
|
|
--
|
|
-- Name: idx_scheduled_posts_channel_article; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_scheduled_posts_channel_article ON public.scheduled_posts USING btree (channel_id, article_id);
|
|
|
|
|
|
--
|
|
-- Name: idx_scheduled_posts_status_at; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_scheduled_posts_status_at ON public.scheduled_posts USING btree (status, scheduled_at);
|
|
|
|
|
|
--
|
|
-- Name: idx_series_slug; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_series_slug ON public.series USING btree (slug);
|
|
|
|
|
|
--
|
|
-- Name: idx_user_posts_channel; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_user_posts_channel ON public.user_posts USING btree (channel_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: idx_user_transactions_user_id; Type: INDEX; Schema: public; Owner: -
|
|
--
|
|
|
|
CREATE INDEX idx_user_transactions_user_id ON public.user_transactions USING btree (user_id, created_at DESC);
|
|
|
|
|
|
--
|
|
-- Name: articles articles_job_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.articles
|
|
ADD CONSTRAINT articles_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.generation_jobs(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: channel_schedule channel_schedule_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_schedule
|
|
ADD CONSTRAINT channel_schedule_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: channel_stats channel_stats_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_stats
|
|
ADD CONSTRAINT channel_stats_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: channel_style channel_style_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_style
|
|
ADD CONSTRAINT channel_style_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: channel_topics channel_topics_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channel_topics
|
|
ADD CONSTRAINT channel_topics_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: channels channels_photo_search_profile_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channels
|
|
ADD CONSTRAINT channels_photo_search_profile_id_fkey FOREIGN KEY (photo_search_profile_id) REFERENCES public.photo_search_profiles(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: channels channels_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.channels
|
|
ADD CONSTRAINT channels_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: content_queue content_queue_article_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.content_queue
|
|
ADD CONSTRAINT content_queue_article_id_fkey FOREIGN KEY (article_id) REFERENCES public.articles(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: generation_jobs generation_jobs_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_jobs
|
|
ADD CONSTRAINT generation_jobs_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: generation_jobs generation_jobs_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.generation_jobs
|
|
ADD CONSTRAINT generation_jobs_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: inbox_messages inbox_messages_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.inbox_messages
|
|
ADD CONSTRAINT inbox_messages_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: payment_orders payment_orders_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.payment_orders
|
|
ADD CONSTRAINT payment_orders_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: post_drafts post_drafts_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_drafts
|
|
ADD CONSTRAINT post_drafts_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: post_drafts post_drafts_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_drafts
|
|
ADD CONSTRAINT post_drafts_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: post_metrics post_metrics_post_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_metrics
|
|
ADD CONSTRAINT post_metrics_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: post_metrics post_metrics_user_post_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.post_metrics
|
|
ADD CONSTRAINT post_metrics_user_post_id_fkey FOREIGN KEY (user_post_id) REFERENCES public.user_posts(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: posts posts_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.posts
|
|
ADD CONSTRAINT posts_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: posts posts_job_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.posts
|
|
ADD CONSTRAINT posts_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.generation_jobs(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: promo_usages promo_usages_code_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_usages
|
|
ADD CONSTRAINT promo_usages_code_id_fkey FOREIGN KEY (code_id) REFERENCES public.promo_codes(id);
|
|
|
|
|
|
--
|
|
-- Name: promo_usages promo_usages_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.promo_usages
|
|
ADD CONSTRAINT promo_usages_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id);
|
|
|
|
|
|
--
|
|
-- Name: publish_slots publish_slots_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.publish_slots
|
|
ADD CONSTRAINT publish_slots_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: scheduled_posts scheduled_posts_article_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.scheduled_posts
|
|
ADD CONSTRAINT scheduled_posts_article_id_fkey FOREIGN KEY (article_id) REFERENCES public.articles(id) ON DELETE SET NULL;
|
|
|
|
|
|
--
|
|
-- Name: scheduled_posts scheduled_posts_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.scheduled_posts
|
|
ADD CONSTRAINT scheduled_posts_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: user_balance user_balance_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_balance
|
|
ADD CONSTRAINT user_balance_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: user_posts user_posts_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_posts
|
|
ADD CONSTRAINT user_posts_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: user_subscriptions user_subscriptions_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_subscriptions
|
|
ADD CONSTRAINT user_subscriptions_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.plans(id);
|
|
|
|
|
|
--
|
|
-- Name: user_subscriptions user_subscriptions_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_subscriptions
|
|
ADD CONSTRAINT user_subscriptions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- Name: user_transactions user_transactions_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: -
|
|
--
|
|
|
|
ALTER TABLE ONLY public.user_transactions
|
|
ADD CONSTRAINT user_transactions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
|
|
|
|
|
--
|
|
-- PostgreSQL database dump complete
|
|
--
|
|
|
|
\unrestrict VhNY3y2jfbhtHWUJNX17PN7SRgHPDQoK22OdEvgq8EbNJ3oFJFZi6W1o1ShNkWQ
|
|
|