mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
server actions
This commit is contained in:
@@ -1,95 +0,0 @@
|
|||||||
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
|
|
||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
import { revalidatePath } from "next/cache";
|
|
||||||
|
|
||||||
export const GET = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, assignmentName },
|
|
||||||
}: {
|
|
||||||
params: { courseName: string; moduleName: string; assignmentName: string };
|
|
||||||
}
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const assignment = await fileStorageService.assignments.getAssignment(
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
assignmentName
|
|
||||||
);
|
|
||||||
return Response.json(assignment);
|
|
||||||
});
|
|
||||||
|
|
||||||
export const PUT = async (
|
|
||||||
request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, assignmentName },
|
|
||||||
}: {
|
|
||||||
params: { courseName: string; moduleName: string; assignmentName: string };
|
|
||||||
}
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const { assignment, previousModuleName, previousAssignmentName } =
|
|
||||||
(await request.json()) as {
|
|
||||||
assignment: LocalAssignment;
|
|
||||||
previousModuleName: string;
|
|
||||||
previousAssignmentName: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
await fileStorageService.assignments.updateOrCreateAssignment({
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
assignmentName,
|
|
||||||
assignment,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (
|
|
||||||
assignment.name !== previousAssignmentName ||
|
|
||||||
moduleName !== previousModuleName
|
|
||||||
) {
|
|
||||||
fileStorageService.assignments.delete({
|
|
||||||
courseName,
|
|
||||||
moduleName: previousModuleName,
|
|
||||||
assignmentName: previousAssignmentName,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
|
|
||||||
export const POST = async (
|
|
||||||
request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, assignmentName },
|
|
||||||
}: {
|
|
||||||
params: { courseName: string; moduleName: string; assignmentName: string };
|
|
||||||
}
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const assignment = await request.json();
|
|
||||||
await fileStorageService.assignments.updateOrCreateAssignment({
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
assignmentName,
|
|
||||||
assignment,
|
|
||||||
});
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
|
|
||||||
export const DELETE = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, assignmentName },
|
|
||||||
}: {
|
|
||||||
params: { courseName: string; moduleName: string; assignmentName: string };
|
|
||||||
}
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
fileStorageService.assignments.delete({
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
assignmentName,
|
|
||||||
});
|
|
||||||
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
|
|
||||||
export const GET = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName },
|
|
||||||
}: { params: { courseName: string; moduleName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const assignments = await fileStorageService.assignments.getAssignments(
|
|
||||||
courseName,
|
|
||||||
moduleName
|
|
||||||
);
|
|
||||||
|
|
||||||
return Response.json(assignments);
|
|
||||||
});
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
|
|
||||||
export const GET = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, pageName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; pageName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const settings = await fileStorageService.pages.getPage(
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
pageName
|
|
||||||
);
|
|
||||||
return Response.json(settings);
|
|
||||||
});
|
|
||||||
|
|
||||||
export const PUT = async (
|
|
||||||
request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, pageName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; pageName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const { page, previousModuleName, previousPageName } = await request.json();
|
|
||||||
await fileStorageService.pages.updatePage(
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
pageName,
|
|
||||||
page
|
|
||||||
);
|
|
||||||
|
|
||||||
if (
|
|
||||||
previousModuleName &&
|
|
||||||
previousPageName &&
|
|
||||||
(page.name !== previousPageName || moduleName !== previousModuleName)
|
|
||||||
) {
|
|
||||||
fileStorageService.pages.delete({
|
|
||||||
courseName,
|
|
||||||
moduleName: previousModuleName,
|
|
||||||
pageName: previousPageName,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
|
|
||||||
export const POST = async (
|
|
||||||
request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, pageName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; pageName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const page = await request.json();
|
|
||||||
await fileStorageService.pages.updatePage(
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
pageName,
|
|
||||||
page
|
|
||||||
);
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
|
|
||||||
export const DELETE = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, pageName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; pageName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
fileStorageService.pages.delete({
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
pageName,
|
|
||||||
});
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
|
|
||||||
export const GET = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName },
|
|
||||||
}: { params: { courseName: string; moduleName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const pages = await fileStorageService.pages.getPages(
|
|
||||||
courseName,
|
|
||||||
moduleName
|
|
||||||
);
|
|
||||||
return Response.json(pages);
|
|
||||||
});
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
|
|
||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
|
|
||||||
export const GET = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, quizName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; quizName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const quiz = await fileStorageService.quizzes.getQuiz(
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
quizName
|
|
||||||
);
|
|
||||||
return Response.json(quiz);
|
|
||||||
});
|
|
||||||
|
|
||||||
export const PUT = async (
|
|
||||||
request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, quizName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; quizName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const { quiz, previousModuleName, previousQuizName } =
|
|
||||||
(await request.json()) as {
|
|
||||||
quiz: LocalQuiz;
|
|
||||||
previousModuleName?: string;
|
|
||||||
previousQuizName?: string;
|
|
||||||
};
|
|
||||||
await fileStorageService.quizzes.updateQuiz(
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
quizName,
|
|
||||||
quiz
|
|
||||||
);
|
|
||||||
|
|
||||||
if (
|
|
||||||
previousModuleName &&
|
|
||||||
previousQuizName &&
|
|
||||||
(quiz.name !== previousQuizName || moduleName !== previousModuleName)
|
|
||||||
) {
|
|
||||||
fileStorageService.quizzes.delete({
|
|
||||||
courseName,
|
|
||||||
moduleName: previousModuleName,
|
|
||||||
quizName: previousQuizName,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
|
|
||||||
export const POST = async (
|
|
||||||
request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, quizName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; quizName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const quiz = await request.json();
|
|
||||||
await fileStorageService.quizzes.updateQuiz(
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
quizName,
|
|
||||||
quiz
|
|
||||||
);
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
export const DELETE = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName, quizName },
|
|
||||||
}: { params: { courseName: string; moduleName: string; quizName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
fileStorageService.quizzes.delete({
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
quizName,
|
|
||||||
});
|
|
||||||
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
|
|
||||||
export const GET = async (
|
|
||||||
_request: Request,
|
|
||||||
{
|
|
||||||
params: { courseName, moduleName },
|
|
||||||
}: { params: { courseName: string; moduleName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const quizzes = await fileStorageService.quizzes.getQuizzes(
|
|
||||||
courseName,
|
|
||||||
moduleName
|
|
||||||
);
|
|
||||||
return Response.json(quizzes);
|
|
||||||
});
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
|
|
||||||
export const GET = async (
|
|
||||||
_request: Request,
|
|
||||||
{ params: { courseName } }: { params: { courseName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const settings = await fileStorageService.modules.getModuleNames(courseName);
|
|
||||||
return Response.json(settings);
|
|
||||||
});
|
|
||||||
|
|
||||||
export const POST = async (
|
|
||||||
request: Request,
|
|
||||||
{ params: { courseName } }: { params: { courseName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const { moduleName } = await request.json();
|
|
||||||
await fileStorageService.modules.createModule(courseName, moduleName);
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
|
||||||
|
|
||||||
export const PUT = async (
|
|
||||||
request: Request,
|
|
||||||
{ params: { courseName } }: { params: { courseName: string } }
|
|
||||||
) =>
|
|
||||||
await withErrorHandling(async () => {
|
|
||||||
const { updatedCourse, previousCourse } = await request.json();
|
|
||||||
|
|
||||||
console.log(updatedCourse);
|
|
||||||
console.log(courseName);
|
|
||||||
|
|
||||||
// await fileStorageService.saveCourseAsync(updatedCourse, previousCourse);
|
|
||||||
return Response.json({});
|
|
||||||
});
|
|
||||||
@@ -13,8 +13,11 @@ import {
|
|||||||
useSuspenseQuery,
|
useSuspenseQuery,
|
||||||
} from "@tanstack/react-query";
|
} from "@tanstack/react-query";
|
||||||
import {
|
import {
|
||||||
|
createItemOnServer,
|
||||||
|
deleteItemOnServer,
|
||||||
getAllItemsFromServer,
|
getAllItemsFromServer,
|
||||||
getItemFromServer,
|
getItemFromServer,
|
||||||
|
updateItemOnServer,
|
||||||
} from "./courseItemServerActions";
|
} from "./courseItemServerActions";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
@@ -25,20 +28,20 @@ export const getAllItemsQueryConfig = <T extends CourseItemType>(
|
|||||||
) => ({
|
) => ({
|
||||||
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
|
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
|
||||||
queryFn: async (): Promise<CourseItemReturnType<T>[]> => {
|
queryFn: async (): Promise<CourseItemReturnType<T>[]> => {
|
||||||
const url =
|
// const url =
|
||||||
"/api/courses/" +
|
// "/api/courses/" +
|
||||||
encodeURIComponent(courseName) +
|
// encodeURIComponent(courseName) +
|
||||||
"/modules/" +
|
// "/modules/" +
|
||||||
encodeURIComponent(moduleName) +
|
// encodeURIComponent(moduleName) +
|
||||||
"/" +
|
// "/" +
|
||||||
typeToFolder[type];
|
// typeToFolder[type];
|
||||||
const response = await axiosClient.get(url);
|
// const response = await axiosClient.get(url);
|
||||||
return response.data;
|
// return response.data;
|
||||||
// return await getAllItemsFromServer({
|
return await getAllItemsFromServer({
|
||||||
// courseName,
|
courseName,
|
||||||
// moduleName,
|
moduleName,
|
||||||
// type,
|
type,
|
||||||
// });
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -51,23 +54,23 @@ export const getItemQueryConfig = <T extends CourseItemType>(
|
|||||||
return {
|
return {
|
||||||
queryKey: localCourseKeys.itemOfType(courseName, moduleName, name, type),
|
queryKey: localCourseKeys.itemOfType(courseName, moduleName, name, type),
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const url =
|
// const url =
|
||||||
"/api/courses/" +
|
// "/api/courses/" +
|
||||||
encodeURIComponent(courseName) +
|
// encodeURIComponent(courseName) +
|
||||||
"/modules/" +
|
// "/modules/" +
|
||||||
encodeURIComponent(moduleName) +
|
// encodeURIComponent(moduleName) +
|
||||||
"/" +
|
// "/" +
|
||||||
typeToFolder[type] +
|
// typeToFolder[type] +
|
||||||
"/" +
|
// "/" +
|
||||||
encodeURIComponent(name);
|
// encodeURIComponent(name);
|
||||||
const response = await axiosClient.get<CourseItemReturnType<T>>(url);
|
// const response = await axiosClient.get<CourseItemReturnType<T>>(url);
|
||||||
return response.data;
|
// return response.data;
|
||||||
// return await getItemFromServer({
|
return await getItemFromServer({
|
||||||
// moduleName,
|
moduleName,
|
||||||
// courseName,
|
courseName,
|
||||||
// itemName: name,
|
itemName: name,
|
||||||
// type,
|
type,
|
||||||
// });
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -147,33 +150,42 @@ export const useUpdateItemMutation = <T extends CourseItemType>(type: T) => {
|
|||||||
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
|
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
|
||||||
item
|
item
|
||||||
);
|
);
|
||||||
const url =
|
await updateItemOnServer({
|
||||||
"/api/courses/" +
|
courseName,
|
||||||
encodeURIComponent(courseName) +
|
moduleName,
|
||||||
"/modules/" +
|
item,
|
||||||
encodeURIComponent(moduleName) +
|
type,
|
||||||
"/" +
|
previousItemName,
|
||||||
typeToFolder[type] +
|
previousModuleName,
|
||||||
"/" +
|
itemName,
|
||||||
encodeURIComponent(itemName);
|
});
|
||||||
if (type === "Assignment")
|
// const url =
|
||||||
await axiosClient.put(url, {
|
// "/api/courses/" +
|
||||||
assignment: item,
|
// encodeURIComponent(courseName) +
|
||||||
previousModuleName,
|
// "/modules/" +
|
||||||
previousAssignmentName: previousItemName,
|
// encodeURIComponent(moduleName) +
|
||||||
});
|
// "/" +
|
||||||
if (type === "Quiz")
|
// typeToFolder[type] +
|
||||||
await axiosClient.put(url, {
|
// "/" +
|
||||||
quiz: item,
|
// encodeURIComponent(itemName);
|
||||||
previousModuleName,
|
// if (type === "Assignment")
|
||||||
previousQuizName: previousItemName,
|
// await axiosClient.put(url, {
|
||||||
});
|
// assignment: item,
|
||||||
if (type === "Page")
|
// previousModuleName,
|
||||||
await axiosClient.put(url, {
|
// previousAssignmentName: previousItemName,
|
||||||
page: item,
|
// });
|
||||||
previousModuleName,
|
// if (type === "Quiz")
|
||||||
previousPageName: previousItemName,
|
// await axiosClient.put(url, {
|
||||||
});
|
// quiz: item,
|
||||||
|
// previousModuleName,
|
||||||
|
// previousQuizName: previousItemName,
|
||||||
|
// });
|
||||||
|
// if (type === "Page")
|
||||||
|
// await axiosClient.put(url, {
|
||||||
|
// page: item,
|
||||||
|
// previousModuleName,
|
||||||
|
// previousPageName: previousItemName,
|
||||||
|
// });
|
||||||
},
|
},
|
||||||
onSuccess: async (_, { moduleName, itemName }) => {
|
onSuccess: async (_, { moduleName, itemName }) => {
|
||||||
await queryClient.invalidateQueries({
|
await queryClient.invalidateQueries({
|
||||||
@@ -210,16 +222,23 @@ export const useCreateItemMutation = <T extends CourseItemType>(type: T) => {
|
|||||||
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
|
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
|
||||||
item
|
item
|
||||||
);
|
);
|
||||||
const url =
|
// const url =
|
||||||
"/api/courses/" +
|
// "/api/courses/" +
|
||||||
encodeURIComponent(courseName) +
|
// encodeURIComponent(courseName) +
|
||||||
"/modules/" +
|
// "/modules/" +
|
||||||
encodeURIComponent(moduleName) +
|
// encodeURIComponent(moduleName) +
|
||||||
"/" +
|
// "/" +
|
||||||
typeToFolder[type] +
|
// typeToFolder[type] +
|
||||||
"/" +
|
// "/" +
|
||||||
encodeURIComponent(itemName);
|
// encodeURIComponent(itemName);
|
||||||
await axiosClient.post(url, item);
|
// await axiosClient.post(url, item);
|
||||||
|
await createItemOnServer({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
item,
|
||||||
|
type,
|
||||||
|
itemName,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
onSuccess: async (_, { moduleName, itemName }) => {
|
onSuccess: async (_, { moduleName, itemName }) => {
|
||||||
await queryClient.invalidateQueries({
|
await queryClient.invalidateQueries({
|
||||||
@@ -239,7 +258,6 @@ export const useCreateItemMutation = <T extends CourseItemType>(type: T) => {
|
|||||||
|
|
||||||
export const useDeleteItemMutation = <T extends CourseItemType>(type: T) => {
|
export const useDeleteItemMutation = <T extends CourseItemType>(type: T) => {
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const router = useRouter();
|
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async ({
|
mutationFn: async ({
|
||||||
@@ -249,16 +267,22 @@ export const useDeleteItemMutation = <T extends CourseItemType>(type: T) => {
|
|||||||
moduleName: string;
|
moduleName: string;
|
||||||
itemName: string;
|
itemName: string;
|
||||||
}) => {
|
}) => {
|
||||||
const url =
|
// const url =
|
||||||
"/api/courses/" +
|
// "/api/courses/" +
|
||||||
encodeURIComponent(courseName) +
|
// encodeURIComponent(courseName) +
|
||||||
"/modules/" +
|
// "/modules/" +
|
||||||
encodeURIComponent(moduleName) +
|
// encodeURIComponent(moduleName) +
|
||||||
"/" +
|
// "/" +
|
||||||
typeToFolder[type] +
|
// typeToFolder[type] +
|
||||||
"/" +
|
// "/" +
|
||||||
encodeURIComponent(itemName);
|
// encodeURIComponent(itemName);
|
||||||
await axiosClient.delete(url);
|
// await axiosClient.delete(url);
|
||||||
|
await deleteItemOnServer({
|
||||||
|
courseName,
|
||||||
|
itemName,
|
||||||
|
moduleName,
|
||||||
|
type,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
onSuccess: async (_, { moduleName, itemName }) => {
|
onSuccess: async (_, { moduleName, itemName }) => {
|
||||||
await queryClient.invalidateQueries({
|
await queryClient.invalidateQueries({
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import { ItemInDay } from "@/app/course/[courseName]/calendar/day/ItemInDay";
|
import { ItemInDay } from "@/app/course/[courseName]/calendar/day/ItemInDay";
|
||||||
|
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
|
||||||
import {
|
import {
|
||||||
CourseItemReturnType,
|
CourseItemReturnType,
|
||||||
CourseItemType,
|
CourseItemType,
|
||||||
} from "@/models/local/courseItemTypes";
|
} from "@/models/local/courseItemTypes";
|
||||||
|
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
|
||||||
|
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
|
||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
|
|
||||||
export async function getAllItemsFromServer<T extends CourseItemType>({
|
export async function getAllItemsFromServer<T extends CourseItemType>({
|
||||||
@@ -68,3 +71,160 @@ export async function getItemFromServer<T extends CourseItemType>({
|
|||||||
);
|
);
|
||||||
return page as CourseItemReturnType<T>;
|
return page as CourseItemReturnType<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function createItemOnServer<T extends CourseItemType>({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
type,
|
||||||
|
item,
|
||||||
|
itemName,
|
||||||
|
}: {
|
||||||
|
courseName: string;
|
||||||
|
moduleName: string;
|
||||||
|
type: T;
|
||||||
|
item: CourseItemReturnType<T>;
|
||||||
|
itemName: string;
|
||||||
|
}) {
|
||||||
|
if (type === "Assignment") {
|
||||||
|
const assignment = item as LocalAssignment;
|
||||||
|
await fileStorageService.assignments.updateOrCreateAssignment({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
assignmentName: itemName,
|
||||||
|
assignment,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (type === "Quiz") {
|
||||||
|
const quiz = item as LocalQuiz;
|
||||||
|
await fileStorageService.quizzes.updateQuiz(
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
itemName,
|
||||||
|
quiz
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (type === "Page") {
|
||||||
|
const page = item as LocalCoursePage;
|
||||||
|
await fileStorageService.pages.updatePage(
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
itemName,
|
||||||
|
page
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function updateItemOnServer<T extends CourseItemType>({
|
||||||
|
item,
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
previousModuleName,
|
||||||
|
previousItemName,
|
||||||
|
itemName,
|
||||||
|
type,
|
||||||
|
}: {
|
||||||
|
item: CourseItemReturnType<T>;
|
||||||
|
courseName: string;
|
||||||
|
moduleName: string;
|
||||||
|
previousModuleName: string;
|
||||||
|
previousItemName: string;
|
||||||
|
itemName: string;
|
||||||
|
type: T;
|
||||||
|
}) {
|
||||||
|
if (type === "Assignment") {
|
||||||
|
const assignment = item as LocalAssignment;
|
||||||
|
await fileStorageService.assignments.updateOrCreateAssignment({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
assignmentName: itemName,
|
||||||
|
assignment,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (
|
||||||
|
assignment.name !== previousItemName ||
|
||||||
|
moduleName !== previousModuleName
|
||||||
|
) {
|
||||||
|
fileStorageService.assignments.delete({
|
||||||
|
courseName,
|
||||||
|
moduleName: previousModuleName,
|
||||||
|
assignmentName: previousItemName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type === "Quiz") {
|
||||||
|
const quiz = item as LocalQuiz;
|
||||||
|
await fileStorageService.quizzes.updateQuiz(
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
itemName,
|
||||||
|
quiz
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
previousModuleName &&
|
||||||
|
previousItemName &&
|
||||||
|
(quiz.name !== previousItemName || moduleName !== previousModuleName)
|
||||||
|
) {
|
||||||
|
fileStorageService.quizzes.delete({
|
||||||
|
courseName,
|
||||||
|
moduleName: previousModuleName,
|
||||||
|
quizName: previousItemName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type === "Page") {
|
||||||
|
const page = item as LocalCoursePage;
|
||||||
|
await fileStorageService.pages.updatePage(
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
itemName,
|
||||||
|
page
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
previousModuleName &&
|
||||||
|
previousItemName &&
|
||||||
|
(page.name !== previousItemName || moduleName !== previousModuleName)
|
||||||
|
) {
|
||||||
|
fileStorageService.pages.delete({
|
||||||
|
courseName,
|
||||||
|
moduleName: previousModuleName,
|
||||||
|
pageName: previousItemName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteItemOnServer<T extends CourseItemType>({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
itemName,
|
||||||
|
type,
|
||||||
|
}: {
|
||||||
|
courseName: string;
|
||||||
|
moduleName: string;
|
||||||
|
itemName: string;
|
||||||
|
type: T;
|
||||||
|
}) {
|
||||||
|
if (type === "Assignment") {
|
||||||
|
await fileStorageService.assignments.delete({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
assignmentName: itemName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (type === "Quiz") {
|
||||||
|
await fileStorageService.quizzes.delete({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
quizName: itemName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (type === "Page") {
|
||||||
|
await fileStorageService.pages.delete({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
pageName: itemName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||||
import { axiosClient } from "@/services/axiosUtils";
|
|
||||||
import {
|
import {
|
||||||
useMutation,
|
useMutation,
|
||||||
useQueryClient,
|
useQueryClient,
|
||||||
@@ -10,15 +9,20 @@ import { localCourseKeys } from "./localCourseKeys";
|
|||||||
import { getAllAssignmentsQueryConfig } from "./assignmentHooks";
|
import { getAllAssignmentsQueryConfig } from "./assignmentHooks";
|
||||||
import { getAllQuizzesQueryConfig } from "./quizHooks";
|
import { getAllQuizzesQueryConfig } from "./quizHooks";
|
||||||
import { getAllItemsQueryConfig } from "./courseItemHooks";
|
import { getAllItemsQueryConfig } from "./courseItemHooks";
|
||||||
|
import {
|
||||||
|
createModuleOnServer,
|
||||||
|
getModuleNamesFromServer,
|
||||||
|
} from "./localCourseModuleServerActions";
|
||||||
|
|
||||||
export const useModuleNamesQuery = () => {
|
export const useModuleNamesQuery = () => {
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
return useSuspenseQuery({
|
return useSuspenseQuery({
|
||||||
queryKey: localCourseKeys.moduleNames(courseName),
|
queryKey: localCourseKeys.moduleNames(courseName),
|
||||||
queryFn: async (): Promise<string[]> => {
|
queryFn: async (): Promise<string[]> => {
|
||||||
const url = `/api/courses/${courseName}/modules`;
|
// const url = `/api/courses/${courseName}/modules`;
|
||||||
const response = await axiosClient.get(url);
|
// const response = await axiosClient.get(url);
|
||||||
return response.data;
|
// return response.data;
|
||||||
|
return await getModuleNamesFromServer({ courseName });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -28,9 +32,10 @@ export const useCreateModuleMutation = () => {
|
|||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async (moduleName: string) => {
|
mutationFn: async (moduleName: string) => {
|
||||||
const url = `/api/courses/${courseName}/modules`;
|
// const url = `/api/courses/${courseName}/modules`;
|
||||||
const response = await axiosClient.post(url, { moduleName });
|
// const response = await axiosClient.post(url, { moduleName });
|
||||||
return response.data;
|
// return response.data;
|
||||||
|
await createModuleOnServer({ courseName, moduleName });
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({
|
queryClient.invalidateQueries({
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
|
|
||||||
|
export async function getModuleNamesFromServer({
|
||||||
|
courseName,
|
||||||
|
}: {
|
||||||
|
courseName: string;
|
||||||
|
}) {
|
||||||
|
return await fileStorageService.modules.getModuleNames(courseName);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function createModuleOnServer({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
}: {
|
||||||
|
courseName: string;
|
||||||
|
moduleName: string;
|
||||||
|
}) {
|
||||||
|
await fileStorageService.modules.createModule(courseName, moduleName);
|
||||||
|
}
|
||||||
@@ -8,14 +8,21 @@ import {
|
|||||||
import { localCourseKeys } from "./localCourseKeys";
|
import { localCourseKeys } from "./localCourseKeys";
|
||||||
import { axiosClient } from "@/services/axiosUtils";
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||||
|
import {
|
||||||
|
createCourseOnServer,
|
||||||
|
getAllCoursesSettingsFromServer,
|
||||||
|
getCourseSettingsFromServer,
|
||||||
|
updateCourseSettingsOnServer,
|
||||||
|
} from "./localCoursesServerActions";
|
||||||
|
|
||||||
export const useLocalCoursesSettingsQuery = () =>
|
export const useLocalCoursesSettingsQuery = () =>
|
||||||
useSuspenseQuery({
|
useSuspenseQuery({
|
||||||
queryKey: localCourseKeys.allCoursesSettings,
|
queryKey: localCourseKeys.allCoursesSettings,
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const url = `/api/courses/settings`;
|
// const url = `/api/courses/settings`;
|
||||||
const response = await axiosClient.get<LocalCourseSettings[]>(url);
|
// const response = await axiosClient.get<LocalCourseSettings[]>(url);
|
||||||
return response.data;
|
// return response.data;
|
||||||
|
return await getAllCoursesSettingsFromServer();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -39,8 +46,9 @@ export const useCreateLocalCourseMutation = () => {
|
|||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async (newCourse: LocalCourse) => {
|
mutationFn: async (newCourse: LocalCourse) => {
|
||||||
const url = `/api/courses`;
|
// const url = `/api/courses`;
|
||||||
await axiosClient.post(url, newCourse);
|
// await axiosClient.post(url, newCourse);
|
||||||
|
await createCourseOnServer({ course: newCourse });
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({
|
queryClient.invalidateQueries({
|
||||||
@@ -59,8 +67,9 @@ export const useUpdateLocalCourseSettingsMutation = () => {
|
|||||||
localCourseKeys.settings(courseName),
|
localCourseKeys.settings(courseName),
|
||||||
updatedSettings
|
updatedSettings
|
||||||
);
|
);
|
||||||
const url = `/api/courses/${courseName}/settings`;
|
// const url = `/api/courses/${courseName}/settings`;
|
||||||
await axiosClient.put(url, updatedSettings);
|
// await axiosClient.put(url, updatedSettings);
|
||||||
|
await updateCourseSettingsOnServer({ courseName, settings: updatedSettings });
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({
|
queryClient.invalidateQueries({
|
||||||
|
|||||||
35
nextjs/src/hooks/localCourse/localCoursesServerActions.ts
Normal file
35
nextjs/src/hooks/localCourse/localCoursesServerActions.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
"use server";
|
||||||
|
import { LocalCourse, LocalCourseSettings } from "@/models/local/localCourse";
|
||||||
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
|
|
||||||
|
export async function getCourseSettingsFromServer({
|
||||||
|
courseName,
|
||||||
|
}: {
|
||||||
|
courseName: string;
|
||||||
|
}) {
|
||||||
|
return await fileStorageService.settings.getCourseSettings(courseName);
|
||||||
|
}
|
||||||
|
export async function getAllCoursesSettingsFromServer() {
|
||||||
|
return await fileStorageService.settings.getAllCoursesSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function createCourseOnServer({
|
||||||
|
course,
|
||||||
|
}: {
|
||||||
|
course: LocalCourse;
|
||||||
|
}) {
|
||||||
|
await fileStorageService.settings.updateCourseSettings(
|
||||||
|
course.settings.name,
|
||||||
|
course.settings
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function updateCourseSettingsOnServer({
|
||||||
|
courseName,
|
||||||
|
settings,
|
||||||
|
}: {
|
||||||
|
courseName: string;
|
||||||
|
settings: LocalCourseSettings;
|
||||||
|
}) {
|
||||||
|
await fileStorageService.settings.updateCourseSettings(courseName, settings);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user