Commit 4df6a78
authored
Yash/Automatic Task Creation (#89)
# Automatic Task Creation and Task Management Improvements
## Summary
This PR implements automatic task creation for all form submission types
and includes several improvements to task management, performance, and
UX.
## Key Changes
### 1. Automatic Task Creation
Tasks are now automatically created when users submit forms:
- **Intake Forms** (`/intake/submissions`): Creates `INTAKE_FORM_REVIEW`
tasks
- **Ranking Forms** (`/ranking/preferences`): Creates
`VOLUNTEER_APP_REVIEW` tasks
- **Secondary Application Forms** (`/volunteer-data/submit`): Creates
`VOLUNTEER_APP_REVIEW` tasks
- **Profile Updates** (`/user-data/me`): Creates `PROFILE_UPDATE` tasks
### 2. Performance Optimizations
**Backend:**
- Added eager loading (`joinedload`) for participant and assignee
relationships in task queries
- Extended `TaskResponse` schema to include `participant_name`,
`participant_email`, `participant_role_id`, `assignee_name`, and
`assignee_email`
**Frontend:**
- Removed individual participant API calls
- Parallelized admin and task fetching using `Promise.all()`
### 3. Task Navigation Improvements
- Task links now navigate to appropriate tabs based on task type:
- **Intake/Secondary App/Ranking tasks** → `/admin/users/{id}?tab=forms`
- **Matching tasks** → `/admin/users/{id}?tab=matches`
- **Profile Update tasks** → `/admin/users/{id}?tab=profile`
- Created shared utility `getParticipantLink()` in
`frontend/src/utils/taskLinkHelpers.ts`
- Applied to both task list rows and task detail modal
### 4. Bug Fixes
- **Task Description**: Fixed hardcoded "Task for matching" text - now
displays actual description from database
- **Gender Editing**: Added missing save buttons for user gender and
loved one's gender fields in participant/volunteer dashboards
## Technical Details
### Backend Changes
- `backend/app/routes/intake.py`: Removed task creation for
ranking/secondary forms
- `backend/app/routes/ranking.py`: Added task creation with proper error
handling
- `backend/app/routes/volunteer_data.py`: Added task creation with
proper error handling
- `backend/app/routes/user_data.py`: Improved transaction handling for
profile update tasks
- `backend/app/services/implementations/task_service.py`: Added eager
loading and participant role extraction
- `backend/app/schemas/task.py`: Extended `TaskResponse` with
participant/assignee data
- `backend/app/utilities/task_utils.py`: New utility for creating
volunteer app review tasks
### Frontend Changes
- `frontend/src/pages/admin/tasks.tsx`: Removed N+1 queries,
parallelized API calls, fixed participant/volunteer classification
- `frontend/src/components/admin/TaskRow.tsx`: Updated participant link
to use task type-based navigation
- `frontend/src/components/admin/TaskEditModal.tsx`: Updated participant
link in modal
- `frontend/src/components/dashboard/PersonalDetails.tsx`: Added save
buttons for gender fields
- `frontend/src/utils/taskLinkHelpers.ts`: New utility for generating
task-based navigation links
- `frontend/src/APIClients/taskAPIClient.ts`: Updated `BackendTask`
interface with new fields
## Notion ticket link
<!-- Please replace with your ticket's URL -->
[Ticket
Name](https://www.notion.so/uwblueprintexecs/Task-Board-db95cd7b93f245f78ee85e3a8a6a316d)
<!-- Give a quick summary of the implementation details, provide design
justifications if necessary -->
## Implementation description
*
<!-- What should the reviewer do to verify your changes? Describe
expected results and include screenshots when appropriate -->
## Steps to test
1.
<!-- Draw attention to the substantial parts of your PR or anything
you'd like a second opinion on -->
## What should reviewers focus on?
*
## Checklist
- [ ] My PR name is descriptive and in imperative tense
- [ ] My commit messages are descriptive and in imperative tense. My
commits are atomic and trivial commits are squashed or fixup'd into
non-trivial commits
- [ ] I have run the appropriate linter(s)
- [ ] I have requested a review from the PL, as well as other devs who
have background knowledge on this PR or who will be building on top of
this PR1 parent d80d9a1 commit 4df6a78
File tree
20 files changed
+518
-69
lines changed- backend/app
- routes
- schemas
- services/implementations
- utilities
- frontend/src
- APIClients
- components
- admin
- dashboard
- participant
- pages
- admin
- volunteer
- types
- utils
20 files changed
+518
-69
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
285 | 285 | | |
286 | 286 | | |
287 | 287 | | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
288 | 309 | | |
289 | 310 | | |
290 | 311 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
| 15 | + | |
| 16 | + | |
14 | 17 | | |
15 | 18 | | |
16 | 19 | | |
| |||
66 | 69 | | |
67 | 70 | | |
68 | 71 | | |
| 72 | + | |
69 | 73 | | |
70 | 74 | | |
71 | 75 | | |
| |||
74 | 78 | | |
75 | 79 | | |
76 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
77 | 90 | | |
78 | 91 | | |
79 | 92 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
227 | 227 | | |
228 | 228 | | |
229 | 229 | | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
230 | 274 | | |
231 | 275 | | |
232 | 276 | | |
| |||
350 | 394 | | |
351 | 395 | | |
352 | 396 | | |
| 397 | + | |
353 | 398 | | |
354 | 399 | | |
355 | 400 | | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
356 | 510 | | |
357 | 511 | | |
358 | 512 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| 17 | + | |
16 | 18 | | |
| 19 | + | |
17 | 20 | | |
18 | 21 | | |
19 | 22 | | |
| |||
26 | 29 | | |
27 | 30 | | |
28 | 31 | | |
| 32 | + | |
29 | 33 | | |
30 | 34 | | |
31 | 35 | | |
| |||
47 | 51 | | |
48 | 52 | | |
49 | 53 | | |
50 | | - | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
51 | 60 | | |
52 | 61 | | |
53 | 62 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
| 102 | + | |
102 | 103 | | |
103 | 104 | | |
104 | 105 | | |
105 | 106 | | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
106 | 110 | | |
107 | 111 | | |
108 | 112 | | |
109 | 113 | | |
| 114 | + | |
| 115 | + | |
110 | 116 | | |
111 | 117 | | |
112 | 118 | | |
| |||
Whitespace-only changes.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| |||
134 | 135 | | |
135 | 136 | | |
136 | 137 | | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
137 | 151 | | |
138 | 152 | | |
139 | 153 | | |
| |||
0 commit comments