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 { withErrorHandling } from "@/services/withErrorHandling";
export async function GET(
export const GET = async (
_request: Request,
{
params: { courseName, moduleName, assignmentName },
}: {
params: { courseName: string; moduleName: string; assignmentName: string };
}
) {
const settings = await fileStorageService.getAssignment(
courseName,
moduleName,
assignmentName
);
return Response.json(settings);
}
) =>
await withErrorHandling(async () => {
const settings = await fileStorageService.getAssignment(
courseName,
moduleName,
assignmentName
);
return Response.json(settings);
});
export async function PUT(
export const PUT = async (
request: Request,
{
params: { courseName, moduleName, assignmentName },
}: { params: { courseName: string; moduleName: string; assignmentName: string } }
) {
const assignment = await request.json()
await fileStorageService.updateAssignment(
courseName,
moduleName,
assignmentName,
assignment
);
return Response.json({});
}
}: {
params: { courseName: string; moduleName: string; assignmentName: string };
}
) =>
await withErrorHandling(async () => {
const assignment = await request.json();
await fileStorageService.updateAssignment(
courseName,
moduleName,
assignmentName,
assignment
);
return Response.json({});
});

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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