Clément Oudelet
720a380be8
PMPR-44 : fix formatting
2026-04-27 17:19:57 +00:00
Clément Oudelet
6c602cb10a
PMPR-44 : POST /notes/import-xlsx - importer des notes via Excel
2026-04-27 17:19:57 +00:00
djalim
bb09c1cce5
chore: formated tests
Check Deno code / Check Deno code (pull_request) Successful in 5s
Tests / Unit tests (pull_request) Successful in 12s
Tests / Integration tests (pull_request) Successful in 1m18s
Check Deno code / Check Deno code (push) Successful in 5s
Tests / Unit tests (push) Successful in 11s
Tests / Integration tests (push) Successful in 1m13s
2026-04-27 18:58:19 +02:00
djalim
2c5e4ebf11
feat(fresh.gen.ts): add routes for notes edition, recap and island recap
...
Check Deno code / Check Deno code (pull_request) Failing after 5s
Tests / Unit tests (pull_request) Successful in 12s
Tests / Integration tests (pull_request) Failing after 1m17s
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
2026-04-27 18:22:23 +02:00
djalim
378cbb0c06
style: format import success message and drop zone JSX
...
Check Deno code / Check Deno code (pull_request) Successful in 5s
Tests / Unit tests (pull_request) Successful in 12s
Tests / Integration tests (pull_request) Failing after 1m7s
Apply consistent string concatenation in ImportNotes and UploadStudents.
Format JSX drop zone for better readability.
2026-04-27 17:11:46 +02:00
djalim
d3de5c29e7
refactor: add migration, seed permissions, update permissions API
...
feat(notes): add XLSX import island and admin route
feat(upload): add drag‑and‑drop upload, template download, UI tweaks
2026-04-27 17:08:58 +02:00
djalim
733259e317
feat : fixed some page not being as described in the figma
2026-04-27 11:21:32 +02:00
djalim
fcc9547a30
feat(dev): add compose files and dev-login bypass route
...
- compose.prod.yml: production stack with registry image, healthcheck,
migration service
- compose.test.yml: local test stack with source mount and LOCAL=true
- routes/dev-login.ts: fake admin JWT login, only active when LOCAL=true
- routes/_middleware.ts: expose /dev-login as public route
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-26 23:01:59 +02:00
djalim
5ba8b8cb68
feat(ui): implement full UI layer for all modules
...
Add interactive island components and server partials for notes,
students, and admin modules, following the Figma prototype design.
- static/styles/ui.css: shared component library (buttons, tables,
chips, cards, filters, tabs, form inputs)
- notes: NotesView (student grade view with UE cards, promo tabs,
weighted averages), AdminConsultNotes, AdminUEs islands + partials
- students: ConsultStudents (list/filter/delete), AdminPromotions
(CRUD) islands + partials
- admin: AdminModules, AdminUsers, AdminRoles islands + partials
- All partials use State type with unknown cast for session access
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-26 22:54:10 +02:00
djalim
b0930b8da2
fix: correct handler bugs exposed by test suite
...
Check Deno code / Check Deno code (pull_request) Failing after 6s
Tests / Unit tests (pull_request) Successful in 13s
Tests / Integration tests (pull_request) Successful in 1m17s
- ajustements [numEtud]/[idUE]: fix .where() missing and() — PUT/DELETE
were applying only numEtud condition, modifying all rows for a student
- modules/users/enseignements POST: add try/catch, return 500 on invalid JSON
- modules/[idModule] PUT: add try/catch + type check on nom (string required)
- modules POST: add .trim() check to reject whitespace-only id/nom
- users POST: add .trim() check to reject whitespace-only id/nom/prenom
- ues POST: add .trim() check to reject whitespace-only nom
- notes POST: add type check (typeof number) and bounds check (0 ≤ note ≤ 20)
- ue-modules POST: add coeff >= 0 validation
Update robustness tests to reflect fixed behavior (remove [BUG] labels,
replace assertRejects with status code assertions).
2026-04-26 19:01:53 +02:00
djalim
6db04045f4
fix(lint): add version to drizzle-orm imports and prefix unused NOT_FOUND
2026-04-26 11:30:33 +00:00
anys
66183c2ad8
feat(api): implement UE-Module coefficient update and deletion endpoint
...
- 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
2026-04-23 14:01:40 +02:00
anys
9976b9e2b4
feat(api): implement UE-Module association get endpoint
...
- GET /ue-modules/{idModule}/{idUE}/{idPromo}: recover the detail of an
ue-module association by its composite key
- requires employee role
2026-04-23 11:57:30 +00:00
Clément Oudelet
457b008ba3
PMPR-46/47 : PUT et DELETE /notes/{numEtud}/{idModule}
2026-04-23 11:56:20 +00:00
anys
22750ba07e
feat(api): implement ajustement delete endpoint
...
- DELETE /ajustements/{numEtud}/{idUE}: remove ajustement from DB
- Requires employee role
- Returns 204 on success
2026-04-23 13:55:24 +02:00
anys
49876339bf
feat(api): implement ajustement update endpoint
...
- PUT /ajustements/{numEtud}/{idUE}: update ajustement valeur
- Requires employee role
2026-04-23 11:48:31 +00:00
Clément Oudelet
eeb087ea76
PMPR-36 : DELETE /ues/{idUE} - supprimer une UE
2026-04-23 13:44:43 +02:00
Clément Oudelet
7ad70c4525
GET /notes/{numEtud}/{idModule} - récupérer le détail d'une note pour un étudiant dans un module
2026-04-23 13:11:48 +02:00
Clément Oudelet
79669d60cf
PMPR-38 : POST /ue-modules - associer un module à une UE
2026-04-22 20:40:28 +02:00
anys
d3f1f433e1
feat(api): implement single ajustement retrieval endpoint
...
- GET /ajustements/{numEtud}/{idUE}: get ajustement by student numEtud
and UE id
- Requires employee role
2026-04-22 17:24:39 +00:00
anys
022994e5a7
feat(api): implement ajustements list and create endpoints
...
- GET /ajustements: list all ajustements with optional numEtud/idUE
filters
- POST /ajustements: create new ajustement for student in UE
- Both require employee role
2026-04-22 17:24:07 +00:00
Clément Oudelet
33d023986c
PMPR-34 : GET /ues/{idUE} - récupérer une UE par son id
2026-04-22 17:20:20 +00:00
Clément Oudelet
bbc9ea58e2
PMPR-37 : GET /ue-modules - liste les associations UE-Module
2026-04-22 17:15:54 +00:00
Clément Oudelet
96b7edf77f
PMPR-43 : POST /notes - créer une note
2026-04-22 17:14:45 +00:00
anys
2739a01ab5
fix(api): align enseignements route with Fresh file routing
...
- Replace flat file `[idProf]_[idModule]_[idPromo].ts`
with nested structure `[idProf]/[idModule]/[idPromo].ts`
- Ensures URL matches `/enseignements/{idProf}/{idModule}/{idPromo}`
2026-04-22 17:13:14 +00:00
anys
f3c1f10999
feat(api): implement enseignements CRUD endpoints
...
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)
2026-04-22 17:13:14 +00:00
djalim
92182b952f
feat(modules): add CRUD endpoints for module resource
...
Implement GET, PUT, DELETE for /modules/{idModule} with 404 handling.
2026-04-22 14:47:08 +02:00
djalim
cf3c7c0693
feat(admin/api): add modules endpoint with GET and POST handlers
2026-04-22 14:46:00 +02:00
djalim
6c18189d9f
chore(deps): update drizzle-orm to 0.45.2 and pg to 8.20.0
2026-04-22 14:40:19 +02:00
djalim
2c1fd7e5ad
feat(promotions): add CRUD endpoints for promotion by id
...
- 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
2026-04-22 14:40:19 +02:00
Clément Oudelet
2f15efe21e
PMPR-33 : POST /ues - créer une UE
2026-04-22 14:28:03 +02:00
Clément Oudelet
b2847a4a7d
PMPR-42 : GET /notes - récupère les notes
2026-04-22 12:20:59 +00:00
djalim
3f0c8d079f
feat(students): add promotions API for employees
2026-04-22 14:13:59 +02:00
djalim
4eaea48ebd
feat(students): add CRUD endpoints for student by numEtud
2026-04-22 14:11:29 +02:00
djalim
f959cf0d3a
feat(students): add CSV import endpoint for student data
2026-04-22 14:10:18 +02:00
djalim
0d45bd4c1c
refactor(students): simplify API, remove unused imports and helpers
...
refactor(students): add query param filtering, enforce employee role for POST
refactor(students): return created student in POST response
2026-04-22 14:06:01 +02:00
djalim
b5f134d016
feat(roles): add CRUD endpoints for role by id
2026-04-22 13:45:59 +02:00
djalim
9a3f49ecfe
feat(admin/api): add roles endpoint with GET and POST
2026-04-22 13:44:30 +02:00
djalim
5a86f69093
feat: add CRUD endpoints for users by id
2026-04-22 13:42:29 +02:00
djalim
03b58e7b0a
feat(admin/api/users): add GET and POST endpoints for users
2026-04-22 13:41:33 +02:00
djalim
9168ca53da
feat(admin): scaffold admin module and add GET /permissions endpoint
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-22 13:30:19 +02:00
Clément Oudelet
32ffbb7cda
PMPR-32 : GET /ues - liste toutes les UEs
2026-04-22 12:50:46 +02:00
djalim
9636242b42
refactor(mobility): switch to Drizzle ORM and remove raw SQLite usage
...
- 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.
2026-04-03 10:43:29 +02:00
djalim
58c8ff56ba
🐛 (components): add missing button types and keys
...
Check Deno code / Check Deno code (pull_request) Successful in 40s
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.
2026-01-09 12:41:51 +01:00
Kevin FEDYNA
4c54283bfd
Finalized students app
2025-01-28 10:03:20 +01:00
Kevin FEDYNA
e88045c952
Refactored students
2025-01-27 13:11:13 +01:00
Kevin FEDYNA
4ff76fdf6f
Added hidden admin only page prop effect
2025-01-27 10:39:42 +01:00
Kevin FEDYNA
1f3a723dbe
Merge branch 'main' into PMPR-27
2025-01-25 10:48:41 +01:00
Kevin FEDYNA
6d4d36e089
Fixed linting and formatting errors
2025-01-25 10:48:04 +01:00
Clayzxr
16b7579e10
Trying to make EditStudents works
2025-01-24 21:38:53 +01:00