daf36908ef
Adds a FileDropZone at the bottom of the day view where users can drop all session files at once. Filenames are regex-matched to subjects using their animal_id_string (word-boundary aware, so "2852" won't match "28520"). Only metadata is recorded — files are never uploaded. Backend: new session_files table (id, daily_status_id, filename, file_size BIGINT, file_type, last_modified, notes). Routes: POST /api/daily-statuses/:id/files (batch create) GET /api/daily-statuses/:id/files DELETE /api/session-files/:id Frontend: FileDropZone shows per-subject match groups, unmatched files, and a warning for subjects with no match. After saving, registered files are displayed with delete capability. test-files/: generate_test_files.sh creates 4 dummy files per subject (2×bin, 2×csv) with correct naming for drag-and-drop testing. Pre-generated for 2026-04-23 with IDs 2852/3076/3077/3078. Tests: 19 tests covering drag state, regex matching, save payload, partial-overlap prevention, multi-subject batching, and delete. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
509 B
509 B
| 1 | trial_num | timestamp | outcome | reaction_time_ms | reward |
|---|---|---|---|---|---|
| 2 | 1 | 1.823 | Failure | 176 | 0 |
| 3 | 2 | 2.646 | Failure | 378 | 0 |
| 4 | 3 | 3.469 | Failure | 138 | 1 |
| 5 | 4 | 4.292 | Success | 150 | 1 |
| 6 | 5 | 5.115 | Success | 204 | 1 |
| 7 | 6 | 5.938 | Success | 209 | 0 |
| 8 | 7 | 6.761 | Success | 369 | 0 |
| 9 | 8 | 7.584 | Failure | 84 | 0 |
| 10 | 9 | 8.407 | Failure | 403 | 0 |
| 11 | 10 | 9.230 | Success | 340 | 0 |
| 12 | 11 | 10.053 | Success | 442 | 1 |
| 13 | 12 | 10.876 | Success | 355 | 0 |
| 14 | 13 | 11.699 | Success | 280 | 0 |
| 15 | 14 | 12.522 | Failure | 430 | 1 |
| 16 | 15 | 13.345 | Success | 60 | 1 |
| 17 | 16 | 14.168 | Failure | 102 | 0 |
| 18 | 17 | 14.991 | Success | 213 | 0 |
| 19 | 18 | 15.814 | Success | 54 | 1 |
| 20 | 19 | 16.637 | Failure | 88 | 0 |
| 21 | 20 | 17.460 | Failure | 290 | 1 |