78 lines
2.8 KiB
JavaScript
78 lines
2.8 KiB
JavaScript
import db from "./db.js";
|
|
|
|
async function createUsersTable() {
|
|
await db.query(`
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
username VARCHAR(50) NOT NULL UNIQUE,
|
|
name VARCHAR(120) NOT NULL,
|
|
email VARCHAR(120) NOT NULL UNIQUE,
|
|
is_admin TINYINT(1) NOT NULL DEFAULT 0,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
`);
|
|
|
|
const [columns] = await db.query(`SHOW COLUMNS FROM users LIKE 'is_admin'`);
|
|
if (columns.length === 0) {
|
|
await db.query(`ALTER TABLE users ADD COLUMN is_admin TINYINT(1) NOT NULL DEFAULT 0 AFTER email`);
|
|
}
|
|
}
|
|
|
|
async function ensureColumn(table, column, definition) {
|
|
const [columns] = await db.query(`SHOW COLUMNS FROM ${table} LIKE ?`, [column]);
|
|
if (columns.length === 0) {
|
|
await db.query(`ALTER TABLE ${table} ADD COLUMN ${definition}`);
|
|
}
|
|
}
|
|
|
|
async function createLicensesTable() {
|
|
await db.query(`
|
|
CREATE TABLE IF NOT EXISTS licenses (
|
|
id CHAR(36) NOT NULL PRIMARY KEY,
|
|
user_id INT UNSIGNED NOT NULL,
|
|
license_key VARCHAR(64) NOT NULL UNIQUE,
|
|
label VARCHAR(255),
|
|
note TEXT,
|
|
repo_provider VARCHAR(32) NOT NULL,
|
|
repo_name VARCHAR(255) NOT NULL,
|
|
repo_base_url VARCHAR(255),
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
last_version_check_at DATETIME NULL,
|
|
last_used_version VARCHAR(64) NULL,
|
|
primary_hostname VARCHAR(255) NULL,
|
|
primary_hostname_normalized VARCHAR(255) NULL,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
`);
|
|
|
|
await ensureColumn(
|
|
"licenses",
|
|
"last_used_version",
|
|
"last_used_version VARCHAR(64) NULL AFTER last_version_check_at"
|
|
);
|
|
}
|
|
|
|
async function createLicenseHostnamesTable() {
|
|
await db.query(`
|
|
CREATE TABLE IF NOT EXISTS license_hostnames (
|
|
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
license_id CHAR(36) NOT NULL,
|
|
hostname VARCHAR(255) NOT NULL,
|
|
normalized VARCHAR(255) NOT NULL,
|
|
first_seen_at DATETIME NOT NULL,
|
|
last_seen_at DATETIME NOT NULL,
|
|
hits INT UNSIGNED NOT NULL DEFAULT 1,
|
|
UNIQUE KEY unique_license_host (license_id, normalized),
|
|
FOREIGN KEY (license_id) REFERENCES licenses(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
`);
|
|
}
|
|
|
|
export async function ensureSchema() {
|
|
await createUsersTable();
|
|
await createLicensesTable();
|
|
await createLicenseHostnamesTable();
|
|
}
|