5.7 KiB
5.7 KiB
Analytics RPC 函数部署指南
概述
为 Analytics 页面创建了4个主要的 RPC 函数,提供教师数据分析功能。
创建的 RPC 函数
1. get_teacher_analytics - 教师统计数据
功能: 获取教师的核心统计指标 参数:
p_teacher_id(uuid, 可选) - 教师ID,默认当前用户p_start_date(date, 可选) - 开始日期,默认30天前p_end_date(date, 可选) - 结束日期,默认今天
返回字段:
total_students- 学生总数total_assignments- 作业总数completion_rate- 完成率(%)average_score- 平均分active_classes- 活跃班级数total_submissions- 总提交数pending_reviews- 待评分数graded_submissions- 已评分数
2. get_top_performers - 优秀学员排行
功能: 获取表现优秀的学员排行榜 参数:
p_teacher_id(uuid, 可选) - 教师IDp_start_date(date, 可选) - 开始日期p_end_date(date, 可选) - 结束日期p_limit(integer, 可选) - 返回数量,默认10
返回字段:
student_id- 学生IDname- 学生姓名username- 用户名avatar_url- 头像地址score- 平均分submission_count- 提交数量completion_rate- 完成率class_name- 班级名称rank_position- 排名位置
3. get_chart_data - 图表数据
功能: 获取各种图表数据 参数:
p_teacher_id(uuid, 可选) - 教师IDp_start_date(date, 可选) - 开始日期p_end_date(date, 可选) - 结束日期p_type(text, 可选) - 图表类型,默认'completion_rate'
支持的图表类型:
completion_rate- 完成率趋势score_distribution- 成绩分布submission_trend- 提交趋势
返回字段:
date_key- 日期键value- 数值label- 标签count- 计数
4. get_recent_activities - 近期活动
功能: 获取近期活动记录 参数:
p_teacher_id(uuid, 可选) - 教师IDp_limit(integer, 可选) - 返回数量,默认20
返回字段:
activity_id- 活动IDactivity_type- 活动类型title- 标题description- 描述student_name- 学生姓名assignment_title- 作业标题activity_time- 活动时间time_ago- 相对时间
部署步骤
1. 执行 SQL 文件
# 在 Supabase SQL Editor 中执行
# 或通过 psql 命令行执行
psql -h [your-host] -U [your-user] -d [your-database] -f analytics_rpc_functions.sql
2. 验证函数创建
-- 检查函数是否创建成功
SELECT routine_name, routine_type
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name LIKE 'get_%analytics%'
OR routine_name LIKE 'get_top_performers'
OR routine_name LIKE 'get_chart_data'
OR routine_name LIKE 'get_recent_activities';
3. 测试函数调用
-- 测试教师统计数据
SELECT * FROM public.get_teacher_analytics();
-- 测试优秀学员排行
SELECT * FROM public.get_top_performers(limit => 5);
-- 测试图表数据
SELECT * FROM public.get_chart_data(p_type => 'completion_rate');
-- 测试近期活动
SELECT * FROM public.get_recent_activities(p_limit => 10);
前端使用示例
Analytics 页面调用
<!-- 统计数据 -->
<supadb
rpc="get_teacher_analytics"
:params="analyticsParams"
@process-data="processStatisticsData"
/>
<!-- 优秀学员 -->
<supadb
rpc="get_top_performers"
:params="performersParams"
@process-data="processPerformersData"
/>
<!-- 图表数据 -->
<supadb
rpc="get_chart_data"
:params="chartParams"
@process-data="processChartData"
/>
参数示例
// Analytics 参数
const analyticsParams = ref({
teacher_id: 'current_teacher_id', // 可选,默认当前用户
start_date: '2024-01-01',
end_date: '2024-12-31'
})
// 优秀学员参数
const performersParams = ref({
teacher_id: 'current_teacher_id',
limit: 10,
start_date: '2024-01-01',
end_date: '2024-12-31'
})
// 图表数据参数
const chartParams = ref({
teacher_id: 'current_teacher_id',
type: 'completion_rate', // 或 'score_distribution', 'submission_trend'
start_date: '2024-01-01',
end_date: '2024-12-31'
})
性能优化
创建的索引
idx_assignments_teacher_date- 优化按教师和日期查询idx_assignments_class_due- 优化按班级和截止日期查询idx_submissions_assignment_date- 优化按作业和提交时间查询idx_submissions_student_score- 优化按学生和分数查询idx_user_classes_role- 优化用户班级角色查询
安全特性
权限控制
- 所有函数都验证调用者是否为教师
- 只能查看自己教授班级的数据
- 使用
SECURITY DEFINER确保权限一致性
RLS 策略
- 为作业表添加了行级安全策略
- 确保教师只能访问自己的数据
注意事项
- 数据完整性: 确保
ak_user_classes表正确维护了师生关系 - 时区处理: 函数使用
TIMESTAMP WITH TIME ZONE处理时间 - 空值处理: 所有计算都考虑了空值情况
- 性能监控: 建议监控函数执行时间,必要时进一步优化
故障排除
常见错误
- "用户不是教师或不存在" - 检查用户角色和ID
- 数据为空 - 检查师生关系配置和时间范围
- 权限错误 - 确保函数权限正确授予
调试技巧
-- 检查用户角色
SELECT id, username, role FROM public.ak_users WHERE id = auth.uid();
-- 检查师生关系
SELECT * FROM public.ak_user_classes WHERE user_id = auth.uid();
-- 检查作业数据
SELECT COUNT(*) FROM public.ak_assignments WHERE teacher_id = auth.uid();
部署完成后,Analytics 页面应该能够正常加载和显示数据分析功能。