trying to add an assignment

This commit is contained in:
2024-09-18 14:15:38 -06:00
parent 3862743e4c
commit de0b1ed719
7 changed files with 248 additions and 104 deletions

View File

@@ -6,6 +6,56 @@ import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
import { CanvasRubricCreationResponse } from "@/models/canvas/assignments/canvasRubricCreationResponse";
import { assignmentPoints } from "@/models/local/assignment/utils/assignmentPointsUtils";
const createRubric = async (
courseId: number,
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 rubricBody = {
rubric_association_id: assignmentCanvasId,
rubric: {
title: `Rubric for Assignment: ${localAssignment.name}`,
association_id: assignmentCanvasId,
association_type: "Assignment",
use_for_grading: true,
criteria: criterion,
},
rubric_association: {
association_id: assignmentCanvasId,
association_type: "Assignment",
purpose: "grading",
use_for_grading: true,
},
};
const rubricUrl = `${canvasApi}/courses/${courseId}/rubrics`;
const rubricResponse = await axiosClient.post<CanvasRubricCreationResponse>(
rubricUrl,
rubricBody
);
if (!rubricResponse.data) throw new Error("Failed to create rubric");
const assignmentPointAdjustmentUrl = `${canvasApi}/courses/${courseId}/assignments/${assignmentCanvasId}`;
const assignmentPointAdjustmentBody = {
assignment: { points_possible: assignmentPoints(localAssignment) },
};
await axiosClient.put(
assignmentPointAdjustmentUrl,
assignmentPointAdjustmentBody
);
};
export const canvasAssignmentService = {
async getAll(courseId: number): Promise<CanvasAssignment[]> {
const url = `${canvasApi}/courses/${courseId}/assignments`;
@@ -23,24 +73,22 @@ export const canvasAssignmentService = {
canvasCourseId: number,
localAssignment: LocalAssignment,
canvasAssignmentGroupId?: number
): Promise<number> {
) {
console.log(`Creating assignment: ${localAssignment.name}`);
const url = `${canvasApi}/courses/${canvasCourseId}/assignments`;
const body = {
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: localAssignment.dueAt,
lock_at: localAssignment.lockAt,
points_possible: assignmentPoints(localAssignment),
assignment_group_id: canvasAssignmentGroupId,
},
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,
};
const response = await axiosClient.post<CanvasAssignment>(url, body);
@@ -48,11 +96,7 @@ export const canvasAssignmentService = {
if (!canvasAssignment) throw new Error("Created Canvas assignment is null");
await this.createRubric(
canvasCourseId,
canvasAssignment.id,
localAssignment
);
await createRubric(canvasCourseId, canvasAssignment.id, localAssignment);
return canvasAssignment.id;
},
@@ -62,28 +106,26 @@ export const canvasAssignmentService = {
canvasAssignmentId: number,
localAssignment: LocalAssignment,
canvasAssignmentGroupId?: number
): Promise<void> {
) {
console.log(`Updating assignment: ${localAssignment.name}`);
const url = `${canvasApi}/courses/${courseId}/assignments/${canvasAssignmentId}`;
const body = {
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: localAssignment.dueAt,
lock_at: localAssignment.lockAt,
points_possible: assignmentPoints(localAssignment),
assignment_group_id: canvasAssignmentGroupId,
},
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,
};
await axiosClient.put(url, body);
await this.createRubric(courseId, canvasAssignmentId, localAssignment);
await createRubric(courseId, canvasAssignmentId, localAssignment);
},
async delete(
@@ -100,54 +142,4 @@ export const canvasAssignmentService = {
throw new Error("Failed to delete assignment");
}
},
async createRubric(
courseId: number,
assignmentCanvasId: number,
localAssignment: LocalAssignment
): Promise<void> {
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 rubricBody = {
rubric_association_id: assignmentCanvasId,
rubric: {
title: `Rubric for Assignment: ${localAssignment.name}`,
association_id: assignmentCanvasId,
association_type: "Assignment",
use_for_grading: true,
criteria: criterion,
},
rubric_association: {
association_id: assignmentCanvasId,
association_type: "Assignment",
purpose: "grading",
use_for_grading: true,
},
};
const rubricUrl = `${canvasApi}/courses/${courseId}/rubrics`;
const rubricResponse = await axiosClient.post<CanvasRubricCreationResponse>(
rubricUrl,
rubricBody
);
if (!rubricResponse.data) throw new Error("Failed to create rubric");
const assignmentPointAdjustmentUrl = `${canvasApi}/courses/${courseId}/assignments/${assignmentCanvasId}`;
const assignmentPointAdjustmentBody = {
assignment: { points_possible: assignmentPoints(localAssignment) },
};
await axiosClient.put(
assignmentPointAdjustmentUrl,
assignmentPointAdjustmentBody
);
},
};