CREATE TABLE IF NOT EXISTS users (
    id INT(69) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS posts (
    id INT(69) PRIMARY KEY AUTO_INCREMENT,
    file_name VARCHAR(255) NOT NULL UNIQUE,
    author_id INT(69) NOT NULL,
    description TEXT NOT NULL,
    alt TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS groups (
    id INT(69) PRIMARY KEY AUTO_INCREMENT,
    author_id INT(69) NOT NULL,
    name VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS permissions (
    id INT(69) PRIMARY KEY AUTO_INCREMENT,
    user_id INT(69) NOT NULL,
    admin BOOLEAN NOT NULL DEFAULT FALSE,
    create_posts BOOLEAN NOT NULL DEFAULT TRUE,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS devices (
    id INT(69) PRIMARY KEY AUTO_INCREMENT,
    user_id INT(69) NOT NULL,
    device_id VARCHAR(255) NOT NULL,
    cookie VARCHAR(255) NOT NULL,
    ip VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS tokens (
    id INT(69) PRIMARY KEY AUTO_INCREMENT,
    token VARCHAR(255) NOT NULL UNIQUE,
    is_used BOOLEAN NOT NULL DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS logs (
    id INT(69) PRIMARY KEY AUTO_INCREMENT,
    ip VARCHAR(255) NOT NULL,
    user_id INT(69) DEFAULT NULL,
    code INT(69) NOT NULL,
    note TEXT DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS bans (
    id INT(69) PRIMARY KEY AUTO_INCREMENT,
    ip VARCHAR(255) NOT NULL,
    code INT(69) NOT NULL,
    note TEXT DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
