|
1 | 1 | import { error } from '@sveltejs/kit'; |
| 2 | + |
| 3 | +import { default as db } from '$lib/server/database'; |
2 | 4 | import { getTasks, getTask } from '$lib/services/tasks'; |
3 | | -import * as answer_crud from './answers'; |
4 | | -import type { TaskResult, TaskResults, Tasks } from '$lib/types/task'; |
| 5 | +import * as answer_crud from '$lib/services/answers'; |
| 6 | + |
| 7 | +import type { TaskAnswer } from '$lib/types/answer'; |
5 | 8 | import type { Task } from '$lib/types/task'; |
| 9 | +import type { TaskResult, TaskResults, Tasks } from '$lib/types/task'; |
6 | 10 | import type { WorkBookTaskBase, WorkBookTasksBase } from '$lib/types/workbook'; |
| 11 | + |
7 | 12 | import { NOT_FOUND } from '$lib/constants/http-response-status-codes'; |
8 | | -import { default as db } from '$lib/server/database'; |
9 | 13 | import { getSubmissionStatusMapWithId, getSubmissionStatusMapWithName } from './submission_status'; |
10 | | -import type { TaskAnswer } from '../types/answer'; |
11 | 14 |
|
12 | 15 | // DBから取得した問題一覧とログインしているユーザの回答を紐付けしたデータ保持 |
13 | 16 | const statusById = await getSubmissionStatusMapWithId(); |
@@ -170,29 +173,19 @@ export async function getTaskResult(slug: string, userId: string) { |
170 | 173 | return taskResult; |
171 | 174 | } |
172 | 175 |
|
173 | | -export async function updateTaskResult(slug: string, submissionStatus: string, userId: string) { |
174 | | - const taskResult: TaskResult | null = await getTaskResult(slug, userId); |
175 | | - |
176 | | - if (taskResult) { |
177 | | - const status_id = statusByName.get(submissionStatus).id; |
| 176 | +export async function updateTaskResult(taskId: string, submissionStatus: string, userId: string) { |
| 177 | + const taskResult: TaskResult | null = await getTaskResult(taskId, userId); |
178 | 178 |
|
179 | | - const registeredTaskAnswer = await db.taskAnswer.findMany({ |
180 | | - where: { task_id: slug, user_id: userId }, |
181 | | - }); |
| 179 | + if (!taskResult) { |
| 180 | + console.error(`Failed to get task result for taskId ${taskId} and userId ${userId}`); |
| 181 | + return; |
| 182 | + } |
182 | 183 |
|
183 | | - if (registeredTaskAnswer.length == 0) { |
184 | | - await answer_crud.createAnswer(slug, userId, status_id); |
185 | | - } |
| 184 | + const statusId = statusByName.get(submissionStatus).id; |
186 | 185 |
|
187 | | - await db.taskAnswer.update({ |
188 | | - where: { |
189 | | - task_id_user_id: { task_id: slug, user_id: userId }, |
190 | | - }, |
191 | | - data: { |
192 | | - status_id: status_id, |
193 | | - }, |
194 | | - }); |
195 | | - } |
| 186 | + await db.$transaction(async () => { |
| 187 | + await answer_crud.upsertAnswer(taskId, userId, statusId); |
| 188 | + }); |
196 | 189 | } |
197 | 190 |
|
198 | 191 | export async function getTasksWithTagIds( |
|
0 commit comments