-- Posts (Discord)
CREATE TABLE discord_channels(
  channel_id text NOT NULL,
  server_id text NOT NULL,
  name text NOT NULL,
  parent_channel_id text NULL,
  topic text NULL,
  theme_color text NULL,
  is_nsfw bool NOT NULL,
  position int NOT NULL DEFAULT 0,
  icon_emoji text NULL,
  type int NOT NULL DEFAULT 0,
  CONSTRAINT discord_channels_pkey PRIMARY KEY (channel_id)
);

CREATE TABLE discord_posts(
  "id" varchar(255) NOT NULL,
  "author" jsonb NOT NULL,
  "server" varchar(255) NOT NULL,
  "channel" varchar(255) NOT NULL,
  "content" text NOT NULL DEFAULT '',
  "added" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  "published" timestamp,
  "edited" timestamp,
  "embeds" jsonb[] NOT NULL,
  "mentions" jsonb[] NOT NULL,
  "attachments" jsonb[] NOT NULL,
  PRIMARY KEY (id, SERVER, channel)
);

CREATE TABLE discord_posts_revisions(
  revision_id serial4 NOT NULL,
  id varchar(255) NOT NULL,
  author jsonb NOT NULL,
  "server" varchar(255) NOT NULL,
  channel varchar(255) NOT NULL,
  "content" text NOT NULL DEFAULT ''::text,
  added timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  published timestamp NULL,
  edited timestamp NULL,
  embeds _jsonb NOT NULL,
  mentions _jsonb NOT NULL,
  attachments _jsonb NOT NULL,
  CONSTRAINT discord_posts_revisions_pkey PRIMARY KEY (revision_id)
);

CREATE INDEX discord_channels_server_id_idx ON discord_channels USING btree(server_id);

CREATE INDEX discord_channels_parent_channel_id_idx ON discord_channels USING btree(parent_channel_id);

CREATE INDEX discord_id_idx ON discord_posts USING HASH ("id");

CREATE INDEX server_idx ON discord_posts USING HASH ("server");

CREATE INDEX discord_posts_server_channel_idx ON discord_posts USING btree(SERVER, channel);

CREATE INDEX discord_posts_channel_published_idx ON discord_posts USING btree(channel, published);

CREATE INDEX discord_posts_revisions_id_idx ON public.discord_posts_revisions USING btree(id);
