mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 07:38:33 -06:00
redoing paginated canvas requests
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
import { CanvasAssignment } from "@/models/canvas/assignments/canvasAssignment";
|
||||
import { canvasApi, canvasServiceUtils } from "./canvasServiceUtils";
|
||||
import {
|
||||
canvasApi,
|
||||
canvasServiceUtils,
|
||||
paginatedRequest,
|
||||
} from "./canvasServiceUtils";
|
||||
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
|
||||
import { axiosClient } from "../axiosUtils";
|
||||
import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
||||
@@ -31,7 +35,6 @@ const createRubric = async (
|
||||
};
|
||||
}, {} as { [key: number]: { description: string; points: number; ratings: { [key: number]: { description: string; points: number } } } });
|
||||
|
||||
console.log(criterion);
|
||||
const rubricBody = {
|
||||
rubric_association_id: assignmentCanvasId,
|
||||
rubric: {
|
||||
@@ -70,10 +73,9 @@ const createRubric = async (
|
||||
|
||||
export const canvasAssignmentService = {
|
||||
async getAll(courseId: number): Promise<CanvasAssignment[]> {
|
||||
const url = `${canvasApi}/courses/${courseId}/assignments`;
|
||||
const { data: assignments } = await axiosClient.get<CanvasAssignment[]>(
|
||||
url
|
||||
);
|
||||
console.log("getting canvas assignments");
|
||||
const url = `${canvasApi}/courses/${courseId}/assignments`; //per_page=100
|
||||
const assignments = await paginatedRequest<CanvasAssignment[]>({ url });
|
||||
return assignments.map((a) => ({
|
||||
...a,
|
||||
due_at: a.due_at ? new Date(a.due_at).toLocaleString() : undefined, // timezones?
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { CanvasPage } from "@/models/canvas/pages/canvasPageModel";
|
||||
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
|
||||
import { canvasApi, canvasServiceUtils } from "./canvasServiceUtils";
|
||||
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
||||
import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
||||
import { axiosClient } from "../axiosUtils";
|
||||
import { rateLimitAwareDelete } from "./canvasWebRequestor";
|
||||
@@ -9,7 +9,7 @@ export const canvasPageService = {
|
||||
async getAll(courseId: number): Promise<CanvasPage[]> {
|
||||
console.log("requesting pages");
|
||||
const url = `${canvasApi}/courses/${courseId}/pages`;
|
||||
const pages = await canvasServiceUtils.paginatedRequest<CanvasPage[]>({
|
||||
const pages = await paginatedRequest<CanvasPage[]>({
|
||||
url,
|
||||
});
|
||||
return pages.flatMap((pageList) => pageList);
|
||||
|
||||
@@ -25,35 +25,40 @@ const getNextUrl = (
|
||||
return nextUrl;
|
||||
};
|
||||
|
||||
export const canvasServiceUtils = {
|
||||
async paginatedRequest<T>(request: { url: string }): Promise<T[]> {
|
||||
var requestCount = 1;
|
||||
const url = new URL(request.url);
|
||||
url.searchParams.set("per_page", "100");
|
||||
export async function paginatedRequest<T>(request: {
|
||||
url: string;
|
||||
}): Promise<T> {
|
||||
var requestCount = 1;
|
||||
const url = new URL(request.url);
|
||||
url.searchParams.set("per_page", "100");
|
||||
|
||||
const { data: firstData, headers: firstHeaders } = await axiosClient.get<T>(
|
||||
url.toString()
|
||||
const { data: firstData, headers: firstHeaders } = await axiosClient.get<T>(
|
||||
url.toString()
|
||||
);
|
||||
|
||||
if (!Array.isArray(firstData)) {
|
||||
return firstData;
|
||||
}
|
||||
|
||||
|
||||
var returnData = firstData ? [firstData] : [];
|
||||
var nextUrl = getNextUrl(firstHeaders);
|
||||
console.log("got first request", nextUrl, firstHeaders);
|
||||
|
||||
while (nextUrl) {
|
||||
requestCount += 1;
|
||||
const { data, headers } = await axiosClient.get<T>(nextUrl);
|
||||
if (data) {
|
||||
returnData = [...returnData, data];
|
||||
}
|
||||
nextUrl = getNextUrl(headers);
|
||||
}
|
||||
|
||||
if (requestCount > 1) {
|
||||
console.log(
|
||||
`Requesting ${typeof returnData} took ${requestCount} requests`
|
||||
);
|
||||
}
|
||||
|
||||
var returnData: T[] = firstData ? [firstData] : [];
|
||||
var nextUrl = getNextUrl(firstHeaders);
|
||||
console.log("got first request", nextUrl, firstHeaders);
|
||||
|
||||
while (nextUrl) {
|
||||
requestCount += 1;
|
||||
const { data, headers } = await axiosClient.get<T>(nextUrl);
|
||||
if (data) {
|
||||
returnData = [...returnData, data];
|
||||
}
|
||||
nextUrl = getNextUrl(headers);
|
||||
}
|
||||
|
||||
if (requestCount > 1) {
|
||||
console.log(
|
||||
`Requesting ${typeof returnData} took ${requestCount} requests`
|
||||
);
|
||||
}
|
||||
|
||||
return returnData;
|
||||
},
|
||||
};
|
||||
return returnData;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user