8656394b9b
Refactor AI chat: streaming, tool calls, UI polish
CI / check (pull_request) Successful in 3m25s
2026-07-24 16:27:50 +08:00
f3b59935d6
feat: 集成 AI 对话与只读查询工具
2026-07-23 14:24:40 +08:00
6286864df0
修复学习记录实体未注册问题
2026-07-22 17:19:20 +08:00
393ee62168
feat: add Jinshuju student sync
CI / check (pull_request) Successful in 2m14s
2026-07-22 11:41:50 +08:00
54e283b687
feat: 增加宿舍查寝功能
2026-07-22 10:55:48 +08:00
cbc04fea4f
feat: add exam score management
CI 检查 / lint (pull_request) Has been cancelled
CI 检查 / typecheck (pull_request) Has been cancelled
CI 检查 / test (pull_request) Has been cancelled
2026-07-21 16:04:17 +08:00
990c0c16e6
feat: Docker Compose deployment + auto migration on startup
...
- docker-compose.yml: 移除 MySQL 容器,连宿主机 MySQL
- main.ts: 启动前通过独立 DataSource 执行 runMigrations
- migration-runner.ts: 独立 migration 执行器
- app.module.ts: TypeORM 配置增加 migrations
- 修复 InitialSchema 中 room_expenses 和 financial_operations 重复索引
2026-07-20 12:43:13 +08:00
375c7ec60b
feat: refine admin forms, attendance and finance workflows
...
Squash merge PR #23 .
Included changes:
- complete occupancy check-in required fields/default payload
- improve responsive admin management pages
- fix attendance edge cases and attendance period config
- refine wallet/finance-related workflow handling
Checks:
- npm run typecheck -w apps/admin
- npm run typecheck -w apps/server
2026-07-18 12:54:10 +00:00
5836b421d8
fix: harden financial transaction boundaries
2026-07-18 15:33:41 +08:00
559b8a56e9
feat: add attendance device SN classroom bindings
2026-07-16 10:22:23 +08:00
c75a08affe
feat: add student wallet utility billing
2026-07-14 20:42:21 +08:00
1c8bd08be4
feat: settle course attendance automatically
2026-07-13 10:26:38 +08:00
cc4f4dae4e
fix: audit remediation — SSE user scoping, FK transactional safety, UI error handling
...
- H4: scoped SSE import progress to exact userId match; non-HTTP events excluded from all subscribers
- H2: moved PRAGMA foreign_key_check inside SQLite transaction before COMMIT; violations rollback preserving old tables
- M1: removed dead axios-style error branch from extractErrorMessage (interceptor already unwraps)
- M2: split handleSave try/catch — save errors vs reload errors shown distinctly
- M3: added provider field validation before AI config test request
- Added SSE scoping regression tests (import service + controller)
- Added FK check failure rollback test (database-migrations.spec)
- Updated controller spec expectations for userId parameter
Co-authored-by: Code Review <branch-review>
2026-07-12 22:59:03 +08:00
1e1c476bc3
feat: add CASL authorization and AI configuration
2026-07-11 14:25:34 +08:00
8f0991a51f
feat: replace tenants with organization management
2026-07-10 21:27:26 +08:00
8ed1682b90
fix permissions and teacher attendance workflows
2026-07-10 20:40:52 +08:00
44105c1689
refactor: remove obsolete scaffolding and dead modules
...
Drop the unused root hello-world controller, empty CommonModule imports, development seeding code, legacy student report entity, stale DTOs, notification hook, and their placeholder tests.
2026-07-10 14:12:56 +08:00
6029d8e2fd
refactor(server): remove Department/UserDepartment entities, CampusScope, and departmentId from all entities
...
- Delete department.entity.ts, user-department.entity.ts
- Remove Department/UserDepartment from entities/index.ts
- Remove departmentId column from 18 entities (AttendanceRecord, ArchiveAttachment, Bill, ClassSchedule, Classroom, ClassroomRental, Deposit, DepositInstallment, ExamScore, LearningRecord, Occupancy, PersonalExpense, ResultArchive, Room, RoomExpense, Student, StudentEnrollment, StudentProfile, StudentReport)
- Remove departments/ module entirely
- Delete campus-scope.ts, campus-scope.middleware.ts (request-utils.ts kept — it's just IP extraction)
- Simplify common.module.ts to empty module
- Remove CampusScopeMiddleware from app.module.ts
- Remove all CampusScope injections and filter calls across all services
- Remove departmentId from all DTOs and controllers
- Simplify dingtalk/wecom sync to only sync users (no dept table)
- Update seed module to remove department seeding
- Clean frontend compilation
2026-07-09 17:51:32 +08:00
ef1b46b9f4
refactor: replace UserDingMapping with StudentDingMapping entity
2026-07-09 16:53:25 +08:00
c56f297f95
refactor: remove SeedModule from app imports (manual seed only)
2026-07-09 16:32:01 +08:00
7666baceff
fix: add missing Bed and Locker entities to TypeORM registration
2026-07-09 14:00:58 +08:00
42d3f0e27f
feat: DingTalk attendance import + integration config + expense types + UI polish
...
Server:
- Add DingTalk attendance import service with SSE progress streaming
- Add IntegrationConfig entity & module for multi-tenant DingTalk setup
- Add ExpenseType entity & ExpenseTypesModule
- Add SeedModule for DB initialization
- Add UserDingMapping entity for DingTalk user linkage
- Attendance service: import flow with dedup & student auto-mapping
- Rooms service: time-range overlap queries
- Sync controller/service: DingTalk integration wiring
- Permission guard: refactor to pure re-export
- Campus scope middleware: tenant-aware filtering
Admin UI:
- Attendance page: import UI with progress & result summary
- All pages: tableStyle/tablePagination standardization
- Login page: responsive styling
- Sensitive data: useViewSensitive hook for masked viewing
- Vite config: path aliases, build optimization
- Test infra: vitest config, test utilities
Docs: PRD DingTalk batch 1 & 2 design docs
2026-07-09 09:11:56 +08:00
b6990dd11b
feat: add student archive module with full CRUD APIs
2026-07-06 15:46:57 +08:00
2ce73b8fc3
feat: PM2 + Docker deployment config (MySQL container, PM2 for backend+frontend proxy)
2026-07-06 10:12:42 +08:00
7b298a615c
feat: complete PRD verification fixes and deployment readiness
...
- Add CommonModule to provide/export CampusScope across business modules
- Replace DepartmentsModule imports with CommonModule in 11 modules
- Add missing Class/Tenant repository imports to StudentsModule and SchedulesModule
- Fix service specs with CampusScope, ClassRepository, StudentRepository mocks
- Move better-sqlite3 to optionalDependencies for production Docker builds
- Rewrite Dockerfiles for monorepo root build context
- Update docker-compose.yml service build contexts
2026-07-06 01:55:35 +08:00
abcfbc6121
feat: add CampusScope request-level provider for data isolation
2026-07-05 23:50:22 +08:00
0e08770cf4
feat: add DepartmentsModule with DTO, Service, and stub controller
2026-07-05 23:47:41 +08:00
ce36a92482
fix: revert untracked ExpenseType refs, fix findByUser falsy cursor check
2026-07-05 23:05:25 +08:00
5f14b9ff15
feat: add NotificationsService with SSE subject pool
2026-07-05 23:01:26 +08:00
6737c00d96
fix: make JwtAuthGuard global to run before PermissionGuard, skip @Public routes
2026-07-05 21:23:42 +08:00
eb82b269c1
fix: add missing Class/ClassStudent/ClassTeacher/DepositInstallment to TypeORM entities list
2026-07-05 20:55:36 +08:00
09580e4a4e
feat: P2-15 cron-based DingTalk/WeCom sync with logging and incremental sync
...
- Add @nestjs/schedule dependency
- Create SyncLog entity (platform, syncType, status, recordsCount, errorMessage, timestamps)
- Create SyncState entity for tracking lastSyncAt per platform
- SyncService with @Cron('0 2 * * *') daily scheduled sync
- Incremental sync: tracks last_sync_at per platform, passes to integration APIs
- Full/incremental mode determined by existence of prior sync
- SyncController: POST /sync/trigger (manual), GET /sync/logs (history)
- Register SyncModule in AppModule with ScheduleModule
2026-07-05 20:48:43 +08:00
b7117ddf2d
fix: review blockers — entity registration, session enum, conflict date-range, @Type decorators
2026-07-05 20:20:43 +08:00
b6e308ae2a
feat: add Attendance module with batch, summary, calendar, and dingtalk endpoints
2026-07-05 19:44:10 +08:00
037c0e07e0
feat: add Schedules module with conflict detection and weekly view
2026-07-05 19:21:37 +08:00
ec26cb5f5e
feat(classes): add ClassesController with operation logging and permission guards
2026-07-05 19:05:18 +08:00
4f4cee157a
chore: commit oxfmt formatting changes and verify artifacts
2026-07-02 15:55:09 +08:00
46a817503e
feat(task1): restructure directories for turborepo monorepo
...
- Move backend/ to apps/server/ via git mv
- Move frontend/ to apps/admin/ via git mv
- Create packages/typescript-config/ with base, nestjs, and react-vite presets
2026-07-02 15:05:12 +08:00