- Cascade delete on all entities (student, module, UE, user, role, promotion)
- Fix Response body reuse bug (factory functions instead of constants)
- Student note viewing via CAS uid (strip non-digit prefix)
- Fix middleware page visibility for students in LOCAL mode
- Import result popup component (shared across all import pages)
- Fix student import to use numEtud from Excel
- Bulk student selection with promo change and delete
- Move UE/UE-Module API and pages from notes to admin module
- Move promotions page from students to admin module
- Multi-year maquette import with per-year promo selection
- Inline promo creation in maquette import
- Static Excel templates (students, notes, maquette)
- Fix XLSX export using blob download instead of writeFile
- Allow students to read modules list (GET /modules)
Add routes for modules, users, notes import, recap, and islands edit.
Update middleware to filter pages based on user role.
feat(admin): add modal for assigning teaching, replace delete icon with SVG
refactor(server): rename port variable to uppercase and add env support
feat(admin): add enseignants, users, filtering and role colors
refactor(AdminRoles): improve role UI and add permission mapping
feat(admin-users): add role colors, role filter, and modal for creating users
feat(admin): add EditModule component for module editing
feat(admin): add EditUser page for editing users and managing enseignements
feat(promo-select): display id and name in options for promo dropdown
feat: add edit module/user routes, inline coeff editing, UI tweaks
refactor: UI – icons, modal overlay, grid, subtitles, import margin
feat(notes): add NoteRecap island component for student grade recap
feat: add adjust controls to UI component
Add placeholder, value binding, onInput handler, apply/reset buttons,
and display of adjusted value.
feat(notes): add edition and recap pages, update styles and links
- PUT /ue-modules/{idModule}/{idUE}/{idPromo}: update coeff for
UE-Module-Promo association
- DELETE /ue-modules/{idModule}/{idUE}/{idPromo}: remove UE-Module-Promo
association
- requires employee role
- GET /ajustements: list all ajustements with optional numEtud/idUE
filters
- POST /ajustements: create new ajustement for student in UE
- Both require employee role
Add CRUD API for enseignements (prof-module-promo associations):
- POST /enseignements: Create with validation (201/409)
- GET /enseignements/{idProf}/{idModule}/{idPromo}: Read by composite
key (200/404)
- DELETE /enseignements/{idProf}/{idModule}/{idPromo}: Delete by
composite key (204/404)
Access control: Employee-only (403 Forbidden)
Tests: 7 unit tests added
Note: RBAC implementation pending (current access control is temporary)
- GET /promotions/{idPromo} returns promotion or 404
- PUT /promotions/{idPromo} updates year or 404
- DELETE /promotions/{idPromo} deletes promotion or 404
- Only employees allowed, otherwise 403
- replace Database with db instance
- use schema imports for tables
- use db.select, db.insert, onConflictDoUpdate
- remove manual connection handling and console logs
- improve type safety and maintainability
refactor(students): migrate to Drizzle ORM and async queries
Replace raw sqlite queries with Drizzle ORM. Remove the connect helper and use the
shared db instance and schema definitions. Convert getItself, getAll and
addStudents to async functions, use eq and lt helpers, and simplify promotion
handling. This improves type safety, maintainability, and allows non‑blocking
database access.
Add type="button" to the EditMobility and UploadStudents buttons
to prevent default form submission behavior.
Include a key prop on Student components in Promotion for stable list rendering.