|
5 | 5 | getSubmissionStatusMapWithId, |
6 | 6 | getSubmissionStatusMapWithName, |
7 | 7 | } from '$lib/services/submission_status'; |
8 | | -import { getTasks, getTask } from '$lib/services/tasks'; |
| 8 | +import { getTasks, getTasksWithSelectedTaskIds, getTask } from '$lib/services/tasks'; |
9 | 9 | import { getUser } from '$lib/services/users'; |
10 | 10 | import * as answer_crud from '$lib/services/answers'; |
11 | 11 |
|
@@ -199,36 +199,9 @@ export async function getTaskResultsByTaskId( |
199 | 199 | return new Map(); |
200 | 200 | } |
201 | 201 |
|
202 | | - // Step 2: Bulk fetch all tasks (1 query) |
203 | | - // Using Prisma's `where: { task_id: { in: taskIds } }` for efficient filtering |
204 | | - const tasks = await db.task.findMany({ |
205 | | - where: { |
206 | | - task_id: { in: taskIds }, // SQL: WHERE task_id IN ('id1', 'id2', ...) |
207 | | - }, |
208 | | - select: { |
209 | | - contest_id: true, |
210 | | - task_table_index: true, |
211 | | - task_id: true, |
212 | | - title: true, |
213 | | - grade: true, |
214 | | - }, |
215 | | - }); |
216 | | - |
217 | | - // Step 3: Bulk fetch all answers (1 query) |
218 | | - // Using compound conditions: task_id IN (...) AND user_id = userId |
219 | | - const answers = userId |
220 | | - ? await db.taskAnswer.findMany({ |
221 | | - where: { |
222 | | - task_id: { in: taskIds }, // SQL: WHERE task_id IN (...) |
223 | | - user_id: userId, // SQL: AND user_id = 'userId' |
224 | | - }, |
225 | | - select: { |
226 | | - task_id: true, |
227 | | - user_id: true, |
228 | | - status_id: true, |
229 | | - }, |
230 | | - }) |
231 | | - : []; |
| 202 | + // Step 2 & 3: Bulk fetch all tasks and answers (2 query) |
| 203 | + const tasks = await getTasksWithSelectedTaskIds(taskIds); |
| 204 | + const answers = userId ? await answer_crud.getAnswersWithSelectedTaskIds(taskIds, userId) : []; |
232 | 205 |
|
233 | 206 | // Step 4: Create Maps for O(1) lookup |
234 | 207 | const tasksMap = new Map(tasks.map((task: Task) => [task.task_id, task])); |
|
0 commit comments