初始化仓库及v1.0.0提交
This commit is contained in:
132
app/Services/Installer.php
Normal file
132
app/Services/Installer.php
Normal file
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Config\Database;
|
||||
use App\Models\Personality;
|
||||
|
||||
class Installer
|
||||
{
|
||||
public static function isInstalled(): bool
|
||||
{
|
||||
$configPath = dirname(__DIR__, 2) . '/config/db-config.json';
|
||||
|
||||
if (!file_exists($configPath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$db = Database::getInstance();
|
||||
$stmt = $db->query("SHOW TABLES LIKE 'users'");
|
||||
return $stmt->fetch() !== false;
|
||||
} catch (\Throwable $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static function runMigration(): void
|
||||
{
|
||||
$db = Database::getInstance();
|
||||
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
role ENUM('admin','user') DEFAULT 'user',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS sessions (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL,
|
||||
name VARCHAR(100),
|
||||
provider VARCHAR(50),
|
||||
model VARCHAR(50),
|
||||
system_prompt TEXT,
|
||||
personality_id INT NULL,
|
||||
thinking_mode TINYINT(1) DEFAULT 0,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_user_id (user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS messages (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
session_id INT NOT NULL,
|
||||
role ENUM('user','assistant','system') NOT NULL,
|
||||
content LONGTEXT,
|
||||
file_info JSON,
|
||||
thinking_content LONGTEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_session_id (session_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS config (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
config_key VARCHAR(50) UNIQUE NOT NULL,
|
||||
config_value LONGTEXT
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS personalities (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL,
|
||||
prompt TEXT NOT NULL,
|
||||
description TEXT,
|
||||
icon VARCHAR(50),
|
||||
is_preset TINYINT(1) DEFAULT 0,
|
||||
created_by INT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||
}
|
||||
|
||||
public static function seedDefaults(): void
|
||||
{
|
||||
$db = Database::getInstance();
|
||||
|
||||
$presets = [
|
||||
[
|
||||
'name' => '智能助手',
|
||||
'prompt' => '你是一个全能的智能助手,善于回答各种问题,提供准确、有帮助的回答。',
|
||||
'icon' => '🤖',
|
||||
],
|
||||
[
|
||||
'name' => '代码专家',
|
||||
'prompt' => '你是一个专业的编程专家,精通多种编程语言和技术框架,擅长代码编写、调试和优化。',
|
||||
'icon' => '💻',
|
||||
],
|
||||
[
|
||||
'name' => '翻译官',
|
||||
'prompt' => '你是一个专业的翻译官,精通中文、英文、日文等多种语言,提供准确、流畅的翻译服务。',
|
||||
'icon' => '🌐',
|
||||
],
|
||||
[
|
||||
'name' => '写作助手',
|
||||
'prompt' => '你是一个专业的写作助手,擅长各类文体的写作,包括文章、报告、邮件、创意写作等。',
|
||||
'icon' => '✍️',
|
||||
],
|
||||
[
|
||||
'name' => '数学家',
|
||||
'prompt' => '你是一个数学专家,精通各领域的数学知识,善于解答数学问题并提供详细的解题步骤。',
|
||||
'icon' => '🔢',
|
||||
],
|
||||
];
|
||||
|
||||
$stmt = $db->prepare('INSERT INTO personalities (name, prompt, description, icon, is_preset) VALUES (:name, :prompt, :description, :icon, :is_preset)');
|
||||
|
||||
foreach ($presets as $preset) {
|
||||
$stmt->execute([
|
||||
'name' => $preset['name'],
|
||||
'prompt' => $preset['prompt'],
|
||||
'description' => null,
|
||||
'icon' => $preset['icon'],
|
||||
'is_preset' => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
$configStmt = $db->prepare('INSERT INTO config (config_key, config_value) VALUES (:config_key, :config_value) ON DUPLICATE KEY UPDATE config_value = VALUES(config_value)');
|
||||
$configStmt->execute([
|
||||
'config_key' => 'providers',
|
||||
'config_value' => '[]',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user