-- 清空数据表
do
$$
    declare
        r record;
    begin
        for r in (
            select
                tablename
            from
                pg_tables
            where
                schemaname = 'public'
        ) loop
            execute 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
        end loop;
    end
$$;

-- ====================
-- region 管理员信息
-- ====================

-- admin
drop table if exists admin cascade;
create table admin (
    id               serial primary key,
    username         varchar(255) not null unique,
    password         varchar(255) not null,
    name             varchar(255),
    avatar           varchar(255),
    phone            varchar(255),
    email            varchar(255),
    status           int          not null default 1,
    last_login       timestamp,
    last_login_host  varchar(45),
    last_login_agent varchar(255),
    created_at       timestamp             default current_timestamp,
    updated_at       timestamp             default current_timestamp,
    deleted_at       timestamp
);
create index admin_status_index on admin (status);

-- admin表字段注释
comment on table admin is '管理员表';
comment on column admin.id is '管理员ID';
comment on column admin.username is '用户名';
comment on column admin.password is '密码';
comment on column admin.name is '真实姓名';
comment on column admin.avatar is '头像URL';
comment on column admin.phone is '手机号码';
comment on column admin.email is '邮箱';
comment on column admin.status is '状态：1-正常，0-禁用';
comment on column admin.last_login is '最后登录时间';
comment on column admin.last_login_host is '最后登录地址';
comment on column admin.last_login_agent is '最后登录代理';
comment on column admin.created_at is '创建时间';
comment on column admin.updated_at is '更新时间';
comment on column admin.deleted_at is '删除时间';

-- admin_role
drop table if exists admin_role cascade;
create table admin_role (
    id          serial primary key,
    name        varchar(255) not null unique,
    description varchar(255),
    active      bool      default true,
    sort        int       default 0,
    created_at  timestamp default current_timestamp,
    updated_at  timestamp default current_timestamp,
    deleted_at  timestamp
);

-- admin_role表字段注释
comment on table admin_role is '管理员角色关联表';
comment on column admin_role.id is '管理员角色ID';
comment on column admin_role.name is '角色名称';
comment on column admin_role.description is '角色描述';
comment on column admin_role.active is '是否激活';
comment on column admin_role.sort is '排序';
comment on column admin_role.created_at is '创建时间';
comment on column admin_role.updated_at is '更新时间';
comment on column admin_role.deleted_at is '删除时间';

-- endregion

-- ====================
-- region 用户信息
-- ====================

-- user
drop table if exists "user" cascade;
create table "user" (
    id               serial primary key,
    admin_id         int            references admin (id) --
                                        on update cascade --
                                        on delete set null,
    phone            varchar(255)   not null unique,
    username         varchar(255),
    email            varchar(255),
    password         varchar(255),
    name             varchar(255),
    avatar           varchar(255),
    status           int            not null default 1,
    balance          decimal(12, 2) not null default 0,
    id_type          int            not null default 0,
    id_no            varchar(255),
    id_token         varchar(255),
    contact_qq       varchar(255),
    contact_wechat   varchar(255),
    last_login       timestamp,
    last_login_host  varchar(45),
    last_login_agent varchar(255),
    created_at       timestamp               default current_timestamp,
    updated_at       timestamp               default current_timestamp,
    deleted_at       timestamp
);
create index user_admin_id_index on "user" (admin_id);
create index user_username_index on "user" (username);
create index user_email_index on "user" (email);
create index user_status_index on "user" (status);

-- user表字段注释
comment on table "user" is '用户表';
comment on column "user".id is '用户ID';
comment on column "user".admin_id is '管理员ID';
comment on column "user".password is '用户密码';
comment on column "user".username is '用户名';
comment on column "user".phone is '手机号码';
comment on column "user".name is '真实姓名';
comment on column "user".avatar is '头像URL';
comment on column "user".status is '用户状态：1-正常，0-禁用';
comment on column "user".balance is '账户余额';
comment on column "user".id_type is '认证类型：0-未认证，1-个人认证，2-企业认证';
comment on column "user".id_no is '身份证号或营业执照号';
comment on column "user".id_token is '身份验证标识';
comment on column "user".contact_qq is 'QQ联系方式';
comment on column "user".contact_wechat is '微信联系方式';
comment on column "user".last_login is '最后登录时间';
comment on column "user".last_login_host is '最后登录地址';
comment on column "user".last_login_agent is '最后登录代理';
comment on column "user".created_at is '创建时间';
comment on column "user".updated_at is '更新时间';
comment on column "user".deleted_at is '删除时间';

-- user_role
drop table if exists user_role cascade;
create table user_role (
    id          serial primary key,
    name        varchar(255) not null unique,
    description varchar(255),
    active      bool      default true,
    sort        int       default 0,
    created_at  timestamp default current_timestamp,
    updated_at  timestamp default current_timestamp,
    deleted_at  timestamp
);

-- user_role表字段注释
comment on table user_role is '用户角色表';
comment on column user_role.id is '角色ID';
comment on column user_role.name is '角色名称';
comment on column user_role.description is '角色描述';
comment on column user_role.active is '是否激活';
comment on column user_role.sort is '排序';
comment on column user_role.created_at is '创建时间';
comment on column user_role.updated_at is '更新时间';
comment on column user_role.deleted_at is '删除时间';

-- endregion

-- ====================
-- region 客户端信息
-- ====================

drop table if exists client cascade;
create table client (
    id            serial primary key,
    client_id     varchar(255) not null unique,
    client_secret varchar(255) not null,
    redirect_uri  varchar(255),
    grant_code    bool         not null default false,
    grant_client  bool         not null default false,
    grant_refresh bool         not null default false,
    spec          int          not null,
    name          varchar(255) not null,
    icon          varchar(255),
    status        int          not null default 1,
    created_at    timestamp             default current_timestamp,
    updated_at    timestamp             default current_timestamp,
    deleted_at    timestamp
);

create index client_client_id_index on client (client_id);
create index client_name_index on client (name);
create index client_status_index on client (status);

-- client表字段注释
comment on table client is '客户端表';
comment on column client.id is '客户端ID';
comment on column client.client_id is 'OAuth2客户端标识符';
comment on column client.client_secret is 'OAuth2客户端密钥';
comment on column client.redirect_uri is 'OAuth2 重定向URI';
comment on column client.grant_code is '允许授权码授予';
comment on column client.grant_client is '允许客户端凭证授予';
comment on column client.grant_refresh is '允许刷新令牌授予';
comment on column client.spec is '安全规范：0-web，1-native，2-browser';
comment on column client.name is '名称';
comment on column client.icon is '图标URL';
comment on column client.status is '状态：1-正常，0-禁用';
comment on column client.created_at is '创建时间';
comment on column client.updated_at is '更新时间';
comment on column client.deleted_at is '删除时间';

-- endregion

-- ====================
-- region 权限信息
-- ====================

-- permission
drop table if exists permission cascade;
create table permission (
    id          serial primary key,
    parent_id   int references permission (id)
        on update cascade
        on delete cascade,
    name        varchar(255) not null unique,
    description varchar(255),
    created_at  timestamp default current_timestamp,
    updated_at  timestamp default current_timestamp,
    deleted_at  timestamp
);
create index permission_parent_id_index on permission (parent_id);
create index permission_name_index on permission (name);

-- permission表字段注释
comment on table permission is '权限表';
comment on column permission.id is '权限ID';
comment on column permission.parent_id is '父权限ID';
comment on column permission.name is '权限名称';
comment on column permission.description is '权限描述';
comment on column permission.created_at is '创建时间';
comment on column permission.updated_at is '更新时间';
comment on column permission.deleted_at is '删除时间';

-- user_role_link
drop table if exists user_role_link cascade;
create table user_role_link (
    id         serial primary key,
    user_id    int not null references "user" (id)
        on update cascade
        on delete cascade,
    role_id    int not null references user_role (id)
        on update cascade
        on delete cascade,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);
create index user_role_link_user_id_index on user_role_link (user_id);
create index user_role_link_role_id_index on user_role_link (role_id);

-- user_role_link表字段注释
comment on table user_role_link is '用户角色关联表';
comment on column user_role_link.id is '关联ID';
comment on column user_role_link.user_id is '用户ID';
comment on column user_role_link.role_id is '角色ID';
comment on column user_role_link.created_at is '创建时间';
comment on column user_role_link.updated_at is '更新时间';
comment on column user_role_link.deleted_at is '删除时间';

-- admin_role_link
drop table if exists admin_role_link cascade;
create table admin_role_link (
    id         serial primary key,
    admin_id   int not null references admin (id)
        on update cascade
        on delete cascade,
    role_id    int not null references admin_role (id)
        on update cascade
        on delete cascade,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);
create index admin_role_link_admin_id_index on admin_role_link (admin_id);
create index admin_role_link_role_id_index on admin_role_link (role_id);

-- admin_role_link表字段注释
comment on table admin_role_link is '管理员角色关联表';
comment on column admin_role_link.id is '关联ID';
comment on column admin_role_link.admin_id is '管理员ID';
comment on column admin_role_link.role_id is '角色ID';
comment on column admin_role_link.created_at is '创建时间';
comment on column admin_role_link.updated_at is '更新时间';
comment on column admin_role_link.deleted_at is '删除时间';

-- user_role_permission_link
drop table if exists user_role_permission_link cascade;
create table user_role_permission_link (
    id            serial primary key,
    role_id       int not null references user_role (id)
        on update cascade
        on delete cascade,
    permission_id int not null references permission (id)
        on update cascade
        on delete cascade,
    created_at    timestamp default current_timestamp,
    updated_at    timestamp default current_timestamp,
    deleted_at    timestamp
);
create index user_role_permission_link_role_id_index on user_role_permission_link (role_id);
create index user_role_permission_link_permission_id_index on user_role_permission_link (permission_id);

-- user_role_permission_link表字段注释
comment on table user_role_permission_link is '用户角色权限关联表';
comment on column user_role_permission_link.id is '关联ID';
comment on column user_role_permission_link.role_id is '角色ID';
comment on column user_role_permission_link.permission_id is '权限ID';
comment on column user_role_permission_link.created_at is '创建时间';
comment on column user_role_permission_link.updated_at is '更新时间';
comment on column user_role_permission_link.deleted_at is '删除时间';

-- admin_role_permission_link
drop table if exists admin_role_permission_link cascade;
create table admin_role_permission_link (
    id            serial primary key,
    role_id       int not null references admin_role (id)
        on update cascade
        on delete cascade,
    permission_id int not null references permission (id)
        on update cascade
        on delete cascade,
    created_at    timestamp default current_timestamp,
    updated_at    timestamp default current_timestamp,
    deleted_at    timestamp
);
create index admin_role_permission_link_role_id_index on admin_role_permission_link (role_id);
create index admin_role_permission_link_permission_id_index on admin_role_permission_link (permission_id);

-- admin_role_permission_link表字段注释
comment on table admin_role_permission_link is '管理员角色权限关联表';
comment on column admin_role_permission_link.id is '关联ID';
comment on column admin_role_permission_link.role_id is '角色ID';
comment on column admin_role_permission_link.permission_id is '权限ID';
comment on column admin_role_permission_link.created_at is '创建时间';
comment on column admin_role_permission_link.updated_at is '更新时间';
comment on column admin_role_permission_link.deleted_at is '删除时间';

-- client_permission_link
drop table if exists client_permission_link cascade;
create table client_permission_link (
    id            serial primary key,
    client_id     int not null references client (id)
        on update cascade
        on delete cascade,
    permission_id int not null references permission (id)
        on update cascade
        on delete cascade,
    created_at    timestamp default current_timestamp,
    updated_at    timestamp default current_timestamp,
    deleted_at    timestamp
);
create index client_permission_link_client_id_index on client_permission_link (client_id);
create index client_permission_link_permission_id_index on client_permission_link (permission_id);

-- client_permission_link表字段注释
comment on table client_permission_link is '客户端权限关联表';
comment on column client_permission_link.id is '关联ID';
comment on column client_permission_link.client_id is '客户端ID';
comment on column client_permission_link.permission_id is '权限ID';
comment on column client_permission_link.created_at is '创建时间';
comment on column client_permission_link.updated_at is '更新时间';
comment on column client_permission_link.deleted_at is '删除时间';

-- endregion

-- ====================
-- region 节点信息
-- ====================

-- proxy
drop table if exists proxy cascade;
create table proxy (
    id         serial primary key,
    version    int          not null,
    name       varchar(255) not null unique,
    host       varchar(255) not null,
    type       int          not null default 0,
    created_at timestamp             default current_timestamp,
    updated_at timestamp             default current_timestamp,
    deleted_at timestamp
);
create index proxy_name_index on proxy (name);
create index proxy_host_index on proxy (host);

-- proxy表字段注释
comment on table proxy is '代理服务表';
comment on column proxy.id is '代理服务ID';
comment on column proxy.version is '代理服务版本';
comment on column proxy.name is '代理服务名称';
comment on column proxy.host is '代理服务地址';
comment on column proxy.type is '代理服务类型：0-自有，1-三方';
comment on column proxy.created_at is '创建时间';
comment on column proxy.updated_at is '更新时间';
comment on column proxy.deleted_at is '删除时间';

-- node
drop table if exists node cascade;
create table node (
    id         serial primary key,
    version    int          not null,
    name       varchar(255) not null unique,
    host       varchar(255) not null,
    isp        varchar(255) not null,
    prov       varchar(255) not null,
    city       varchar(255) not null,
    proxy_id   int references proxy (id)
        on update cascade
        on delete cascade,
    proxy_port int,
    status     int          not null default 0,
    rtt        int                   default 0,
    loss       int                   default 0,
    created_at timestamp             default current_timestamp,
    updated_at timestamp             default current_timestamp,
    deleted_at timestamp
);
create index node_isp_index on node (isp);
create index node_prov_index on node (prov);
create index node_city_index on node (city);
create index node_proxy_id_index on node (proxy_id);

-- node表字段注释
comment on table node is '节点表';
comment on column node.id is '节点ID';
comment on column node.version is '节点版本';
comment on column node.name is '节点名称';
comment on column node.host is '节点地址';
comment on column node.isp is '运营商';
comment on column node.prov is '省份';
comment on column node.city is '城市';
comment on column node.proxy_id is '代理ID';
comment on column node.proxy_port is '代理端口';
comment on column node.status is '节点状态：1-正常，0-离线';
comment on column node.rtt is '延迟';
comment on column node.loss is '丢包率';
comment on column node.created_at is '创建时间';
comment on column node.updated_at is '更新时间';
comment on column node.deleted_at is '删除时间';

-- whitelist
drop table if exists whitelist cascade;
create table whitelist (
    id         serial primary key,
    user_id    int         not null references "user" (id)
        on update cascade
        on delete cascade,
    host       varchar(45) not null,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);
create index whitelist_user_id_index on whitelist (user_id);
create index whitelist_host_index on whitelist (host);

-- whitelist表字段注释
comment on table whitelist is '白名单表';
comment on column whitelist.id is '白名单ID';
comment on column whitelist.user_id is '用户ID';
comment on column whitelist.host is 'IP地址';
comment on column whitelist.created_at is '创建时间';
comment on column whitelist.updated_at is '更新时间';
comment on column whitelist.deleted_at is '删除时间';

-- channel
drop table if exists channel cascade;
create table channel (
    id         serial primary key,
    user_id    int       not null references "user" (id)
        on update cascade
        on delete cascade,
    proxy_id   int       not null references proxy (id) --
        on update cascade                               --
        on delete set null,
    node_id    int       references node (id)           --
                             on update cascade          --
                             on delete set null,
    proxy_port int       not null,
    protocol   varchar(255),
    user_host  varchar(255),
    node_host  varchar(255),
    auth_ip    bool      not null default false,
    auth_pass  bool      not null default false,
    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 channel (user_id);
create index channel_proxy_id_index on channel (proxy_id);
create index channel_node_id_index on channel (node_id);
create index channel_user_host_index on channel (user_host);
create index channel_proxy_port_index on channel (proxy_port);
create index channel_node_host_index on channel (node_host);
create index channel_expiration_index on channel (expiration);

-- channel表字段注释
comment on table channel is '通道表';
comment on column channel.id is '通道ID';
comment on column channel.user_id is '用户ID';
comment on column channel.proxy_id is '代理ID';
comment on column channel.node_id is '节点ID';
comment on column channel.user_host is '用户地址';
comment on column channel.proxy_port is '转发端口';
comment on column channel.node_host is '节点地址';
comment on column channel.auth_ip is 'IP认证';
comment on column channel.auth_pass is '密码认证';
comment on column channel.protocol is '协议';
comment on column channel.username is '用户名';
comment on column channel.password is '密码';
comment on column channel.expiration is '过期时间';
comment on column channel.created_at is '创建时间';
comment on column channel.updated_at is '更新时间';
comment on column channel.deleted_at is '删除时间';

-- endregion

-- ====================
-- region 产品信息
-- ====================

-- product
drop table if exists product cascade;
create table product (
    id          serial primary key,
    code        varchar(255) not null unique,
    name        varchar(255) not null,
    description varchar(255),
    sort        int          not null default 0,
    status      int          not null default 1,
    created_at  timestamp             default current_timestamp,
    updated_at  timestamp             default current_timestamp,
    deleted_at  timestamp
);

-- product表字段注释
comment on table product is '产品表';
comment on column product.id is '产品ID';
comment on column product.code is '产品代码';
comment on column product.name is '产品名称';
comment on column product.description is '产品描述';
comment on column product.sort is '排序';
comment on column product.status is '产品状态：1-正常，0-禁用';
comment on column product.created_at is '创建时间';
comment on column product.updated_at is '更新时间';
comment on column product.deleted_at is '删除时间';

-- resource
drop table if exists resource cascade;
create table resource (
    id         serial primary key,
    user_id    int not null references "user" (id)
        on update cascade
        on delete cascade,
    active     bool      default true,
    created_at timestamp default current_timestamp,
    updated_at timestamp default current_timestamp,
    deleted_at timestamp
);
create index resource_user_id_index on resource (user_id);
create index resource_active_index on resource (active);

-- resource表字段注释
comment on table resource is '套餐表';
comment on column resource.id is '套餐ID';
comment on column resource.user_id is '用户ID';
comment on column resource.active is '套餐状态';
comment on column resource.created_at is '创建时间';
comment on column resource.updated_at is '更新时间';
comment on column resource.deleted_at is '删除时间';

-- resource_pss 
drop table if exists resource_pss cascade;
create table resource_pss (
    id          serial primary key,
    resource_id int not null references resource (id)
        on update cascade
        on delete cascade,
    type        int,
    live        int,
    quota       int,
    used        int,
    expire      timestamp,
    daily_limit int,
    daily_used  int,
    daily_last  timestamp,
    created_at  timestamp default current_timestamp,
    updated_at  timestamp default current_timestamp,
    deleted_at  timestamp
);
create index resource_pss_resource_id_index on resource_pss (resource_id);

-- resource_pss表字段注释
comment on table resource_pss is '动态代理套餐表';
comment on column resource_pss.id is 'ID';
comment on column resource_pss.resource_id is '套餐ID';
comment on column resource_pss.type is '套餐类型：1-包时，2-包量';
comment on column resource_pss.live is '可用时长(秒)';
comment on column resource_pss.quota is '配额数量';
comment on column resource_pss.used is '已用数量';
comment on column resource_pss.expire is '过期时间';
comment on column resource_pss.daily_limit is '每日限制';
comment on column resource_pss.daily_used is '今日已用数量';
comment on column resource_pss.daily_last is '今日最后使用时间';
comment on column resource_pss.created_at is '创建时间';
comment on column resource_pss.updated_at is '更新时间';
comment on column resource_pss.deleted_at is '删除时间';

-- resource_psr 
drop table if exists resource_psr cascade;
create table resource_psr (
    id          serial primary key,
    resource_id int not null references resource (id)
        on update cascade
        on delete cascade,
    live        int,
    conn        int,
    expire      timestamp,
    used        bool,
    created_at  timestamp default current_timestamp,
    updated_at  timestamp default current_timestamp,
    deleted_at  timestamp
);
create index resource_psr_resource_id_index on resource_psr (resource_id);

-- resource_psr表字段注释
comment on table resource_psr is '隧道代理套餐表';
comment on column resource_psr.id is 'ID';
comment on column resource_psr.resource_id is '套餐ID';
comment on column resource_psr.live is '轮换周期(秒)';
comment on column resource_psr.conn is '最大连接数';
comment on column resource_psr.expire is '过期时间';
comment on column resource_psr.used is '是否已使用';
comment on column resource_psr.created_at is '创建时间';
comment on column resource_psr.updated_at is '更新时间';
comment on column resource_psr.deleted_at is '删除时间';

-- resource_pps 
drop table if exists resource_pps cascade;
create table resource_pps (
    id          serial primary key,
    resource_id int not null references resource (id)
        on update cascade
        on delete cascade,
    created_at  timestamp default current_timestamp,
    updated_at  timestamp default current_timestamp,
    deleted_at  timestamp
);
create index resource_pps_resource_id_index on resource_pps (resource_id);

-- resource_pps表字段注释
comment on table resource_pps is '独享代理套餐表';
comment on column resource_pps.id is 'ID';
comment on column resource_pps.resource_id is '套餐ID';
comment on column resource_pps.created_at is '创建时间';
comment on column resource_pps.updated_at is '更新时间';
comment on column resource_pps.deleted_at is '删除时间';

-- endregion

-- ====================
-- region 订单信息
-- ====================

-- trade
drop table if exists trade cascade;
create table trade (
    id         serial primary key,
    user_id    int            not null references "user" (id)
        on update cascade
        on delete cascade,
    inner_no   varchar(255)   not null unique,
    outer_no   varchar(255)   not null unique,
    subject    varchar(255)   not null,
    remark     varchar(255),
    amount     decimal(12, 2) not null default 0,
    payment    decimal(12, 2) not null default 0,
    method     int            not null default 0,
    status     int            not null default 0,
    created_at timestamp               default current_timestamp,
    updated_at timestamp               default current_timestamp,
    deleted_at timestamp
);
create index trade_user_id_index on trade (user_id);
create index trade_status_index on trade (status);

-- trade表字段注释
comment on table trade is '订单表';
comment on column trade.id is '订单ID';
comment on column trade.user_id is '用户ID';
comment on column trade.inner_no is '内部订单号';
comment on column trade.outer_no is '外部订单号';
comment on column trade.subject is '订单主题';
comment on column trade.remark is '订单备注';
comment on column trade.amount is '订单总金额';
comment on column trade.payment is '支付金额';
comment on column trade.method is '支付方式：1-支付宝，2-微信';
comment on column trade.status is '订单状态：0-待支付，1-已支付，2-已取消，3-已退款';
comment on column trade.created_at is '创建时间';
comment on column trade.updated_at is '更新时间';
comment on column trade.deleted_at is '删除时间';

-- bill
drop table if exists bill cascade;
create table bill (
    id         serial primary key,
    order_id   int            not null references trade (id)
        on update cascade
        on delete cascade,
    user_id    int            not null references "user" (id)
        on update cascade
        on delete cascade,
    product_id int            references product (id) --
                                  on update cascade   --
                                  on delete set null,
    info       varchar(255),
    count      int                     default 0,
    price      decimal(12, 2) not null default 0,
    amount     decimal(12, 2) not null default 0,
    payment    decimal(12, 2) not null default 0,
    created_at timestamp               default current_timestamp,
    updated_at timestamp               default current_timestamp,
    deleted_at timestamp
);
create index bill_order_id_index on bill (order_id);
create index bill_product_id_index on bill (product_id);

-- bill表字段注释
comment on table bill is '账单表';
comment on column bill.id is '账单ID';
comment on column bill.order_id is '订单ID';
comment on column bill.user_id is '用户ID';
comment on column bill.product_id is '产品ID';
comment on column bill.info is '产品可读信息';
comment on column bill.count is '购买数量';
comment on column bill.price is '单价';
comment on column bill.amount is '总金额';
comment on column bill.payment is '支付金额';
comment on column bill.created_at is '创建时间';
comment on column bill.updated_at is '更新时间';
comment on column bill.deleted_at is '删除时间';

-- refund
drop table if exists refund cascade;
create table refund (
    id         serial primary key,
    order_id   int            not null references trade (id)
        on update cascade
        on delete cascade,
    product_id int            references product (id) --
                                  on update cascade   --
                                  on delete set null,
    amount     decimal(12, 2) not null default 0,
    created_at timestamp               default current_timestamp,
    updated_at timestamp               default current_timestamp,
    deleted_at timestamp
);
create index refund_order_id_index on refund (order_id);
create index refund_product_id_index on refund (product_id);

-- refund表字段注释
comment on table refund is '退款记录表';
comment on column refund.id is '退款ID';
comment on column refund.order_id is '订单ID';
comment on column refund.product_id is '产品ID';
comment on column refund.amount is '退款金额';
comment on column refund.created_at is '创建时间';
comment on column refund.updated_at is '更新时间';
comment on column refund.deleted_at is '删除时间';

-- endregion