You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
6.4 KiB
168 lines
6.4 KiB
CREATE TABLE IF NOT EXISTS users ( |
|
id INT AUTO_INCREMENT PRIMARY KEY, |
|
portal_user_id INT NULL, |
|
email VARCHAR(255) NOT NULL UNIQUE, |
|
display_name VARCHAR(255) NULL, |
|
is_active TINYINT(1) NOT NULL DEFAULT 1, |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
last_login_at DATETIME NULL |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS tenants ( |
|
id INT AUTO_INCREMENT PRIMARY KEY, |
|
owner_user_id INT NOT NULL, |
|
slug VARCHAR(100) NOT NULL UNIQUE, |
|
storage_root VARCHAR(500) NOT NULL, |
|
service_status VARCHAR(50) NOT NULL DEFAULT 'active', |
|
retention_mode VARCHAR(50) NOT NULL DEFAULT 'standard', |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
CONSTRAINT fk_tenants_owner FOREIGN KEY (owner_user_id) REFERENCES users(id) |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS devices ( |
|
id INT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NOT NULL, |
|
device_name VARCHAR(100) NOT NULL, |
|
device_type VARCHAR(50) NOT NULL, |
|
relative_path VARCHAR(255) NOT NULL, |
|
is_active TINYINT(1) NOT NULL DEFAULT 1, |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
CONSTRAINT uq_devices_tenant_name UNIQUE (tenant_id, device_name), |
|
CONSTRAINT fk_devices_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id) |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS files ( |
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NOT NULL, |
|
device_id INT NOT NULL, |
|
parent_file_id BIGINT NULL, |
|
file_kind VARCHAR(20) NOT NULL, |
|
relative_path VARCHAR(1000) NOT NULL, |
|
directory_path VARCHAR(1000) NOT NULL, |
|
original_filename VARCHAR(255) NOT NULL, |
|
display_filename VARCHAR(255) NULL, |
|
basename VARCHAR(255) NOT NULL, |
|
extension VARCHAR(50) NOT NULL, |
|
mime_type VARCHAR(255) NULL, |
|
size_bytes BIGINT NOT NULL DEFAULT 0, |
|
sha256 CHAR(64) NULL, |
|
capture_date DATETIME NULL, |
|
uploaded_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
is_immutable TINYINT(1) NOT NULL DEFAULT 1, |
|
is_deleted TINYINT(1) NOT NULL DEFAULT 0, |
|
deleted_at DATETIME NULL, |
|
CONSTRAINT fk_files_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id), |
|
CONSTRAINT fk_files_device FOREIGN KEY (device_id) REFERENCES devices(id), |
|
CONSTRAINT fk_files_parent FOREIGN KEY (parent_file_id) REFERENCES files(id) |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS jobs ( |
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NOT NULL, |
|
file_id BIGINT NOT NULL, |
|
job_type VARCHAR(100) NOT NULL, |
|
options_json LONGTEXT NULL, |
|
status VARCHAR(50) NOT NULL DEFAULT 'queued', |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
started_at DATETIME NULL, |
|
completed_at DATETIME NULL, |
|
output_file_id BIGINT NULL, |
|
log_text LONGTEXT NULL, |
|
CONSTRAINT fk_jobs_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id), |
|
CONSTRAINT fk_jobs_file FOREIGN KEY (file_id) REFERENCES files(id) |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS audit_logs ( |
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NULL, |
|
user_id INT NULL, |
|
actor_type VARCHAR(20) NOT NULL, |
|
event_type VARCHAR(100) NOT NULL, |
|
file_id BIGINT NULL, |
|
job_id BIGINT NULL, |
|
ip_address VARCHAR(64) NULL, |
|
user_agent VARCHAR(500) NULL, |
|
event_detail LONGTEXT NULL, |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
INDEX idx_audit_tenant_created (tenant_id, created_at), |
|
INDEX idx_audit_event_type (event_type) |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS admin_access_tokens ( |
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NOT NULL, |
|
issued_by_user_id INT NOT NULL, |
|
used_by_admin_id INT NULL, |
|
token_hash CHAR(64) NOT NULL, |
|
purpose VARCHAR(255) NOT NULL, |
|
status VARCHAR(50) NOT NULL DEFAULT 'issued', |
|
expires_at DATETIME NOT NULL, |
|
used_at DATETIME NULL, |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
CONSTRAINT fk_admin_token_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id), |
|
CONSTRAINT fk_admin_token_owner FOREIGN KEY (issued_by_user_id) REFERENCES users(id) |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS android_device_tokens ( |
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NOT NULL, |
|
device_id INT NOT NULL, |
|
token_hash CHAR(64) NOT NULL, |
|
device_label VARCHAR(100) NOT NULL, |
|
status VARCHAR(50) NOT NULL DEFAULT 'issued', |
|
expires_at DATETIME NOT NULL, |
|
activated_at DATETIME NULL, |
|
device_uuid VARCHAR(100) NULL, |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
CONSTRAINT fk_android_token_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id), |
|
CONSTRAINT fk_android_token_device FOREIGN KEY (device_id) REFERENCES devices(id) |
|
); |
|
|
|
-- =============================== |
|
-- v1.1.0-alpha1 VIDEO JOB SYSTEM |
|
-- =============================== |
|
|
|
CREATE TABLE IF NOT EXISTS video_jobs ( |
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NOT NULL, |
|
device_id INT NOT NULL, |
|
source_file_id BIGINT NULL, |
|
source_relative_path VARCHAR(1000) NOT NULL, |
|
source_original_filename VARCHAR(255) NOT NULL, |
|
requested_profile VARCHAR(50) NOT NULL, |
|
requested_gpu_preference VARCHAR(20) NOT NULL DEFAULT 'auto', |
|
assigned_processor VARCHAR(20) NULL, |
|
status VARCHAR(50) NOT NULL DEFAULT 'queued', |
|
progress_percent INT NOT NULL DEFAULT 0, |
|
output_relative_path VARCHAR(1000) NULL, |
|
output_file_id BIGINT NULL, |
|
log_excerpt LONGTEXT NULL, |
|
error_message LONGTEXT NULL, |
|
gpu_seconds INT NOT NULL DEFAULT 0, |
|
started_at DATETIME NULL, |
|
completed_at DATETIME NULL, |
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
created_by_user_id INT NULL, |
|
CONSTRAINT fk_video_jobs_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id), |
|
CONSTRAINT fk_video_jobs_device FOREIGN KEY (device_id) REFERENCES devices(id) |
|
); |
|
|
|
CREATE TABLE IF NOT EXISTS tenant_usage_metrics ( |
|
id BIGINT AUTO_INCREMENT PRIMARY KEY, |
|
tenant_id INT NOT NULL, |
|
storage_bytes_originals BIGINT NOT NULL DEFAULT 0, |
|
storage_bytes_video BIGINT NOT NULL DEFAULT 0, |
|
storage_bytes_archive BIGINT NOT NULL DEFAULT 0, |
|
storage_bytes_lts BIGINT NOT NULL DEFAULT 0, |
|
storage_bytes_total BIGINT NOT NULL DEFAULT 0, |
|
gpu_seconds_intel BIGINT NOT NULL DEFAULT 0, |
|
gpu_seconds_amd BIGINT NOT NULL DEFAULT 0, |
|
gpu_seconds_cpu BIGINT NOT NULL DEFAULT 0, |
|
completed_jobs INT NOT NULL DEFAULT 0, |
|
failed_jobs INT NOT NULL DEFAULT 0, |
|
accrued_storage_cost DECIMAL(12,2) NOT NULL DEFAULT 0.00, |
|
accrued_gpu_cost DECIMAL(12,2) NOT NULL DEFAULT 0.00, |
|
calculated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
CONSTRAINT fk_metrics_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id) |
|
); |
|
|
|
|