file-share/ddl/schema.sql
2026-05-22 17:42:38 +02:00

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');