50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import type { ChartData, ChartDataset } from "chart.js";
|
|
import { getCssVariableValue } from "@common/components";
|
|
import type {
|
|
MenuStatisticsContent,
|
|
SiteStatisticsContent,
|
|
} from "../model/dashboard-interface";
|
|
|
|
export function processSiteAccessData(
|
|
siteAccessList: SiteStatisticsContent[],
|
|
): ChartData<"line">["datasets"] {
|
|
const siteGroups: Record<string, ChartDataset> = siteAccessList.reduce(
|
|
(acc, item) => {
|
|
if (!acc[item.siteNm]) {
|
|
acc[item.siteNm] = {
|
|
label: item.siteNm,
|
|
data: Array(24).fill(0), // 24시간 데이터 초기화
|
|
borderColor: getCssVariableValue(
|
|
`--chart-${Math.floor(Math.random() * 5) + 1}`,
|
|
),
|
|
};
|
|
}
|
|
|
|
// 시간대별 접속 카운트 누적
|
|
const hourIndex = parseInt(item.accessHour, 10);
|
|
if (!isNaN(hourIndex) && hourIndex >= 0 && hourIndex < 24) {
|
|
acc[item.siteNm]!.data[hourIndex] = item.accessCnt;
|
|
}
|
|
|
|
return acc;
|
|
},
|
|
{} as Record<string, ChartDataset>,
|
|
);
|
|
|
|
return Object.values(siteGroups) as ChartData<"line">["datasets"];
|
|
}
|
|
|
|
export function processMenuAccessData(
|
|
menuAccessList: MenuStatisticsContent[],
|
|
): ChartData<"bar">["datasets"] {
|
|
const data = menuAccessList.map((item) => item.accessCnt);
|
|
|
|
return [
|
|
{
|
|
label: "메뉴별 접속 횟수",
|
|
data,
|
|
backgroundColor: "rgb(32, 148, 250)",
|
|
},
|
|
] as ChartData<"bar">["datasets"];
|
|
}
|