import { canvasApi, canvasServiceUtils } from "./canvasServiceUtils"; import { axiosClient } from "../axiosUtils"; import { CanvasAssignmentGroup } from "@/models/canvas/assignments/canvasAssignmentGroup"; import { LocalAssignmentGroup } from "@/models/local/assignment/localAssignmentGroup"; import { rateLimitAwareDelete } from "./canvasWebRequestor"; export const canvasAssignmentGroupService = { async getAll(courseId: number): Promise { console.log("Requesting assignment groups"); const url = `${canvasApi}/courses/${courseId}/assignment_groups`; const assignmentGroups = await canvasServiceUtils.paginatedRequest< CanvasAssignmentGroup[] >({ url, }); return assignmentGroups.flatMap((groupList) => groupList); }, async create( canvasCourseId: number, localAssignmentGroup: LocalAssignmentGroup ): Promise { console.log(`Creating assignment group: ${localAssignmentGroup.name}`); const url = `${canvasApi}/courses/${canvasCourseId}/assignment_groups`; const body = { name: localAssignmentGroup.name, group_weight: localAssignmentGroup.weight, }; const { data: canvasAssignmentGroup } = await axiosClient.post(url, body); return { ...localAssignmentGroup, canvasId: canvasAssignmentGroup.id, }; }, async update( canvasCourseId: number, localAssignmentGroup: LocalAssignmentGroup ): Promise { console.log(`Updating assignment group: ${localAssignmentGroup.name}`); if (!localAssignmentGroup.canvasId) { throw new Error("Cannot update assignment group if canvas ID is null"); } const url = `${canvasApi}/courses/${canvasCourseId}/assignment_groups/${localAssignmentGroup.canvasId}`; const body = { name: localAssignmentGroup.name, group_weight: localAssignmentGroup.weight, }; await axiosClient.put(url, body); }, async delete( canvasCourseId: number, canvasAssignmentGroupId: number, assignmentGroupName: string ): Promise { console.log(`Deleting assignment group: ${assignmentGroupName}`); const url = `${canvasApi}/courses/${canvasCourseId}/assignment_groups/${canvasAssignmentGroupId}`; await rateLimitAwareDelete(url); }, };