diff --git a/src/app/(withAuth)/courses/[courseId]/lectures/[lectureId]/problems/[problemId]/ProblmBody.tsx b/src/app/(withAuth)/courses/[courseId]/lectures/[lectureId]/problems/[problemId]/ProblmBody.tsx index a50b74b0..ba3b51a3 100644 --- a/src/app/(withAuth)/courses/[courseId]/lectures/[lectureId]/problems/[problemId]/ProblmBody.tsx +++ b/src/app/(withAuth)/courses/[courseId]/lectures/[lectureId]/problems/[problemId]/ProblmBody.tsx @@ -86,16 +86,16 @@ export const ProblemBody: React.FC = (props) => { const response = await fetchIncorrectSubmissionsCount(); const incorrectCount = (response.data ?? 0) + 1; void props.createSubmissionUpdatingProblemSession(false, false); - if (incorrectCount === MAX_CHALLENGE_COUNT) { - void props.updateProblemSession('step', 1); + if (incorrectCount < MAX_CHALLENGE_COUNT) { openAlertDialog( '不正解', - `不正解です。${MAX_CHALLENGE_COUNT}回間違えたので、ステップ実行モードに移ります。ステップごとに問題を解いてください。` + `不正解です。あと${MAX_CHALLENGE_COUNT - incorrectCount}回間違えたら、ステップ実行モードに移ります。一発正解を目指しましょう!` ); } else { + void props.updateProblemSession('step', 1); openAlertDialog( '不正解', - `不正解です。あと${MAX_CHALLENGE_COUNT - incorrectCount}回間違えたら、ステップ実行モードに移ります。一発正解を目指しましょう!` + `不正解です。${MAX_CHALLENGE_COUNT}回間違えたので、ステップ実行モードに移ります。ステップごとに問題を解いてください。` ); } } diff --git a/src/infrastructures/trpcBackend/routers/index.ts b/src/infrastructures/trpcBackend/routers/index.ts index 08ac3300..fe64e779 100644 --- a/src/infrastructures/trpcBackend/routers/index.ts +++ b/src/infrastructures/trpcBackend/routers/index.ts @@ -24,6 +24,10 @@ export const backendRouter = router({ }) ) .mutation(async ({ input: { id, incrementalElapsedMilliseconds, ...data } }) => { + if (data.problemType === 'step' && data.traceItemIndex === 0) { + throw new TRPCError({ code: 'BAD_REQUEST' }); + } + const problemSession = await prisma.problemSession.update({ where: { id }, data: {