SpecialX
|
1a5fa78fa6
|
feat(config-service): split config-service from iam for plugin/layout config
- new NestJS service on port 3011/gRPC 50059 (ADR-026)
- owns 6 config_ tables (plugin/role-mapping/role-layout/layout-tpl/user-override/outbox)
- GraphQL Federation 2 subgraph with DataLoader + RouterAuthGuard
- gRPC ConfigService + admin REST CRUD + user REST API
- three-layer merge: registry.defaultProps + roleMapping.widget_props + userOverride.props
- Redis cache with 5min TTL
- registered in apollo-router supergraph + docker-compose + port-allocation
Implements M3 of v2.1 migration plan.
|
2026-07-15 02:13:03 +08:00 |
|
SpecialX
|
78e406b317
|
feat(content): v2 扩展 Elective/LessonPlan/CoursePlan 三业务域
新增 3 个业务域(10 RPC):
- ElectiveService: 选修课列表/学生选课记录/选课/退课(含容量与重复校验)
- LessonPlanService: 教师备课列表/学生备课列表(仅 published)/详情
- CoursePlanService: 学生课程计划列表/详情
- KnowledgeGraphService.GetKnowledgePath: 与 GetLearningPath 同实现
新增 4 张 MySQL 表(elective_courses/selections/lesson_plans/course_plans),含完整索引。
新增 11 个权限点,覆盖 admin/teacher/student/parent 四角色。
proto 由 4 Service/22 RPC 扩展至 7 Service/32 RPC,v1 全部 RPC 保持向后兼容。
修复 logger.ts pino 导入: default import 在 NodeNext ESM 下不可调用,
改用 named import(与 iam/msg/core-edu 对齐)。
Docker 本地测试全部通过(HTTP + gRPC 双协议),健康检查、
Elective/LessonPlan/CoursePlan CRUD、4 个新 gRPC Service 全部验证通过。
nextstep-v2.md 已创建,记录上下游依赖与 6 项联调待办。
|
2026-07-14 17:54:37 +08:00 |
|
SpecialX
|
fb23c5234e
|
feat(msg): announcements 公告模块 + sendBatch 批量优化 + 权限扩展 + nextstep 文档
|
2026-07-14 15:57:41 +08:00 |
|
SpecialX
|
a6b0c54fba
|
fix: 修复登录路由 + 端口冲突 + Prometheus 配置 + outbox 表结构 + 补充监控基础设施
1. teacher-portal 登录 JSON 解析错误修复
- 根因:next.config.js rewrites /api/auth/* → gateway /api/auth/*,
但 gateway 只在 /api/v1 路由组下注册代理,/api/auth/* 返回 404 纯文本
- 修复:rewrites 映射 /api/auth/* → /api/v1/iam/*(对齐 iam controller @Controller("v1/iam"))
2. msg / data-ana 端口冲突修复
- 根因:msg env.ts PORT 默认 3006,与 data-ana(config.py http_port=3006)冲突
- 修复:msg PORT 默认 3006→3007(对齐端口分配表 msg=3007, data-ana=3006)
3. Prometheus classes-service 3001 DOWN 修复
- 根因:classes 已合并入 core-edu(P3 裁决 C1),但 prometheus.yml 仍有 classes-service scrape 配置
- 修复:从 prometheus.yml 删除 classes-service job
4. iam outbox 表 aggregate_id 列长度修复
- 根因:iam_outbox.aggregate_id VARCHAR(32),但 UUID 是 36 字符,导致 "Data too long" 错误
- 修复:DDL 中 VARCHAR(32) → VARCHAR(36);ALTER TABLE 修复现有数据库
5. 补充未搭建的监控基础设施
- docker-compose.yml 新增 Alertmanager(9093)/ Loki(3100)/ Promtail(observability profile)
- prometheus.yml alertmanager target 更新为 edu-alertmanager:9093
验证:
- TS typecheck 19 项目全部通过
- 登录链路 teacher-portal → gateway → iam 验证通过
- Prometheus targets 不再有 classes-service
- 3 个新基础设施容器(alertmanager/loki/promtail)启动成功
AI identity: trae-main(基础设施修复会话)
|
2026-07-11 09:22:09 +08:00 |
|
SpecialX
|
61d824924a
|
fix: 修复集成测试中发现的全部 bug — 15 服务端到端验证通过
修复涵盖 6 大类问题:
1. api-gateway
- 路径前缀剥离 /api 而非 /api/v1,保留下游 /v1/ controller 前缀
- JWKS URL 默认值修复
- publicPaths 白名单对齐 /v1/iam/*
2. iam
- iam.module.ts exports 补充 PermissionCacheService 和 IamRepository
- main.ts resolveProtoPath() 多路径探测 proto 文件
3. core-edu
- app.module.ts AuthMiddleware 全局注册
4. BFF 层 GraphQL 端点(teacher-bff / parent-bff / student-bff)
- teacher-bff: mock dataScope OWN→SELF 对齐 GraphQL enum;WHATWG Request header .get() 提取
- parent-bff: handleNodeRequestAndResponse 不存在 → 直接 yoga(req,res);WHATWG Request header .get() 提取
- student-bff: auth.resolver 移除 ActionState 信封返回扁平对象;WHATWG Request header .get() 提取
5. ai
- Kafka 事务降级 + 10s 超时
- gRPC 拦截器降级
- dev mode 禁用事务模式
6. 前端 + 共享包
- teacher-portal: MF 插件条件实例化 + transpilePackages + extensionAlias
- ui-components: error-boundary.tsx 添加 use client
- ui-tokens: tailwind-theme.css 移除 @layer base
- shared-ts: 导出从源码改为 dist 编译产物;OutboxModule global:true
7. infra
- .gitignore 补充 keys/ *.pem *.key secrets/ 排除规则
- infra/init-sql/02-all-services-schema.sql 36 张表 DDL
验证结果:
- TS typecheck: 19 个 workspace 项目全部通过
- Go vet + Ruff: 通过
- 15 服务全部启动成功
- 3 个 BFF GraphQL 端点 + 4 个前端页面全部 200
- Gateway → iam → core-edu 端到端链路验证通过
AI identity: trae-main(集成测试修复会话)
|
2026-07-11 01:41:46 +08:00 |
|