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(100) NOT NULL, role VARCHAR(30) NOT NULL DEFAULT 'ROLE_USER', points INT NOT NULL DEFAULT 50, phone VARCHAR(20), avatar VARCHAR(500), nickname VARCHAR(100), gender VARCHAR(10), birthday DATE, address TEXT, is_active BOOLEAN NOT NULL DEFAULT TRUE, last_login_at TIMESTAMP NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS payments ( id BIGINT PRIMARY KEY AUTO_INCREMENT, order_id VARCHAR(50) NOT NULL UNIQUE, amount DECIMAL(10,2) NOT NULL, currency VARCHAR(3) NOT NULL DEFAULT 'CNY', payment_method VARCHAR(20) NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'PENDING', description VARCHAR(500), external_transaction_id VARCHAR(100), callback_url VARCHAR(1000), return_url VARCHAR(1000), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, paid_at TIMESTAMP NULL, user_id BIGINT, FOREIGN KEY (user_id) REFERENCES users(id) ); CREATE TABLE IF NOT EXISTS orders ( id BIGINT PRIMARY KEY AUTO_INCREMENT, order_number VARCHAR(50) NOT NULL UNIQUE, total_amount DECIMAL(10,2) NOT NULL, currency VARCHAR(3) NOT NULL DEFAULT 'CNY', status VARCHAR(20) NOT NULL DEFAULT 'PENDING', order_type VARCHAR(20) NOT NULL DEFAULT 'PRODUCT', description VARCHAR(500), notes TEXT, shipping_address TEXT, billing_address TEXT, contact_phone VARCHAR(20), contact_email VARCHAR(100), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, paid_at TIMESTAMP NULL, shipped_at TIMESTAMP NULL, delivered_at TIMESTAMP NULL, cancelled_at TIMESTAMP NULL, user_id BIGINT NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ); CREATE TABLE IF NOT EXISTS order_items ( id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(100) NOT NULL, product_description VARCHAR(500), product_sku VARCHAR(200), unit_price DECIMAL(10,2) NOT NULL, quantity INT NOT NULL, subtotal DECIMAL(10,2) NOT NULL, product_image VARCHAR(100), order_id BIGINT NOT NULL, FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE ); -- 会员等级表 CREATE TABLE IF NOT EXISTS membership_levels ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL UNIQUE, display_name VARCHAR(50) NOT NULL, description TEXT, price DECIMAL(10,2) NOT NULL DEFAULT 0, duration_days INT NOT NULL DEFAULT 30, points_bonus INT NOT NULL DEFAULT 0, features JSON, is_active BOOLEAN NOT NULL DEFAULT TRUE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 用户会员信息表 CREATE TABLE IF NOT EXISTS user_memberships ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, membership_level_id BIGINT NOT NULL, start_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, end_date TIMESTAMP NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', auto_renew BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (membership_level_id) REFERENCES membership_levels(id), UNIQUE KEY unique_active_membership (user_id, status) ); -- 视频生成任务表 CREATE TABLE IF NOT EXISTS video_tasks ( id BIGINT PRIMARY KEY AUTO_INCREMENT, task_id VARCHAR(100) NOT NULL UNIQUE, user_id BIGINT NOT NULL, task_type VARCHAR(50) NOT NULL, -- TEXT_TO_VIDEO, IMAGE_TO_VIDEO, STORYBOARD_VIDEO title VARCHAR(200) NOT NULL, description TEXT, input_text TEXT, input_image_url VARCHAR(500), output_video_url VARCHAR(500), status VARCHAR(20) NOT NULL DEFAULT 'PENDING', -- PENDING, PROCESSING, COMPLETED, FAILED progress INT NOT NULL DEFAULT 0, error_message TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, completed_at TIMESTAMP NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -- 用户作品表 CREATE TABLE IF NOT EXISTS user_works ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, title VARCHAR(200) NOT NULL, description TEXT, work_type VARCHAR(50) NOT NULL, -- VIDEO, IMAGE, STORYBOARD cover_image VARCHAR(500), video_url VARCHAR(500), tags VARCHAR(500), is_public BOOLEAN NOT NULL DEFAULT TRUE, view_count INT NOT NULL DEFAULT 0, like_count INT NOT NULL DEFAULT 0, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -- 系统配置表 CREATE TABLE IF NOT EXISTS system_configs ( id BIGINT PRIMARY KEY AUTO_INCREMENT, config_key VARCHAR(100) NOT NULL UNIQUE, config_value TEXT, description VARCHAR(500), config_type VARCHAR(50) NOT NULL DEFAULT 'STRING', -- STRING, NUMBER, BOOLEAN, JSON is_public BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );