-- nodes
drop table if exists nodes cascade;
create table nodes (
    id         serial primary key,
    name       varchar(255) not null unique,
    version    int          not null,
    fwd_port   int          not null,
    provider   varchar(255) not null,
    location   varchar(255) not null,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);
create index devices_provider_index on nodes (provider);
create index devices_location_index on nodes (location);

-- users
drop table if exists users cascade;
create table users (
    id         serial primary key,
    password   varchar(255) not null,
    username   varchar(255) not null unique,
    email      varchar(255) not null unique,
    phone      varchar(255) not null unique,
    name       varchar(255) not null,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);

-- user_ips
drop table if exists user_ips cascade;
create table user_ips (
    id         serial primary key,
    user_id    int          not null references users (id)
        on update cascade
        on delete cascade,
    ip_address varchar(255) not null,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);
create index user_ips_user_id_index on user_ips (user_id);
create index user_ips_ip_address_index on user_ips (ip_address);

-- channel
drop table if exists channels cascade;
create table channels (
    id         serial primary key,
    user_id    int       not null references users (id)
        on update cascade
        on delete cascade,
    node_id    int       not null references nodes (id) --
        on update cascade                               --
        on delete set null,                             -- 节点删除后，用户侧需要保留提取记录
    node_port  int,
    protocol   varchar(255),
    auth_ip    bool,
    auth_pass  bool,
    username   varchar(255) unique,
    password   varchar(255),
    expiration timestamp not null,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);
create index channel_user_id_index on channels (user_id);
create index channel_node_id_index on channels (node_id);
create index channel_username_index on channels (username);

-- ====================
-- 填充数据
-- ====================


