初次提交

This commit is contained in:
2025-10-14 20:05:29 +08:00
commit 6e4e48fdd2
673 changed files with 437006 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env python3
"""
创建files表的脚本
"""
from sqlalchemy import create_engine, text
import os
# 数据库配置
DATABASE_URL = os.getenv("DATABASE_URL", "mysql+pymysql://mytest_db:mytest_db@101.126.85.76:3306/mytest_db")
def create_files_table():
"""创建files表"""
engine = create_engine(DATABASE_URL)
# 创建files表的SQL语句
create_table_sql = """
CREATE TABLE IF NOT EXISTS files (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
filename VARCHAR(255) NOT NULL,
original_filename VARCHAR(255) NOT NULL,
file_path VARCHAR(500) NOT NULL,
file_size BIGINT NOT NULL,
mime_type VARCHAR(100) NOT NULL,
file_hash VARCHAR(64) NOT NULL,
is_public BOOLEAN DEFAULT FALSE,
download_count BIGINT DEFAULT 0,
description TEXT,
tags TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
last_accessed_at TIMESTAMP NULL,
INDEX idx_user_id (user_id),
INDEX idx_filename (filename),
INDEX idx_file_hash (file_hash),
INDEX idx_created_at (created_at),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
"""
try:
with engine.connect() as connection:
# 执行创建表语句
connection.execute(text(create_table_sql))
connection.commit()
print("files表创建成功")
# 检查表是否创建成功
result = connection.execute(text("SHOW TABLES LIKE 'files'"))
if result.fetchone():
print("files表验证成功")
else:
print("files表验证失败")
except Exception as e:
print(f"创建files表失败: {e}")
raise
if __name__ == "__main__":
create_files_table()

View File

@@ -0,0 +1,114 @@
-- 创建数据库初始化脚本
-- 云盘应用数据库表结构
-- 用户表
CREATE TABLE IF NOT EXISTS users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
is_verified BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
last_login_at TIMESTAMP NULL,
INDEX idx_username (username),
INDEX idx_email (email),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 文件表
CREATE TABLE IF NOT EXISTS files (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
filename VARCHAR(255) NOT NULL,
original_filename VARCHAR(255) NOT NULL,
file_path VARCHAR(500) NOT NULL,
file_hash VARCHAR(64) NOT NULL,
path_hash VARCHAR(64) NOT NULL,
file_size BIGINT NOT NULL DEFAULT 0,
mime_type VARCHAR(100) NOT NULL,
processing_status ENUM('pending', 'processing', 'completed', 'failed') DEFAULT 'pending',
is_public BOOLEAN DEFAULT FALSE,
is_deleted BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_file_hash (file_hash),
INDEX idx_path_hash (path_hash),
INDEX idx_processing_status (processing_status),
INDEX idx_created_at (created_at),
UNIQUE KEY unique_user_path (user_id, path_hash)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 文件操作日志表
CREATE TABLE IF NOT EXISTS file_operations (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
file_id BIGINT NULL,
operation_type ENUM('upload', 'download', 'delete', 'rename', 'move', 'copy', 'share') NOT NULL,
operation_details JSON NULL,
ip_address VARCHAR(45) NULL,
user_agent TEXT NULL,
status ENUM('success', 'failed', 'pending') DEFAULT 'success',
error_message TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE SET NULL,
INDEX idx_user_id (user_id),
INDEX idx_file_id (file_id),
INDEX idx_operation_type (operation_type),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 文件分享表
CREATE TABLE IF NOT EXISTS file_shares (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
file_id BIGINT NOT NULL,
owner_id BIGINT NOT NULL,
share_token VARCHAR(64) NOT NULL UNIQUE,
share_type ENUM('public', 'password', 'private') DEFAULT 'public',
share_password VARCHAR(255) NULL,
expires_at TIMESTAMP NULL,
download_limit INT NULL,
download_count INT DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE,
FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_file_id (file_id),
INDEX idx_owner_id (owner_id),
INDEX idx_share_token (share_token),
INDEX idx_expires_at (expires_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 用户会话表
CREATE TABLE IF NOT EXISTS user_sessions (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
session_token VARCHAR(255) NOT NULL UNIQUE,
refresh_token VARCHAR(255) NOT NULL UNIQUE,
ip_address VARCHAR(45) NULL,
user_agent TEXT NULL,
expires_at TIMESTAMP NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_session_token (session_token),
INDEX idx_refresh_token (refresh_token),
INDEX idx_expires_at (expires_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 插入测试数据
INSERT INTO users (username, email, password_hash, is_verified) VALUES
('admin', 'admin@example.com', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewxBobJOiZLWLH/K', TRUE)
ON DUPLICATE KEY UPDATE username=username;