From f57543400675a78e684288b247e7173557de7a1c Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Wed, 20 Nov 2024 09:21:20 -0700 Subject: [PATCH] started making mutation to put things together --- .../canvas/files/canvasFileService.ts | 17 ++++++---- nextjs/src/services/htmlMarkdownUtils.ts | 1 - .../services/serverFunctions/router/app.ts | 2 ++ .../router/canvasFileRouter.ts | 31 +++++++++++++++++++ 4 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 nextjs/src/services/serverFunctions/router/canvasFileRouter.ts diff --git a/nextjs/src/services/canvas/files/canvasFileService.ts b/nextjs/src/services/canvas/files/canvasFileService.ts index b2d4db0..df06109 100644 --- a/nextjs/src/services/canvas/files/canvasFileService.ts +++ b/nextjs/src/services/canvas/files/canvasFileService.ts @@ -35,7 +35,7 @@ const getFileSize = async (pathToFile: string): Promise => { export const uploadToCanvasPart1 = async ( pathToUpload: string, - canvasCourseId: string + canvasCourseId: number ) => { try { const url = `${canvasApi}/courses/${canvasCourseId}/assignment_groups`; @@ -57,11 +57,15 @@ export const uploadToCanvasPart1 = async ( } }; -export const uploadToCanvasPart2 = async ( - pathToUpload: string, - upload_url: string, - upload_params: { [key: string]: string } -) => { +export const uploadToCanvasPart2 = async ({ + pathToUpload, + upload_url, + upload_params, +}: { + pathToUpload: string; + upload_url: string; + upload_params: { [key: string]: string }; +}) => { try { const formData = new FormData(); @@ -89,6 +93,7 @@ export const uploadToCanvasPart2 = async ( const redirectResponse = await axiosClient.get(redirectUrl); console.log("redirect response", redirectResponse.data); } + return response.data.url; } catch (error) { console.error("Error uploading file to Canvas part 1:", error); throw error; diff --git a/nextjs/src/services/htmlMarkdownUtils.ts b/nextjs/src/services/htmlMarkdownUtils.ts index 93c3ee1..e4d8b34 100644 --- a/nextjs/src/services/htmlMarkdownUtils.ts +++ b/nextjs/src/services/htmlMarkdownUtils.ts @@ -33,7 +33,6 @@ export function convertImagesToCanvasImages( } mutableHtml = mutableHtml.replaceAll(imageSrc, destinationUrl); } - // console.log(imageSources, imageLookup, mutableHtml); return mutableHtml; } diff --git a/nextjs/src/services/serverFunctions/router/app.ts b/nextjs/src/services/serverFunctions/router/app.ts index d0dd62a..83a59f9 100644 --- a/nextjs/src/services/serverFunctions/router/app.ts +++ b/nextjs/src/services/serverFunctions/router/app.ts @@ -1,6 +1,7 @@ import { createTrpcContext } from "../context"; import { createCallerFactory, router } from "../trpcSetup"; import { assignmentRouter } from "./assignmentRouter"; +import { canvasFileRouter } from "./canvasFileRouter"; import { directoriesRouter } from "./directoriesRouter"; import { lectureRouter } from "./lectureRouter"; import { moduleRouter } from "./moduleRouter"; @@ -16,6 +17,7 @@ export const trpcAppRouter = router({ page: pageRouter, module: moduleRouter, directories: directoriesRouter, + canvasFile: canvasFileRouter, }); export const createCaller = createCallerFactory(trpcAppRouter); diff --git a/nextjs/src/services/serverFunctions/router/canvasFileRouter.ts b/nextjs/src/services/serverFunctions/router/canvasFileRouter.ts new file mode 100644 index 0000000..05fdfbb --- /dev/null +++ b/nextjs/src/services/serverFunctions/router/canvasFileRouter.ts @@ -0,0 +1,31 @@ +import publicProcedure from "../procedures/public"; +import { z } from "zod"; +import { router } from "../trpcSetup"; +import { + downloadUrlToTempDirectory, + uploadToCanvasPart1, + uploadToCanvasPart2, +} from "@/services/canvas/files/canvasFileService"; + +export const canvasFileRouter = router({ + getCanvasFileUrl: publicProcedure + .input( + z.object({ + sourceUrl: z.string(), + canvasCourseId: z.number(), + }) + ) + .mutation(async ({ input: { sourceUrl, canvasCourseId } }) => { + const localTempFile = await downloadUrlToTempDirectory(sourceUrl); + const { upload_url, upload_params } = await uploadToCanvasPart1( + localTempFile, + canvasCourseId + ); + const canvasUrl = await uploadToCanvasPart2({ + pathToUpload: localTempFile, + upload_url, + upload_params, + }); + return canvasUrl; + }), +});