Commit Graph

38 Commits

Author SHA1 Message Date
8656394b9b Refactor AI chat: streaming, tool calls, UI polish
All checks were successful
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
All checks were successful
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
Some checks failed
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