Implement private finals calendar import, listing, and removal #20

Open
opened 2026-11-07 20:27:05 +00:00 by etashj · 0 comments
Member

Goal

Restore the personal finals handlers in crates/courses-web-api/src/backend/finals.rs, which currently return 501.

Scope

  • Implement GET /api/finals and POST/DELETE /api/finals/import using the retained personal storage.
  • Parse and validate calendar input, timezone, and term; replace an import atomically so failed input does not erase previous data.
  • Require verified identity and isolate imports and reads by owner.
  • Match the frontend contract; add OpenAPI coverage and tests for valid imports, malformed data, timezone/term errors, replacement, deletion, persistence, and cross-user denial.

Done when

A signed-in user can import, view, replace, and remove their own finals data without 501 responses. Update feature documentation.

See sites/docs/src/backend-development.md and sites/docs/src/api/user.md.

## Goal Restore the personal finals handlers in `crates/courses-web-api/src/backend/finals.rs`, which currently return 501. ## Scope - Implement `GET /api/finals` and `POST/DELETE /api/finals/import` using the retained personal storage. - Parse and validate calendar input, timezone, and term; replace an import atomically so failed input does not erase previous data. - Require verified identity and isolate imports and reads by owner. - Match the frontend contract; add OpenAPI coverage and tests for valid imports, malformed data, timezone/term errors, replacement, deletion, persistence, and cross-user denial. ## Done when A signed-in user can import, view, replace, and remove their own finals data without 501 responses. Update feature documentation. See `sites/docs/src/backend-development.md` and `sites/docs/src/api/user.md`.
Sign in to join this conversation.
No description provided.