添加媒体统计接口 /api/media/stats
All checks were successful
Deploy to Server / deploy (push) Successful in 5s
All checks were successful
Deploy to Server / deploy (push) Successful in 5s
- 返回媒体总数、满分作品数、平均评分 - 按类型统计各类型作品数量 - 返回最新添加的5部作品 - 便于前端展示数据统计信息
This commit is contained in:
@@ -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;
|
export default media;
|
||||||
|
|||||||
Reference in New Issue
Block a user