diff --git a/nextjs/src/app/api/canvas/[...rest]/route.ts b/nextjs/src/app/api/canvas/[...rest]/route.ts index ae28baf..7477d17 100644 --- a/nextjs/src/app/api/canvas/[...rest]/route.ts +++ b/nextjs/src/app/api/canvas/[...rest]/route.ts @@ -112,7 +112,7 @@ export async function POST( } catch (error: any) { if (isAxiosError(error)) { console.log(url.toString(), body); - console.log("response data", JSON.stringify( error.response?.data)); + console.log("response data", JSON.stringify(error.response?.data)); console.log("is axios error"); } return NextResponse.json( @@ -130,16 +130,30 @@ export async function PUT( { params }: { params: { rest: string[] } } ) { return withErrorHandling(async () => { + const url = getUrl(params); + const body = await req.json(); try { - const url = getUrl(params); - const body = await req.json(); const response = await axiosClient.put(url.toString(), body); const headers = proxyResponseHeaders(response); return new NextResponse(JSON.stringify(response.data), { headers }); } catch (error: any) { - return new NextResponse( - JSON.stringify({ error: error.message || "Canvas PUT request failed" }), + if (isAxiosError(error)) { + console.log(url.toString(), body); + console.log("response data", JSON.stringify(error.response?.data)); + console.log("is axios error"); + + return NextResponse.json( + { + error: error.response?.data ?? "Canvas put failed", + }, + { status: error.response?.status || 500 } + ); + } + return NextResponse.json( + { + error: error.message || "Canvas POST request failed", + }, { status: error.response?.status || 500 } ); } diff --git a/nextjs/src/services/canvas/canvasAssignmentService.ts b/nextjs/src/services/canvas/canvasAssignmentService.ts index a3eb55d..08c8692 100644 --- a/nextjs/src/services/canvas/canvasAssignmentService.ts +++ b/nextjs/src/services/canvas/canvasAssignmentService.ts @@ -15,15 +15,23 @@ const createRubric = async ( assignmentCanvasId: number, localAssignment: LocalAssignment ) => { - const criterion = localAssignment.rubric.map((rubricItem, i) => ({ - description: rubricItem.label, - points: rubricItem.points, - ratings: [ - { description: "Full Marks", points: rubricItem.points }, - { description: "No Marks", points: 0 }, - ], - })); + const criterion = localAssignment.rubric + .map((rubricItem) => ({ + description: rubricItem.label, + points: rubricItem.points, + ratings: { + 0: { description: "Full Marks", points: rubricItem.points }, + 1: { description: "No Marks", points: 0 }, + }, + })) + .reduce((acc, item, index) => { + return { + ...acc, + [index]: item, + }; + }, {} as { [key: number]: { description: string; points: number; ratings: { [key: number]: { description: string; points: number } } } }); + console.log(criterion); const rubricBody = { rubric_association_id: assignmentCanvasId, rubric: { @@ -116,18 +124,22 @@ export const canvasAssignmentService = { console.log(`Updating assignment: ${localAssignment.name}`); const url = `${canvasApi}/courses/${courseId}/assignments/${canvasAssignmentId}`; const body = { - name: localAssignment.name, - submission_types: localAssignment.submissionTypes.map((t) => - t.toString() - ), - allowed_extensions: localAssignment.allowedFileUploadExtensions.map((e) => - e.toString() - ), - description: markdownToHTMLSafe(localAssignment.description), - due_at: localAssignment.dueAt, - lock_at: localAssignment.lockAt, - points_possible: assignmentPoints(localAssignment), - assignment_group_id: canvasAssignmentGroupId, + assignment: { + name: localAssignment.name, + submission_types: localAssignment.submissionTypes.map((t) => + t.toString() + ), + allowed_extensions: localAssignment.allowedFileUploadExtensions.map( + (e) => e.toString() + ), + description: markdownToHTMLSafe(localAssignment.description), + due_at: getDateFromString(localAssignment.dueAt)?.toISOString(), + lock_at: + localAssignment.lockAt && + getDateFromString(localAssignment.lockAt)?.toISOString(), + points_possible: assignmentPoints(localAssignment), + assignment_group_id: canvasAssignmentGroupId, + }, }; await axiosClient.put(url, body); @@ -138,7 +150,7 @@ export const canvasAssignmentService = { courseId: number, assignmentCanvasId: number, assignmentName: string - ): Promise { + ) { console.log(`Deleting assignment from Canvas: ${assignmentName}`); const url = `${canvasApi}/courses/${courseId}/assignments/${assignmentCanvasId}`; const response = await axiosClient.delete(url);