CREATE TABLE accounts (
    username VARCHAR(32) NOT NULL PRIMARY KEY,
    password VARCHAR(64) NOT NULL,
    owner BOOLEAN NOT NULL DEFAULT false,
    permissions JSONB NOT NULL DEFAULT '0'::jsonb,
    created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE boards (
    id VARCHAR(16) NOT NULL PRIMARY KEY,
    name VARCHAR(32) NOT NULL,
    description VARCHAR(128) NOT NULL,
    banners JSONB NOT NULL,
    config JSONB NOT NULL,
    created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE bans (
    id SERIAL NOT NULL PRIMARY KEY,
    ip_range INET NOT NULL,
    reason TEXT NOT NULL,
    board VARCHAR(16) DEFAULT NULL REFERENCES boards(id),
    issued_by VARCHAR(32) NOT NULL REFERENCES accounts(username),
    appealable BOOLEAN NOT NULL DEFAULT true,
    appeal TEXT DEFAULT NULL,
    expires TIMESTAMPTZ DEFAULT NULL,
    created TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO accounts (username, password, owner, permissions) VALUES ('admin', '$2y$10$XcxAe19B1eWC15sfnDRyiuiNLZIhdL7PMTnTmtTfglJIz0zOpN3oa', true, '16383'::jsonb);
