Files
NextEdu/src/modules/dashboard/data-access.ts

58 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import "server-only"
import { cacheFn } from "@/shared/lib/cache"
import { getClassesDashboardStats } from "@/modules/classes/data-access"
import { getExamsDashboardStats } from "@/modules/exams/data-access"
import { getHomeworkDashboardStats } from "@/modules/homework/stats-service"
import { getQuestionsDashboardStats } from "@/modules/questions/data-access"
import { getTextbooksDashboardStats } from "@/modules/textbooks/data-access"
import { getUsersDashboardStats } from "@/modules/users/data-access"
import type { DataScope } from "@/shared/types/permissions"
import type { AdminDashboardData } from "./types"
export const getAdminDashboardDataRaw = async (scope?: DataScope): Promise<AdminDashboardData> => {
const [
usersStats,
classesStats,
textbooksStats,
questionsStats,
examsStats,
homeworkStats,
] = await Promise.all([
getUsersDashboardStats(),
getClassesDashboardStats(),
getTextbooksDashboardStats(),
getQuestionsDashboardStats(),
getExamsDashboardStats(scope),
getHomeworkDashboardStats(scope),
])
return {
activeSessionsCount: usersStats.activeSessionsCount,
userCount: usersStats.userCount,
userRoleCounts: usersStats.userRoleCounts,
classCount: classesStats.classCount,
textbookCount: textbooksStats.textbookCount,
chapterCount: textbooksStats.chapterCount,
questionCount: questionsStats.questionCount,
examCount: examsStats.examCount,
homeworkAssignmentCount: homeworkStats.homeworkAssignmentCount,
homeworkAssignmentPublishedCount: homeworkStats.homeworkAssignmentPublishedCount,
homeworkSubmissionCount: homeworkStats.homeworkSubmissionCount,
homeworkSubmissionToGradeCount: homeworkStats.homeworkSubmissionToGradeCount,
recentUsers: usersStats.recentUsers,
// TODO(V4-P2-4): 接入真实趋势数据统计查询(按日期聚合用户注册数和作业提交数)
// 当前为占位空数组AdminTrendCharts 组件会渲染空状态
userGrowth: [],
homeworkTrend: [],
}
}
export const getAdminDashboardData = cacheFn(getAdminDashboardDataRaw, {
tags: ["dashboard"],
ttl: 60,
keyParts: ["dashboard", "getAdminDashboardData"],
})