feat: 实现多站点数据隔离和管理功能

- 新增站点管理功能,替换原有的域名管理
- 添加数据库迁移工具,为现有表增加 site_id 字段
- 创建 useSite 组合式 API 统一管理站点状态
- 修改前后端 API 以支持站点筛选参数
- 更新管理界面,将域名筛选改为站点筛选
- 优化数据导出功能,支持按站点筛选导出
- 更新文档,调整站点 ID 默认值为空字符串
- 升级 wrangler 依赖至最新版本
This commit is contained in:
anghunk
2026-02-09 15:31:47 +08:00
parent 3b429bf82c
commit 098d668a15
22 changed files with 431 additions and 412 deletions

View File

@@ -26,7 +26,7 @@ import { getAdminEmail } from './api/admin/getAdminEmail';
import { setAdminEmail } from './api/admin/setAdminEmail';
import { testEmail } from './api/admin/testEmail';
import { getStats } from './api/admin/getStats';
import { getDomains } from './api/admin/getDomains';
import { getSites } from './api/admin/getDomains';
import { trackVisit } from './api/public/trackVisit';
import { getVisitOverview, getVisitPages } from './api/admin/visitAnalytics';
import { getLikeStatus, likePage } from './api/public/like';
@@ -36,10 +36,13 @@ import { getLikeStats } from './api/admin/likeStats';
import { getFeatureSettings, updateFeatureSettings } from './api/admin/featureSettings';
import { getTelegramSettings, updateTelegramSettings, setupTelegramWebhook, testTelegramMessage } from './api/admin/telegramSettings';
import { telegramWebhook } from './api/telegram/webhook';
import { ensureSchema } from './utils/dbMigration';
const app = new Hono<{ Bindings: Bindings }>();
const VERSION = `${packageJson.version}`;
let MIGRATION_CHECKED = false;
const COMMENT_ADMIN_EMAIL_KEY = 'comment_admin_email';
const COMMENT_ADMIN_BADGE_KEY = 'comment_admin_badge';
const COMMENT_AVATAR_PREFIX_KEY = 'comment_avatar_prefix';
@@ -226,6 +229,10 @@ async function saveCommentSettings(
}
app.use('*', async (c, next) => {
if (!MIGRATION_CHECKED) {
await ensureSchema(c.env);
MIGRATION_CHECKED = true;
}
console.log('Request:start', {
method: c.req.method,
path: c.req.path,
@@ -290,7 +297,7 @@ app.post('/admin/import/backup', importBackup);
app.put('/admin/comments/status', updateStatus);
app.put('/admin/comments/update', updateComment);
app.get('/admin/stats/comments', getStats);
app.get('/admin/stats/domains', getDomains);
app.get('/admin/stats/sites', getSites);
app.get('/admin/analytics/overview', getVisitOverview);
app.get('/admin/analytics/pages', getVisitPages);
app.get('/admin/likes/list', listLikes);