블로그 통계 위젯 확장 v1.7.6

This commit is contained in:
2026-06-22 17:24:29 +09:00
parent 7cd32f62bd
commit e2ca365fa0
12 changed files with 296 additions and 8 deletions

View File

@@ -1,5 +1,6 @@
import { getSiteSettings } from '../repositories/content-repository'
import { getAnalyticsSummary } from '../repositories/analytics-repository'
import { getPublicBlogStatistics } from '../repositories/blog-statistics-repository'
/**
* 초 단위 체류 시간을 짧은 한국어 문자열로 변환한다.
@@ -32,9 +33,10 @@ const formatNumberLabel = (value, unit) => `${Number(value || 0).toLocaleString(
* @returns {Promise<Object>} 위젯 데이터
*/
export default defineEventHandler(async () => {
const [settings, summary] = await Promise.all([
const [settings, summary, statistics] = await Promise.all([
getSiteSettings(),
getAnalyticsSummary({ days: 1 })
getAnalyticsSummary({ days: 1 }),
getPublicBlogStatistics()
])
const avgEngagedSeconds = summary.todayAvgEngagedSeconds || summary.avgEngagedSeconds || 0
@@ -42,10 +44,19 @@ export default defineEventHandler(async () => {
title: settings.title || 'sori.studio',
updatedAt: new Date().toISOString(),
todayVisitors: summary.todayVisitors,
totalVisitors: statistics.totalVisitors,
todayPageViews: summary.todayPageViews,
totalPageViews: statistics.totalPageViews,
onlineNow: summary.onlineNow,
loggedInNow: summary.loggedInNow,
avgEngagedSeconds,
visitorsLast7Days: summary.visitorsLast7Days,
pageViewsLast30Days: summary.pageViewsLast30Days,
totalPosts: statistics.totalPosts,
totalComments: statistics.totalComments,
totalPages: statistics.totalPages,
totalTags: statistics.totalTags,
totalMembers: statistics.totalMembers,
items: [
{
name: '오늘 방문자',
@@ -66,6 +77,21 @@ export default defineEventHandler(async () => {
name: '평균 체류',
label: formatDuration(avgEngagedSeconds),
value: avgEngagedSeconds
},
{
name: '누적 방문자',
label: formatNumberLabel(statistics.totalVisitors, '명'),
value: statistics.totalVisitors
},
{
name: '전체 게시글',
label: formatNumberLabel(statistics.totalPosts, '개'),
value: statistics.totalPosts
},
{
name: '전체 댓글',
label: formatNumberLabel(statistics.totalComments, '개'),
value: statistics.totalComments
}
]
}