create table if not exists guilds
(
    id             bigint not null primary key,
    channels       jsonb not null,
    banned_systems text[] not null,
    key_roles      bigint[] not null
);

create table if not exists ignored_messages
(
    id bigint not null primary key
);

create table if not exists invites
(
    code     text not null primary key,
    guild_id bigint not null,
    name     text not null
);

create index if not exists ix_invites_guild_id on invites (guild_id);

create table if not exists messages
(
    id              bigint not null primary key,
    original_id     bigint,
    user_id         bigint not null,
    channel_id      bigint not null,
    guild_id        bigint not null,
    member          text,
    system          text,
    username        bytea not null,
    content         bytea not null,
    metadata        bytea,
    attachment_size integer not null
);

create table if not exists watchlists
(
    guild_id     bigint not null,
    user_id      bigint not null,
    added_at     timestamp with time zone default now() not null,
    moderator_id bigint not null,
    reason       text not null,
    
    primary key (guild_id, user_id)
);

create table if not exists api_tokens
(
    id              integer generated by default as identity primary key,
    dashboard_token text not null,
    user_id         text not null,
    access_token    text not null,
    refresh_token   text,
    expires_at      timestamp with time zone not null
);

-- Finally, drop the EFCore migrations table.
drop table if exists "__EFMigrationsHistory";
