feat: add CSV import for student event rankings

Let advisors load preference ranks from a converted CSV with fuzzy matching, known aliases, and a parse-preview-save page instead of relying on the ranking editor.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-28 23:41:13 -04:00
co-authored by Cursor
parent 2acd83a841
commit 4c91db37c2
13 changed files with 1156 additions and 59 deletions
+32
View File
@@ -0,0 +1,32 @@
# Import Student Event Rankings
**Created:** 2026-08-28
**Last updated:** 2026-08-28
**Description:** How to import student event preference rankings from a CSV.
## CSV format
```
Student Name,1,2,3,4,5,6
"Last, First",Video Game Design,Coding,Flight
First Last,Video Game,Coding
```
- `Student Name` is required. `Last, First` and `First Last` both work.
- Rank columns are `1` through `10`. Empty cells are skipped. Extra columns are ignored.
- Event cells may be the official name, the catalog short name, or a close miss. Fuzzy matching scores both.
- Known nicknames that fuzzy cannot reach are also accepted, including `Solar Racer`, `Challenging Tech`, `Digital Photo`, `Forensics`, `Micro Controller`, `Med Tech`, `Innovations & Inventions`, `Systems Control Tech`, `Structural Eng`, `Drone Challenge`, `Robotics`, and `Audio Podcast`.
## Steps
1. Sign in and open **Student Event Ranks** (`/students/event-ranking`).
2. Click **Import**.
3. Choose the CSV and click **Parse**.
4. Review matched rows (raw text, chosen event, score) and any unmatched or ambiguous issues.
5. Click **Save to Database**. If any matched student already has rankings, confirm the replace dialog.
Save replaces rankings only for students who have at least one accepted rank in the file. Other students are unchanged.
## What is not imported
Unmatched students, unmatched events, and ambiguous event names are reported in the preview and are not saved. Fix the CSV text or add the student/event in the app, then parse again.