项目重构: 整理目录结构, 更新前后端代码, 添加测试和数据库迁移
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
#Updated by API Key Management
|
||||
#Thu Dec 18 13:00:49 CST 2025
|
||||
#Mon Dec 22 13:46:28 CST 2025
|
||||
ai.api.base-url=https\://ai.comfly.chat
|
||||
ai.api.key=sk-J9A9c7rr7Y2suarAudmLG1J722ozIIHOweIhsI8QXX68sjMW
|
||||
ai.api.key=sk-I9Z4qYL0Me7MtcQzDcBa9e7bDa23442a88768a4e0c17C0E4
|
||||
ai.image.api.base-url=https\://ai.comfly.chat
|
||||
ai.image.api.key=sk-J9A9c7rr7Y2suarAudmLG1J722ozIIHOweIhsI8QXX68sjMW
|
||||
ai.image.api.key=sk-I9Z4qYL0Me7MtcQzDcBa9e7bDa23442a88768a4e0c17C0E4
|
||||
alipay.app-id=9021000157616562
|
||||
alipay.charset=UTF-8
|
||||
alipay.domain=https\://vionow.com
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
-- 此迁移文件已废弃,佣金相关字段的删除已移至 V13__Remove_Commission_Fields.sql
|
||||
-- 保留此文件以避免迁移版本冲突
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
-- 删除 users 表中的佣金相关字段
|
||||
-- 注意:MySQL 5.7及以下版本不支持 DROP COLUMN IF EXISTS
|
||||
-- 如果字段不存在,执行会报错,但可以忽略
|
||||
|
||||
-- 删除 commission 字段(如果存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'users'
|
||||
AND COLUMN_NAME = 'commission');
|
||||
SET @sqlstmt := IF(@exist > 0, 'ALTER TABLE users DROP COLUMN commission', 'SELECT "commission字段不存在,跳过删除"');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 删除 frozen_commission 字段(如果存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'users'
|
||||
AND COLUMN_NAME = 'frozen_commission');
|
||||
SET @sqlstmt := IF(@exist > 0, 'ALTER TABLE users DROP COLUMN frozen_commission', 'SELECT "frozen_commission字段不存在,跳过删除"');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
|
||||
|
||||
@@ -102,53 +102,38 @@ CREATE TABLE IF NOT EXISTS user_memberships (
|
||||
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
|
||||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||||
task_id VARCHAR(50) NOT NULL UNIQUE COMMENT '任务ID',
|
||||
work_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO', 'STORYBOARD_VIDEO') NOT NULL COMMENT '作品类型',
|
||||
title VARCHAR(200) COMMENT '作品标题',
|
||||
description TEXT COMMENT '作品描述',
|
||||
prompt TEXT COMMENT '生成提示词',
|
||||
result_url VARCHAR(500) COMMENT '结果视频URL',
|
||||
thumbnail_url VARCHAR(500) COMMENT '缩略图URL',
|
||||
duration VARCHAR(10) COMMENT '视频时长',
|
||||
aspect_ratio VARCHAR(10) COMMENT '宽高比',
|
||||
quality VARCHAR(20) COMMENT '画质',
|
||||
file_size VARCHAR(20) COMMENT '文件大小',
|
||||
points_cost INT NOT NULL DEFAULT 0 COMMENT '消耗积分',
|
||||
status ENUM('PROCESSING', 'COMPLETED', 'FAILED', 'DELETED') NOT NULL DEFAULT 'PROCESSING' COMMENT '作品状态',
|
||||
is_public BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否公开',
|
||||
view_count INT NOT NULL DEFAULT 0 COMMENT '浏览次数',
|
||||
like_count INT NOT NULL DEFAULT 0 COMMENT '点赞次数',
|
||||
download_count INT NOT NULL DEFAULT 0 COMMENT '下载次数',
|
||||
tags VARCHAR(500) COMMENT '标签',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
completed_at TIMESTAMP NULL COMMENT '完成时间',
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_username_status (username, status),
|
||||
INDEX idx_task_id (task_id),
|
||||
INDEX idx_work_type (work_type),
|
||||
INDEX idx_is_public_status (is_public, status),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
|
||||
-- 系统配置表
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form th:action="@{/settings}" th:object="${settings}" method="post">
|
||||
<input type="hidden" th:field="*{id}">
|
||||
<h5 class="mb-3">基础信息</h5>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">站点名称</label>
|
||||
@@ -69,6 +70,26 @@
|
||||
<label class="form-label">每次生成消耗资源点</label>
|
||||
<input type="number" class="form-control" th:field="*{pointsPerGeneration}" min="0" required>
|
||||
</div>
|
||||
|
||||
<h5 class="mb-3">API 配置</h5>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">AI API Base URL</label>
|
||||
<input type="text" class="form-control" th:field="*{aiApiBaseUrl}" placeholder="https://ai.comfly.chat">
|
||||
<div class="form-text">视频生成、图片生成、提示词优化统一使用此地址</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">AI API Key</label>
|
||||
<input type="password" class="form-control" th:field="*{aiApiKey}" placeholder="留空则不修改">
|
||||
<div class="form-text">API 密钥,留空表示不修改</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">提示词优化模型</label>
|
||||
<input type="text" class="form-control" th:field="*{promptOptimizationModel}" placeholder="gpt-5.1-thinking">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">分镜图系统引导词</label>
|
||||
<textarea class="form-control" th:field="*{storyboardSystemPrompt}" rows="3" placeholder="可选的系统引导词"></textarea>
|
||||
</div>
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="fas fa-save me-1"></i>保存
|
||||
|
||||
Reference in New Issue
Block a user