重构 monorepo 并完善网页端订阅与首页体验
- 迁移为 frontend-web、frontend-electron、backend-web 与 docker 部署结构 - 网页端:订阅门禁二次弹窗、套餐/支付组件化、顶栏分组对齐 - 首页:最近文件与模板库布局优化,缩略图对齐,下载与删除操作 - 新增管理后台、支付与云端文件 API,更新 README 与项目规范 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Soon\Api\Admin\Controllers;
|
||||
|
||||
use Soon\Api\Core\Db;
|
||||
use Soon\Api\Core\Json;
|
||||
use Soon\Api\Services\AuditService;
|
||||
|
||||
final class StatsController
|
||||
{
|
||||
public function summary(int $adminId): void
|
||||
{
|
||||
$pdo = Db::pdo();
|
||||
AuditService::log($adminId, 'stats.summary', 'dashboard');
|
||||
|
||||
$recentStmt = $pdo->query(
|
||||
'SELECT o.id, o.order_no, o.amount_cents, o.status, o.created_at, u.email '
|
||||
. 'FROM pay_orders o LEFT JOIN users u ON u.id = o.user_id '
|
||||
. 'ORDER BY o.id DESC LIMIT 5'
|
||||
);
|
||||
|
||||
Json::ok([
|
||||
'users' => (int)$pdo->query('SELECT COUNT(*) FROM users')->fetchColumn(),
|
||||
'orders' => (int)$pdo->query('SELECT COUNT(*) FROM pay_orders')->fetchColumn(),
|
||||
'orders_today' => (int)$pdo->query(
|
||||
"SELECT COUNT(*) FROM pay_orders WHERE DATE(created_at) = CURDATE()"
|
||||
)->fetchColumn(),
|
||||
'orders_pending' => (int)$pdo->query(
|
||||
"SELECT COUNT(*) FROM pay_orders WHERE status = 'pending'"
|
||||
)->fetchColumn(),
|
||||
'refunds_pending' => (int)$pdo->query(
|
||||
"SELECT COUNT(*) FROM pay_orders WHERE refund_status = 'pending'"
|
||||
)->fetchColumn(),
|
||||
'active_subscriptions' => (int)$pdo->query(
|
||||
"SELECT COUNT(*) FROM subscriptions WHERE status = 'active'"
|
||||
)->fetchColumn(),
|
||||
'files_total' => (int)$pdo->query(
|
||||
'SELECT COUNT(*) FROM soon_files WHERE deleted_at IS NULL'
|
||||
)->fetchColumn(),
|
||||
'revenue_today_cents' => (int)$pdo->query(
|
||||
"SELECT COALESCE(SUM(amount_cents), 0) FROM pay_orders "
|
||||
. "WHERE status = 'paid' AND paid_at IS NOT NULL AND DATE(paid_at) = CURDATE()"
|
||||
)->fetchColumn(),
|
||||
'recent_orders' => $recentStmt->fetchAll(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user