icedcoke23/scratch-community
GitHub: icedcoke23/scratch-community
基于 Vue 3 和 Spring Boot 构建的青少年 Scratch 编程学习与创作社区平台,集成在线编辑器、智能代码分析、题库竞赛、教学管理和社交互动等全栈功能。
Stars: 0 | Forks: 0
# Scratch Community - Scratch 编程学习与创作社区
一个面向青少年的 Scratch 编程学习与创作社区平台,集成在线编辑器、智能代码分析、题库系统、竞赛、社交互动和教学管理等功能。
[](https://github.com/icedcoke23/scratch-community/actions/workflows/ci.yml)
## 技术栈
| 层级 | 技术 |
|------|------|
| 前端 | Vue 3.5 + TypeScript + Vite + Element Plus + Pinia |
| 后端 | Spring Boot 3.2 + MyBatis-Plus 3.5 + Java 17 |
| 数据库 | MySQL 8.0 + Redis 7 + Caffeine 本地缓存 |
| 对象存储 | MinIO |
| 认证 | JWT + Refresh Token 双 Token 方案 |
| 实时通信 | WebSocket (STOMP) + SSE |
| 安全 | DFA 敏感词过滤 + 分布式锁 + 滑动窗口限流 + 幂等性保护 |
| 可观测性 | TraceId 链路追踪 + Resilience4j 熔断器 + Prometheus + Grafana |
| 部署 | Docker Compose + Nginx + GitHub Actions CI/CD |
## 项目结构
├── frontend-vue/ # 前端 Vue 3 项目
│ ├── src/
│ │ ├── api/ # API 接口层 (52 个模块, 300+ 方法)
│ │ ├── views/ # 页面组件 (60+ 路由)
│ │ ├── components/ # 通用组件 (80+ 组件)
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── router/ # 路由配置
│ │ ├── i18n/ # 国际化(中/英/日/韩)
│ │ ├── composables/ # 组合式函数
│ │ ├── styles/ # 全局样式
│ │ └── utils/ # 工具函数
│ └── public/scratch3/ # Scratch 编辑器静态资源
│
├── backend/ # 后端 Spring Boot 多模块项目
│ ├── scratch-app/ # 启动模块 + 健康检查
│ ├── scratch-user/ # 用户模块 (注册/登录/OAuth/家长/积分/成就/贡献)
│ ├── scratch-social/ # 社交模块 (Feed/评论/关注/收藏/博客/讨论/工作室/团队/AI点评/协作)
│ ├── scratch-judge/ # 判题模块 (题目/竞赛/Rating/学习路径/AI出题/防作弊)
│ ├── scratch-classroom/ # 班级模块 (作业/学情分析/成绩簿/教学计划/教程/资源/查重)
│ ├── scratch-editor/ # 编辑器模块 (项目CRUD/SB3解析/版本/编辑锁/云变量/背包/资产库/代码分析)
│ ├── scratch-system/ # 系统模块 (通知/审核/配置/敏感词/轮播图/举报/徽章/活动/邮件/帮助/私信)
│ ├── scratch-common-core/ # 通用核心 (异常处理/工具类/Swagger)
│ ├── scratch-common-security/ # 安全认证 (JWT/权限/限流/幂等)
│ ├── scratch-common-redis/ # Redis 缓存
│ ├── scratch-common-audit/ # 审计日志
│ ├── scratch-sb3/ # SB3 文件解析 + 智能分析引擎
│ └── scratch-judge-core/ # 判题核心
│
├── sandbox/ # Node.js 判题沙箱 (进程隔离 + seccomp)
├── docker/ # Docker 部署配置
├── deploy/ # 部署脚本
├── docs/ # 项目文档
└── scripts/ # 运维脚本
## 核心功能
### 作品与创作
- Scratch 在线编辑器(TurboWarp iframe 嵌入)
- 作品上传、展示、点赞、收藏、Remix 再创作
- AI 辅助代码审查(SSE 流式输出)
- 编辑锁机制(Redis 分布式锁,5 分钟超时自动释放)
- 封面智能提取(保存时自动从 VM 提取舞台截图)
- 版本管理(版本列表 / 对比 / 回滚)
- 协作编辑(WebSocket 实时光标 + 聊天)
### 智能代码分析引擎
- **编程概念检测**: 15 种编程概念识别(循环/条件/变量/过程/并行/消息/克隆等)
- **代码质量评分**: 4 维度评分(命名 20% + 结构 30% + 抽象 30% + 交互 20%)
- **代码风格检测**: 5 类问题(命名规范/代码组织/复杂度热点/资源管理/最佳实践),0-100 分
- **代码相似度检测**: 5 维度加权(积木余弦 25% + 脚本拓扑 15% + 自定义积木 Jaccard 20% + 变量 Jaccard 15% + 3-gram 25%)
- **扩展分析**: 使用统计 + 兼容性检查 + 教育类识别 + 多样性评分 + 建议生成
- **解析性能监控**: 耗时/内存/缓存命中率/慢解析警告
- **批量分析**: 最多 20 个项目同时分析
- **项目对比**: 2-5 个项目概念矩阵 + 质量对比 + 复杂度对比
### 题库系统
- 选择题 / 多选题 / 判断题 / Scratch 编程题
- 编程题分屏答题界面(左侧题目 + 右侧编辑器)
- 全屏切换(分栏 / 全屏题目 / 全屏编辑器)
- 每日一题推荐
- 题解与讨论
- AI 出题(智能生成题目)
- 题单管理(创建 / 排序 / 发布)
- 学习路径(个性化推荐 + 能力画像)
### 竞赛系统
- 竞赛创建与管理(自动状态转换 + 定时结算)
- 实时评测反馈(SSE)
- 排行榜与成绩统计
- Rating 系统(ELO 评分 + 排名 + 历史 + 趋势 + 统计)
- 防作弊(切屏检测 + 代码相似度检测 + 作弊风险报告)
- 成绩导出(CSV)
### 社交互动
- Feed 信息流(最新/最热/关注排序 + 多样性注入 + 推荐原因)
- 讨论区(问答 / 分享 / 通用 + 置顶 + 精华)
- 博客系统(Markdown 编辑 + 发布 + 评论)
- 工作室(项目集合 + 成员管理 + 评论)
- 团队(协作组 + 成员角色)
- 排行榜(点赞 / 评分 / 贡献 / Rating)
- 消息与通知(WebSocket + SSE 双通道实时推送)
- 私信系统(会话 + 屏蔽)
- 搜索(全文搜索 + 高级搜索 + 搜索建议 + 热门关键词)
- 推荐系统(猜你喜欢 / 相似项目 / 趋势 / 标签推荐)
- 标签系统(标签云 / 项目标签 / 标签浏览)
- 收藏夹(多收藏夹管理)
### 教学管理
- 班级创建与邀请码加入
- 作业布置与批改(批量批改 + 评分模板 + 同伴互评)
- 作业查重(SimilarityDetector + Caffeine 缓存 + 风险摘要)
- 代码风格检测(5 类问题 + 严重程度分级)
- 成绩簿(班级统计 + 学生趋势 + CSV 导出)
- 学情分析(Caffeine 缓存 + 能力画像 + 雷达图 + 薄弱环节)
- 教学计划(课时管理 + 进度追踪)
- 互动教程(步骤引导 + 进度追踪)
- 课堂资源(上传 / 下载 / 管理)
- 课堂讨论与公告
### 系统管理
- 用户与角色管理(批量操作 + 角色权限配置)
- 内容审核(AI 文本/图片审核 + 举报管理)
- 敏感词过滤(DFA 自动机 + 动态加载)
- 公告与轮播图管理
- 操作日志审计
- 系统配置(分类管理 + 批量更新)
- 死信队列管理
- 邮件模板管理
- 帮助文章管理
- 徽章与成就系统
- 活动管理
- 性能监控仪表盘
### 积分与成就
- 5 种积分规则 + 等级体系
- 每日签到 + 连续签到奖励
- 成就系统(多分类 + 进度追踪)
- 徽章系统(展示 + 授予 + 撤销)
- 贡献值排行
### 其他
- 家长看板(关联学生 + 学习数据监控)
- OAuth 第三方登录
- PWA 支持(Service Worker + 离线模式)
- 国际化(中/英/日/韩 4 种语言)
- 深色模式
- 移动端适配
- 无障碍(WCAG 2.1 AA)
## API 概览
| 模块 | 控制器数 | 端点数 | 核心功能 |
|------|---------|--------|---------|
| scratch-editor | 10 | ~60 | 项目CRUD/SB3/版本/编辑锁/云变量/背包/资产库/代码分析 |
| scratch-social | 14 | ~90 | Feed/评论/关注/收藏/博客/讨论/工作室/团队/AI点评/协作/搜索/推荐/标签 |
| scratch-classroom | 9 | ~55 | 作业/学情/成绩簿/教学计划/教程/资源/查重/风格检测 |
| scratch-system | 20 | ~85 | 通知/审核/配置/敏感词/轮播图/举报/徽章/活动/邮件/帮助/私信 |
| scratch-judge | 10 | ~55 | 题目/竞赛/Rating/学习路径/AI出题/防作弊/导出 |
| scratch-user | 6 | ~55 | 注册登录/OAuth/家长/积分/成就/贡献/管理 |
| scratch-app | 1 | 7 | 健康检查/就绪探针/存活探针 |
| **合计** | **71** | **~408** | |
## 前端页面
| 模块 | 页面数 | 核心页面 |
|------|--------|---------|
| 社区 | 22 | 信息流/项目详情/用户主页/讨论/博客/排行榜/搜索/工作室/团队/标签/活动/公告 |
| 编辑器 | 2 | 新建项目/编辑项目 |
| 协作 | 1 | 协作编辑 |
| 判题/竞赛 | 10 | 题库/题目详情/题解/题单/竞赛/评测记录/学习路径/AI出题 |
| 教室 | 11 | 班级管理/作业/学情分析/成绩簿/课堂资源/讨论/公告/教学计划/学生画像 |
| 个人 | 8 | 积分/通知/消息/背包/设置/成就/家长看板/离线模式 |
| 管理后台 | 26 | 仪表盘/用户/作品/评论/审核/配置/竞赛/班级/角色/日志/健康/活动/帮助/邮件/敏感词/死信/举报/徽章/AI审核/讨论/题解/工作室/公告/教学计划 |
| **合计** | **~80** | |
## 快速开始
### 环境要求
- JDK 17+
- Node.js 18+
- MySQL 8.0+
- Redis 7+
- MinIO
### 后端启动
cd backend
mvn package -Dmaven.test.skip=true
# 配置数据库连接
export DB_USER=scratch
export DB_PASSWORD=scratch123
export REDIS_PASSWORD=
java -jar scratch-app/target/scratch-app-0.1.0-SNAPSHOT.jar \
--spring.profiles.active=dev
### 前端启动
cd frontend-vue
npm install
npm run dev
访问 http://localhost:5173
### Docker 部署
cd docker
docker-compose up -d
详见 [部署文档](docs/DEPLOYMENT.md)。
## API 文档
后端集成 SpringDoc OpenAPI(Swagger UI),启动后端后访问:
http://localhost:8080/swagger-ui.html
API 概览见下文「API 概览」章节,各模块端点定义位于 `backend/scratch-*/src/main/java/.../controller/`。
## CI/CD
项目使用 GitHub Actions 实现自动化:
- **CI 流水线** (`ci.yml`): Lint + Type Check + Test + Security Scan
- **部署流水线** (`deploy.yml`): 构建 Docker 镜像 → 推送 GHCR → SSH 部署 → 健康检查 → 自动回滚
- 支持多环境:develop (自动) / staging (手动) / production (手动 + 回滚保护)
## 配置
复制 `.env.example` 为 `.env` 并填写配置:
cp .env.example .env
关键配置项:
- 数据库连接信息
- Redis 连接信息
- MinIO 访问密钥
- JWT 密钥
- Sandbox API Key
## 国际化
支持四种语言:
- 简体中文(zh-CN)
- English(en-US)
- 日本語(ja-JP)
- 한국어(ko-KR)
## 文档
| 文档 | 说明 |
|------|------|
| [部署指南](docs/DEPLOYMENT.md) | Docker Compose 一键部署 + 环境变量配置 |
| [开发进度](docs/PROGRESS.md) | 版本历史 + 里程碑 + 功能完成度 |
| [开发计划](docs/plans/ToDo.md) | 待开发项 + 架构审计发现 + 优化路线图 |
| [优化建议](docs/OPTIMIZATION_SUGGESTIONS.md) | 与官方 Scratch 对比 + 优化路线图 |
| [项目深度分析](docs/PROJECT_DEEP_ANALYSIS.md) | 架构/数据库/业务模块/前端机制详解 |
| [项目创作分析](docs/PROJECT_CREATION_ANALYSIS.md) | SB3 处理/编辑器集成/Remix/协作编辑 |
| [ER 图](docs/ER_DIAGRAM.md) | 23+ 张表实体关系图 |
| [架构决策](docs/ADR.md) | 6 个关键架构决策记录 |
| [编码规范](docs/CODING_STANDARDS.md) | Java/TS/数据库/API/Git/安全规范 |
| [无障碍](docs/accessibility.md) | WCAG 2.1 AA 标准 |
## 最近更新 (v4.9.7)
- **并发安全**: `CollabService.handleEdit` 版本号比较改为 `ConcurrentHashMap.compute()` 原子化;`SystemController` SSE emitter 替换改为 `compute()` 原子关闭旧连接并写入新连接
- **幂等保护**: 作业提交/回复、比赛提交/虚拟参赛、博客/讨论/工作室写操作、用户关注/班级/管理员批量创建等关键 POST 接口统一添加 `@Idempotent`
- **依赖注入规范**: `AiReviewService`、`AiProblemGeneratorService`、`CompetitionController`、`AiReviewController` 的 `@Autowired(required=false)` 字段注入统一改为 `ObjectProvider` 构造器注入
- **错误处理**: `AiReviewService.toVO()` JSON 解析失败由静默吞异常改为记录 `WARN` 日志并保留空集合降级
- **性能优化**: `SocialService.getComments` 与 `PrivateMessageService.getConversations/getMessages` 由 N+1 查询改为批量 IN 查询 + Map 索引组装
- **API 契约**: `TutorialController`、`TeachingPlanController`、`HomeworkController`、`UserController.classProjects`、`AdminController` 多处 `R>` 收敛为具体泛型
- **安全**: `CloudVariableWebSocket.set` 增加 token 校验与项目所有者权限校验;`applicationContext` 标记 `volatile`
- **架构审计**: 完成第十轮深度审计,新增 SSE 资源管理、幂等 Key 命名空间、云变量鉴权粒度、R>/Map 弱类型等 8 项【待审核】项;`C2-1`、`C2-2` 标记为已完成
- **文档/仓库治理**: `ToDo.md` 已完成项迁移至 `changeList.md`;README 更新至 v4.9.7;仓库保持 private,CI 额度不足时临时 public 执行后立即恢复
## 历史更新 (v4.9.6)
- **测试修复**: `UserServiceTest` 密码值从 `Test123`(7 位)更新为 `Test1234`(8 位,含大写/小写/数字 3 种类型),适配新增的 `PasswordValidator` 密码强度策略
- **CI 修复**: 修复 private 仓库 GitHub Actions runner 额度耗尽导致的 CI 全部失败;临时切换 public 执行 CI(run 27791202807 全部 8 个 job 通过)后立即恢复 private
- **文档整理**: `ToDo.md` 中已完成项归档至 `changeList.md`,`ToDo.md` 仅保留待开发与【待审核】项;`changeList.md` 新增 2026-06-19 CI 修复与测试修复记录
## 历史更新 (v4.9.5)
- **安全/架构修复**: `HelpArticleController` / `HelpArticleCompatibilityController` 迁移为 `HelpArticleVO` / `HelpArticleDTO`,消除 mass-assignment 风险
- **并发安全**: `EditLockService` 使用 Lua 脚本原子化续期/释放,修复 TOCTOU 竞态;`PointService.dailyCheckin` 使用 Redis SETNX 原子标记避免重复发积分;`UserService.register` / `HomeworkService.submit` 捕获 `DuplicateKeyException` 防御并发重复
- **依赖注入统一**: `PointService`、`HealthController` 改为 `ObjectProvider` 构造器注入;`NotifyService` 统一使用 `@RequiredArgsConstructor`
- **可观测性**: `HealthController` MinIO 健康检查由 `listBuckets()` 改为轻量 `bucketExists("{prefix}sb3")`
- **异常处理**: `HomeworkService.toVO` 静默吞异常改为记录 WARN 日志
- **审计治理**: 更新 `docs/plans/ToDo.md` 与 `docs/changeList.md`,新增第七轮审计待审核项
- **文档/仓库治理**: 整理 `docs/plans/ToDo.md` 与 `docs/changeList.md`,将本轮已完成的修复项归档;仓库已恢复私人状态;创建 v4.9.5 标签
## 历史更新 (v4.9.4)
- **CI/文档治理**: 在 `docs/DEPLOYMENT.md` 新增私人仓库 GitHub Actions 额度耗尽时的应急公开/恢复流程;`frontend-vue/package.json` 新增 `lint:all` 脚本统一执行 ESLint + Prettier 检查
- **性能修复**: `ProjectService`、`HomeworkGradingService` 改为注入 Spring `ObjectMapper` Bean,消除方法内重复 `new ObjectMapper()` 实例化
- **数据库审计**: 核对关键高频字段索引(`project_tag.tag_id`、`project_comment.parent_id`、`notification(user_id,is_read)`),确认已存在无需重复添加
- **上一轮修复延续**: 仓库整理与变更日志归档(`docs/changeList.md`),保持 ToDo.md 与已完成项同步
## 历史更新 (v4.9.3)
- **安全加固**: TagController 项目标签 IDOR 修复;NotificationController/DiscussionController/BlogController/StudioController/CollabController 写操作补齐 `@RequireRole`;OAuth 登录接口添加 `@RateLimit`;PublicPathConfig 移除过宽公开路径;EmailTemplate 改用 DTO 防止 mass-assignment
- **前端质量修复**: AsyncErrorBoundary 定时器泄漏修复;LoginDialog 卸载时清理 interval;sanitize.ts 改用 DOMPurify;ProjectDetailView 路由参数响应式;request.ts 重试拦截器前置;AppHeader 硬编码中文迁移至 i18n
- **仓库整理**: README/CHANGELOG/ToDo.md 同步;仓库恢复为私人状态;新增 v4.9.3 tag
## 许可证
本项目仅供学习和研究使用。
标签:Scratch, Spring Boot, Vue 3, 在线教育, 域名枚举, 少儿编程, 版权保护, 社区平台, 自定义请求头