47 lines
1.7 KiB
SQL
47 lines
1.7 KiB
SQL
-- File Share Database Schema
|
|
-- MariaDB 10.3+
|
|
|
|
CREATE DATABASE IF NOT EXISTS file_share
|
|
CHARACTER SET utf8mb4
|
|
COLLATE utf8mb4_unicode_ci;
|
|
|
|
USE file_share;
|
|
|
|
CREATE TABLE accounts (
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
username VARCHAR(128) NOT NULL UNIQUE,
|
|
api_key VARCHAR(128) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
role VARCHAR(16) NOT NULL DEFAULT 'user',
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE files (
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
account_id BIGINT UNSIGNED NOT NULL,
|
|
filename VARCHAR(512) NOT NULL,
|
|
mime_type VARCHAR(256) NOT NULL,
|
|
size BIGINT UNSIGNED NOT NULL,
|
|
sha256 CHAR(64) NOT NULL,
|
|
data LONGBLOB NOT NULL,
|
|
uploaded_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (account_id) REFERENCES accounts (id) ON DELETE CASCADE,
|
|
INDEX idx_account (account_id)
|
|
);
|
|
|
|
CREATE TABLE download_otp (
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
file_id BIGINT UNSIGNED NOT NULL,
|
|
code CHAR(5) NOT NULL,
|
|
used TINYINT(1) NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
expires_at TIMESTAMP NOT NULL,
|
|
INDEX idx_code (code),
|
|
INDEX idx_expires (expires_at),
|
|
FOREIGN KEY (file_id) REFERENCES files (id) ON DELETE CASCADE
|
|
);
|
|
|
|
-- Seed data
|
|
INSERT INTO accounts (username, api_key, password_hash, role)
|
|
VALUES ('kamma', 'kamma-api-key-initial-2026', '$2a$10$fUslPcoWmwNyFLvY0pM5GONpdVa2XTALvJPybuIP/MEKccdndjQIq', 'admin');
|