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
37ef6f9dd7
feat: add college archive fields
CI 检查 / lint (pull_request) Has been cancelled
CI 检查 / typecheck (pull_request) Has been cancelled
CI 检查 / test (pull_request) Has been cancelled
2026-07-21 15:35:35 +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
c11f6bb614
fix: harden DingTalk student synchronization
2026-07-18 14:51:53 +08:00
f7328d670d
fix: 归档删除改为软删除
2026-07-17 14:13:17 +08:00
559b8a56e9
feat: add attendance device SN classroom bindings
2026-07-16 10:22:23 +08:00
8ba51f48c0
fix: map expense type sort order column
2026-07-16 10:22:23 +08:00
e45da7f998
feat: improve attendance scheduling and API validation
2026-07-14 23:12:14 +08:00
c75a08affe
feat: add student wallet utility billing
2026-07-14 20:42:21 +08:00
598b4e8acd
feat: link deposits to bill payment
2026-07-14 16:38:38 +08:00
811e7ce826
feat: show DingTalk punch device details
2026-07-14 11:20:41 +08:00
f98c0ccaa8
refactor(rooms): remove dorm gender restrictions
2026-07-13 16:12:57 +08:00
aa1ed7db56
refactor: resolve remaining field audit issues
2026-07-13 16:12:57 +08:00
0533c30ece
refactor(classes): preserve student membership history
2026-07-13 16:12:57 +08:00
1f32d1285b
refactor(deposits): remove refund approval remnants
2026-07-13 16:12:56 +08:00
0377acd33b
refactor: remove residual campus and department fields
2026-07-13 16:12:22 +08:00
b9b295c997
refactor: remove unused classroom fields
2026-07-13 09:34:15 +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
e26a8e816e
fix(attendance): normalize DingTalk match statuses
...
Store and validate stable English status codes for unmatched, pending, and matched attendance records so import, filtering, and auto-match use the same values.
2026-07-10 14:11:55 +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
22bc1876d8
refactor: remove departmentId from Class entity
2026-07-09 17:32:37 +08:00
ef1b46b9f4
refactor: replace UserDingMapping with StudentDingMapping entity
2026-07-09 16:53:25 +08:00
7666baceff
fix: add missing Bed and Locker entities to TypeORM registration
2026-07-09 14:00:58 +08:00
454a0d24c6
fix: release beds/lockers in batchCheckOut
...
The batchCheckOut method was not releasing assigned beds and lockers
after checkout, leaving them orphaned as 'occupied'. Added the same
release pattern used in checkOut() — using runner.manager.update()
since batchCheckOut operates inside a QueryRunner transaction.
2026-07-09 12:05:36 +08:00
a6fbb71251
feat: add bed_id and locker_id to Occupancy entity
2026-07-09 11:52:34 +08:00
513b6c11e4
fix: add @Unique constraints for Bed and Locker entities
2026-07-09 11:51:29 +08:00
ad6c303369
feat: add Bed and Locker entities with Room FK
2026-07-09 11:49:59 +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
edaf3670ee
fix: add onDelete cascade for User FK in class_teacher and students entities
2026-07-08 14:32:19 +08:00
8c791ec4f3
fix: add build script for server, fix duplicate index in user_ding_mapping entity
2026-07-08 14:18:41 +08:00
38f6e18cca
Task 3: sync RENTAL class_schedule on rental create/update/delete
...
- ClassroomRentalsService.create/update now upsert a ClassSchedule row with schedule_type='RENTAL' and rental_id set.
- ClassroomRentalsService.remove deletes the synced schedule row; update to 'cancelled' also removes it.
- SchedulesService.getClassroomOccupancy explicitly returns INTERNAL and RENTAL schedules.
- Make classId/teacherId/rentalId nullable in ClassSchedule entity to support rental schedules.
- Add unit tests for rental schedule sync and mixed-type occupancy.
2026-07-06 17:55:08 +08:00
8bd59b8ac6
feat: complete student archive subsystem — 7 entities, PDF report, frontend profile page
2026-07-06 15:58:36 +08:00
1c097dc230
feat: new classrooms default to 'reserved' status instead of 'available'
2026-07-06 15:26:35 +08:00
8d810374f0
feat: add source tracking fields to Department for sync idempotency
2026-07-06 15:10:11 +08:00
94251b66ce
fix: TypeORM rejects string|null union type for mysql
2026-07-06 10:49:59 +08:00
6ba7213cc4
feat(deposits): add refund rejection path with reason
2026-07-06 09:48:20 +08:00
ad24c9ef23
feat: add department_id to all business entities
2026-07-05 23:45:05 +08:00
7d945029eb
feat: add Department and UserDepartment entities
2026-07-05 23:43:57 +08:00
9d9d4719b5
feat: add Student-User association and activate all notification TODOs
2026-07-05 23:42:22 +08:00
bb11ca1880
feat: add Notification entity
2026-07-05 22:56:54 +08:00
6d589f6faa
fix: remove null union types causing TypeORM Object inference on Deposit columns
2026-07-05 20:58:49 +08:00
f7cb7a9599
fix: add explicit datetime type to Deposit refund columns
2026-07-05 20:57:45 +08:00
2357db31dd
fix: remove broken Department relation from Class entity
2026-07-05 20:56:23 +08:00