添加媒体统计接口 /api/media/stats
All checks were successful
Deploy to Server / deploy (push) Successful in 5s

- 返回媒体总数、满分作品数、平均评分
- 按类型统计各类型作品数量
- 返回最新添加的5部作品
- 便于前端展示数据统计信息
This commit is contained in:
ethan.chen
2026-01-09 10:30:40 +08:00
parent 9bcfbe0113
commit 56d9736597

View File

@@ -200,4 +200,68 @@ media.get("/page", async (c) => {
}
});
// 获取媒体统计信息
media.get("/stats", async (c) => {
try {
// 获取总数
const totalResult = await db
.prepare("SELECT COUNT(*) as total FROM media")
.get();
const total = totalResult?.total || 0;
// 获取满分作品数
const perfectResult = await db
.prepare("SELECT COUNT(*) as count FROM media WHERE rating = 10")
.get();
const perfectCount = perfectResult?.count || 0;
// 按类型统计
const typeStats = await db
.prepare(
"SELECT type, COUNT(*) as count FROM media GROUP BY type ORDER BY count DESC"
)
.all();
// 获取平均评分
const avgRatingResult = await db
.prepare("SELECT AVG(rating) as avg FROM media WHERE rating IS NOT NULL")
.get();
const avgRating = avgRatingResult?.avg
? parseFloat(avgRatingResult.avg).toFixed(2)
: "0.00";
// 获取最新添加的作品
const latestResult = await db
.prepare(
"SELECT title, type, rating, date FROM media ORDER BY created_at DESC LIMIT 5"
)
.all();
// 格式化最新作品的日期
const latest = latestResult.map((item: any) => {
if (item.date) {
const date = new Date(item.date);
if (!isNaN(date.getTime())) {
item.date = date.toISOString().split("T")[0];
}
}
return item;
});
return c.json({
code: 0,
data: {
total,
perfectCount,
avgRating,
typeStats,
latest,
},
message: "Success",
});
} catch (error: any) {
return c.json({ code: 1, data: {}, message: error.message }, 500);
}
});
export default media;