mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 15:48:32 -06:00
trying to add an assignment
This commit is contained in:
@@ -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
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user