workign on api errors

This commit is contained in:
2024-09-09 19:52:47 -06:00
parent e1f1401592
commit 945253c208
12 changed files with 217 additions and 230 deletions

View File

@@ -1,33 +1,38 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ {
params: { courseName, moduleName, assignmentName }, params: { courseName, moduleName, assignmentName },
}: { }: {
params: { courseName: string; moduleName: string; assignmentName: string }; params: { courseName: string; moduleName: string; assignmentName: string };
} }
) { ) =>
const settings = await fileStorageService.getAssignment( await withErrorHandling(async () => {
courseName, const settings = await fileStorageService.getAssignment(
moduleName, courseName,
assignmentName moduleName,
); assignmentName
return Response.json(settings); );
} return Response.json(settings);
});
export async function PUT( export const PUT = async (
request: Request, request: Request,
{ {
params: { courseName, moduleName, assignmentName }, params: { courseName, moduleName, assignmentName },
}: { params: { courseName: string; moduleName: string; assignmentName: string } } }: {
) { params: { courseName: string; moduleName: string; assignmentName: string };
const assignment = await request.json() }
await fileStorageService.updateAssignment( ) =>
courseName, await withErrorHandling(async () => {
moduleName, const assignment = await request.json();
assignmentName, await fileStorageService.updateAssignment(
assignment courseName,
); moduleName,
return Response.json({}); assignmentName,
} assignment
);
return Response.json({});
});

View File

@@ -1,14 +1,15 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ {
params: { courseName, moduleName }, params: { courseName, moduleName },
}: { params: { courseName: string; moduleName: string } } }: { params: { courseName: string; moduleName: string } }
) { ) => await withErrorHandling(async () => {
const settings = await fileStorageService.getAssignmentNames( const settings = await fileStorageService.getAssignmentNames(
courseName, courseName,
moduleName moduleName
); );
return Response.json(settings); return Response.json(settings);
} })

View File

@@ -1,31 +1,29 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ {
params: { courseName, moduleName, pageName }, params: { courseName, moduleName, pageName },
}: { params: { courseName: string; moduleName: string; pageName: string } } }: { params: { courseName: string; moduleName: string; pageName: string } }
) { ) =>
const settings = await fileStorageService.getPage( await withErrorHandling(async () => {
courseName, const settings = await fileStorageService.getPage(
moduleName, courseName,
pageName moduleName,
); pageName
return Response.json(settings); );
} return Response.json(settings);
});
export async function PUT( export const PUT = async (
request: Request, request: Request,
{ {
params: { courseName, moduleName, pageName }, params: { courseName, moduleName, pageName },
}: { params: { courseName: string; moduleName: string; pageName: string } } }: { params: { courseName: string; moduleName: string; pageName: string } }
) { ) =>
const page = await request.json() await withErrorHandling(async () => {
await fileStorageService.updatePage( const page = await request.json();
courseName, await fileStorageService.updatePage(courseName, moduleName, pageName, page);
moduleName, return Response.json({});
pageName, });
page
);
return Response.json({});
}

View File

@@ -1,14 +1,16 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ {
params: { courseName, moduleName }, params: { courseName, moduleName },
}: { params: { courseName: string; moduleName: string } } }: { params: { courseName: string; moduleName: string } }
) { ) =>
const settings = await fileStorageService.getPageNames( await withErrorHandling(async () => {
courseName, const settings = await fileStorageService.getPageNames(
moduleName courseName,
); moduleName
return Response.json(settings); );
} return Response.json(settings);
});

View File

@@ -1,25 +1,26 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ {
params: { courseName, moduleName, quizName }, params: { courseName, moduleName, quizName },
}: { params: { courseName: string; moduleName: string; quizName: string } } }: { params: { courseName: string; moduleName: string; quizName: string } }
) { ) => await withErrorHandling(async () => {
const quiz = await fileStorageService.getQuiz( const quiz = await fileStorageService.getQuiz(
courseName, courseName,
moduleName, moduleName,
quizName quizName
); );
return Response.json(quiz); return Response.json(quiz);
} })
export async function PUT( export const PUT = async (
request: Request, request: Request,
{ {
params: { courseName, moduleName, quizName }, params: { courseName, moduleName, quizName },
}: { params: { courseName: string; moduleName: string; quizName: string } } }: { params: { courseName: string; moduleName: string; quizName: string } }
) { ) => await withErrorHandling(async () => {
const quiz = await request.json() const quiz = await request.json()
await fileStorageService.updateQuiz( await fileStorageService.updateQuiz(
courseName, courseName,
@@ -28,4 +29,4 @@ export async function PUT(
quiz quiz
); );
return Response.json({}); return Response.json({});
} })

View File

@@ -1,14 +1,16 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ {
params: { courseName, moduleName }, params: { courseName, moduleName },
}: { params: { courseName: string; moduleName: string } } }: { params: { courseName: string; moduleName: string } }
) { ) =>
const settings = await fileStorageService.getQuizNames( await withErrorHandling(async () => {
courseName, const settings = await fileStorageService.getQuizNames(
moduleName courseName,
); moduleName
return Response.json(settings); );
} return Response.json(settings);
});

View File

@@ -1,9 +1,11 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ params: { courseName } }: { params: { courseName: string } } { params: { courseName } }: { params: { courseName: string } }
) { ) =>
const settings = await fileStorageService.getModuleNames(courseName) await withErrorHandling(async () => {
return Response.json(settings); const settings = await fileStorageService.getModuleNames(courseName);
} return Response.json(settings);
});

View File

@@ -1,14 +1,16 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function PUT( export const PUT = async (
request: Request, request: Request,
{ params: { courseName } }: { params: { courseName: string } } { params: { courseName } }: { params: { courseName: string } }
) { ) =>
const { updatedCourse, previousCourse } = await request.json(); await withErrorHandling(async () => {
const { updatedCourse, previousCourse } = await request.json();
console.log(updatedCourse); console.log(updatedCourse);
console.log(courseName); console.log(courseName);
// await fileStorageService.saveCourseAsync(updatedCourse, previousCourse); // await fileStorageService.saveCourseAsync(updatedCourse, previousCourse);
return Response.json({}); return Response.json({});
} });

View File

@@ -1,12 +1,14 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET( export const GET = async (
_request: Request, _request: Request,
{ params: { courseName } }: { params: { courseName: string } } { params: { courseName } }: { params: { courseName: string } }
) { ) =>
if (courseName.includes(".js.map")) { await withErrorHandling(async () => {
return Response.json({}); if (courseName.includes(".js.map")) {
} return Response.json({});
const settings = await fileStorageService.getCourseSettings(courseName); }
return Response.json(settings); const settings = await fileStorageService.getCourseSettings(courseName);
} return Response.json(settings);
});

View File

@@ -1,7 +1,8 @@
import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { fileStorageService } from "@/services/fileStorage/fileStorageService";
import { withErrorHandling } from "@/services/withErrorHandling";
export async function GET() { export const GET = async () =>
const courses = await fileStorageService.getCourseNames(); await withErrorHandling(async () => {
const courses = await fileStorageService.getCourseNames();
return Response.json(courses); return Response.json(courses);
} });

View File

@@ -7,6 +7,7 @@ import { useDraggingContext } from "../context/draggingContext";
import { useCalendarItemsContext } from "../context/calendarItemsContext"; import { useCalendarItemsContext } from "../context/calendarItemsContext";
import { useCourseContext } from "../context/courseContext"; import { useCourseContext } from "../context/courseContext";
import Link from "next/link"; import Link from "next/link";
import { IModuleItem } from "@/models/local/IModuleItem";
export default function Day({ day, month }: { day: string; month: number }) { export default function Day({ day, month }: { day: string; month: number }) {
const dayAsDate = getDateFromStringOrThrow( const dayAsDate = getDateFromStringOrThrow(
@@ -18,157 +19,114 @@ export default function Day({ day, month }: { day: string; month: number }) {
const itemsContext = useCalendarItemsContext(); const itemsContext = useCalendarItemsContext();
const { itemDrop } = useDraggingContext(); const { itemDrop } = useDraggingContext();
const { courseName } = useCourseContext();
const dateKey = getDateOnlyMarkdownString(dayAsDate); const dateKey = getDateOnlyMarkdownString(dayAsDate);
const todaysModules = itemsContext[dateKey]; const todaysModules = itemsContext[dateKey];
const todaysAssignments = todaysModules
? Object.keys(todaysModules).flatMap((moduleName) =>
todaysModules[moduleName].assignments.map((assignment) => ({
moduleName,
assignment,
}))
)
: [];
const todaysQuizzes = todaysModules
? Object.keys(todaysModules).flatMap((moduleName) =>
todaysModules[moduleName].quizzes.map((quiz) => ({
moduleName,
quiz,
}))
)
: [];
const todaysPages = todaysModules
? Object.keys(todaysModules).flatMap((moduleName) =>
todaysModules[moduleName].pages.map((page) => ({
moduleName,
page,
}))
)
: [];
return ( return (
<div <div
className={ className={
"border border-slate-600 rounded-lg p-2 pb-4 m-1 " + backgroundClass "border border-slate-600 rounded-lg p-2 pb-4 m-1 " + backgroundClass
} }
onDrop={(e) => { onDrop={(e) => itemDrop(e, day)}
itemDrop(e, day);
}}
onDragOver={(e) => e.preventDefault()} onDragOver={(e) => e.preventDefault()}
> >
{dayAsDate.getDate()} {dayAsDate.getDate()}
{todaysModules && <ul className="list-disc">
Object.keys(todaysModules).flatMap((moduleName) => {todaysAssignments.map(({ assignment, moduleName }) => (
todaysModules[moduleName].assignments.map((a) => ( <DraggableListItem
<li key={assignment.name}
key={a.name} type={"assignment"}
role="button" moduleName={moduleName}
draggable="true" item={assignment}
onDragStart={(e) => { />
e.dataTransfer.setData( ))}
"draggableItem", {todaysQuizzes.map(({ quiz, moduleName }) => (
JSON.stringify({ <DraggableListItem
type: "assignment", key={quiz.name}
item: a, type={"quiz"}
sourceModuleName: moduleName, moduleName={moduleName}
}) item={quiz}
); />
}} ))}
> {todaysPages.map(({ page, moduleName }) => (
<Link <DraggableListItem
href={ key={page.name}
"/course/" + type={"page"}
encodeURIComponent(courseName) + moduleName={moduleName}
"/modules/" + item={page}
encodeURIComponent(moduleName) + />
"/assignment/" + ))}
encodeURIComponent(a.name) </ul>
}
shallow={true}
>
{a.name}
</Link>
</li>
))
)}
{todaysModules &&
Object.keys(todaysModules).flatMap((moduleName) =>
todaysModules[moduleName].quizzes.map((q) => (
<li
key={q.name}
role="button"
draggable="true"
onDragStart={(e) => {
e.dataTransfer.setData(
"draggableItem",
JSON.stringify({
type: "quiz",
item: q,
sourceModuleName: moduleName,
})
);
}}
>
<Link
href={
"/course/" +
encodeURIComponent(courseName) +
"/modules/" +
encodeURIComponent(moduleName) +
"/quiz/" +
encodeURIComponent(q.name)
}
shallow={true}
>
{q.name}
</Link>
</li>
))
)}
{todaysModules &&
Object.keys(todaysModules).flatMap((moduleName) =>
todaysModules[moduleName].pages.map((p) => (
<li
key={p.name}
role="button"
draggable="true"
onDragStart={(e) => {
e.dataTransfer.setData(
"draggableItem",
JSON.stringify({
type: "page",
item: p,
sourceModuleName: moduleName,
})
);
}}
>
<Link
href={
"/course/" +
encodeURIComponent(courseName) +
"/modules/" +
encodeURIComponent(moduleName) +
"/page/" +
encodeURIComponent(p.name)
}
shallow={true}
>
{p.name}
</Link>
</li>
))
)}
</div> </div>
); );
} }
// export default function Day({ day, month }: { day: string; month: number }) { function DraggableListItem({
// const { data: moduleNames } = useModuleNamesQuery(); type,
moduleName,
// const dayAsDate = getDateFromStringOrThrow( item,
// day, }: {
// "calculating same month in day" type: "assignment" | "page" | "quiz";
// ); moduleName: string;
// const isInSameMonth = dayAsDate.getMonth() + 1 != month; item: IModuleItem;
// const backgroundClass = isInSameMonth ? "" : "bg-slate-900"; }) {
// const { itemDrop } = useDraggingContext(); const { courseName } = useCourseContext();
return (
// return ( <li
// <div role="button"
// className={ draggable="true"
// "border border-slate-600 rounded-lg p-2 pb-4 m-1 " + backgroundClass onDragStart={(e) => {
// } e.dataTransfer.setData(
// onDrop={(e) => { "draggableItem",
// itemDrop(e, day); JSON.stringify({
// }} type: "assignment",
// onDragOver={(e) => e.preventDefault()} item,
// > sourceModuleName: moduleName,
// {dayAsDate.getDate()} })
// {moduleNames.map((moduleName) => ( );
// <DayItemsInModule }}
// key={"" + day + month + moduleName} >
// moduleName={moduleName} <Link
// day={day} href={
// /> "/course/" +
// ))} encodeURIComponent(courseName) +
// </div> "/modules/" +
// ); encodeURIComponent(moduleName) +
// } `/${type}/` +
encodeURIComponent(item.name)
}
shallow={true}
>
{item.name}
</Link>
</li>
);
}

View File

@@ -0,0 +1,13 @@
import { NextResponse } from "next/server";
export async function withErrorHandling(handler: () => Promise<Response | NextResponse>) {
try {
return await handler();
} catch (error) {
console.error("Error caught in centralized handler:", error);
return NextResponse.json(
{ error: (error as Error).message || "Internal Server Error" },
{ status: 500 }
);
}
}