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,
|
||||
} from "@tanstack/react-query";
|
||||
import {
|
||||
createItemOnServer,
|
||||
deleteItemOnServer,
|
||||
getAllItemsFromServer,
|
||||
getItemFromServer,
|
||||
updateItemOnServer,
|
||||
} from "./courseItemServerActions";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
@@ -25,20 +28,20 @@ export const getAllItemsQueryConfig = <T extends CourseItemType>(
|
||||
) => ({
|
||||
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
|
||||
queryFn: async (): Promise<CourseItemReturnType<T>[]> => {
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
encodeURIComponent(courseName) +
|
||||
"/modules/" +
|
||||
encodeURIComponent(moduleName) +
|
||||
"/" +
|
||||
typeToFolder[type];
|
||||
const response = await axiosClient.get(url);
|
||||
return response.data;
|
||||
// return await getAllItemsFromServer({
|
||||
// courseName,
|
||||
// moduleName,
|
||||
// type,
|
||||
// });
|
||||
// const url =
|
||||
// "/api/courses/" +
|
||||
// encodeURIComponent(courseName) +
|
||||
// "/modules/" +
|
||||
// encodeURIComponent(moduleName) +
|
||||
// "/" +
|
||||
// typeToFolder[type];
|
||||
// const response = await axiosClient.get(url);
|
||||
// return response.data;
|
||||
return await getAllItemsFromServer({
|
||||
courseName,
|
||||
moduleName,
|
||||
type,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
@@ -51,23 +54,23 @@ export const getItemQueryConfig = <T extends CourseItemType>(
|
||||
return {
|
||||
queryKey: localCourseKeys.itemOfType(courseName, moduleName, name, type),
|
||||
queryFn: async () => {
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
encodeURIComponent(courseName) +
|
||||
"/modules/" +
|
||||
encodeURIComponent(moduleName) +
|
||||
"/" +
|
||||
typeToFolder[type] +
|
||||
"/" +
|
||||
encodeURIComponent(name);
|
||||
const response = await axiosClient.get<CourseItemReturnType<T>>(url);
|
||||
return response.data;
|
||||
// return await getItemFromServer({
|
||||
// moduleName,
|
||||
// courseName,
|
||||
// itemName: name,
|
||||
// type,
|
||||
// });
|
||||
// const url =
|
||||
// "/api/courses/" +
|
||||
// encodeURIComponent(courseName) +
|
||||
// "/modules/" +
|
||||
// encodeURIComponent(moduleName) +
|
||||
// "/" +
|
||||
// typeToFolder[type] +
|
||||
// "/" +
|
||||
// encodeURIComponent(name);
|
||||
// const response = await axiosClient.get<CourseItemReturnType<T>>(url);
|
||||
// return response.data;
|
||||
return await getItemFromServer({
|
||||
moduleName,
|
||||
courseName,
|
||||
itemName: name,
|
||||
type,
|
||||
});
|
||||
},
|
||||
};
|
||||
};
|
||||
@@ -147,33 +150,42 @@ export const useUpdateItemMutation = <T extends CourseItemType>(type: T) => {
|
||||
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
|
||||
item
|
||||
);
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
encodeURIComponent(courseName) +
|
||||
"/modules/" +
|
||||
encodeURIComponent(moduleName) +
|
||||
"/" +
|
||||
typeToFolder[type] +
|
||||
"/" +
|
||||
encodeURIComponent(itemName);
|
||||
if (type === "Assignment")
|
||||
await axiosClient.put(url, {
|
||||
assignment: item,
|
||||
previousModuleName,
|
||||
previousAssignmentName: previousItemName,
|
||||
});
|
||||
if (type === "Quiz")
|
||||
await axiosClient.put(url, {
|
||||
quiz: item,
|
||||
previousModuleName,
|
||||
previousQuizName: previousItemName,
|
||||
});
|
||||
if (type === "Page")
|
||||
await axiosClient.put(url, {
|
||||
page: item,
|
||||
previousModuleName,
|
||||
previousPageName: previousItemName,
|
||||
});
|
||||
await updateItemOnServer({
|
||||
courseName,
|
||||
moduleName,
|
||||
item,
|
||||
type,
|
||||
previousItemName,
|
||||
previousModuleName,
|
||||
itemName,
|
||||
});
|
||||
// const url =
|
||||
// "/api/courses/" +
|
||||
// encodeURIComponent(courseName) +
|
||||
// "/modules/" +
|
||||
// encodeURIComponent(moduleName) +
|
||||
// "/" +
|
||||
// typeToFolder[type] +
|
||||
// "/" +
|
||||
// encodeURIComponent(itemName);
|
||||
// if (type === "Assignment")
|
||||
// await axiosClient.put(url, {
|
||||
// assignment: item,
|
||||
// previousModuleName,
|
||||
// previousAssignmentName: previousItemName,
|
||||
// });
|
||||
// if (type === "Quiz")
|
||||
// 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 }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
@@ -210,16 +222,23 @@ export const useCreateItemMutation = <T extends CourseItemType>(type: T) => {
|
||||
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
|
||||
item
|
||||
);
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
encodeURIComponent(courseName) +
|
||||
"/modules/" +
|
||||
encodeURIComponent(moduleName) +
|
||||
"/" +
|
||||
typeToFolder[type] +
|
||||
"/" +
|
||||
encodeURIComponent(itemName);
|
||||
await axiosClient.post(url, item);
|
||||
// const url =
|
||||
// "/api/courses/" +
|
||||
// encodeURIComponent(courseName) +
|
||||
// "/modules/" +
|
||||
// encodeURIComponent(moduleName) +
|
||||
// "/" +
|
||||
// typeToFolder[type] +
|
||||
// "/" +
|
||||
// encodeURIComponent(itemName);
|
||||
// await axiosClient.post(url, item);
|
||||
await createItemOnServer({
|
||||
courseName,
|
||||
moduleName,
|
||||
item,
|
||||
type,
|
||||
itemName,
|
||||
});
|
||||
},
|
||||
onSuccess: async (_, { moduleName, itemName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
@@ -239,7 +258,6 @@ export const useCreateItemMutation = <T extends CourseItemType>(type: T) => {
|
||||
|
||||
export const useDeleteItemMutation = <T extends CourseItemType>(type: T) => {
|
||||
const { courseName } = useCourseContext();
|
||||
const router = useRouter();
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async ({
|
||||
@@ -249,16 +267,22 @@ export const useDeleteItemMutation = <T extends CourseItemType>(type: T) => {
|
||||
moduleName: string;
|
||||
itemName: string;
|
||||
}) => {
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
encodeURIComponent(courseName) +
|
||||
"/modules/" +
|
||||
encodeURIComponent(moduleName) +
|
||||
"/" +
|
||||
typeToFolder[type] +
|
||||
"/" +
|
||||
encodeURIComponent(itemName);
|
||||
await axiosClient.delete(url);
|
||||
// const url =
|
||||
// "/api/courses/" +
|
||||
// encodeURIComponent(courseName) +
|
||||
// "/modules/" +
|
||||
// encodeURIComponent(moduleName) +
|
||||
// "/" +
|
||||
// typeToFolder[type] +
|
||||
// "/" +
|
||||
// encodeURIComponent(itemName);
|
||||
// await axiosClient.delete(url);
|
||||
await deleteItemOnServer({
|
||||
courseName,
|
||||
itemName,
|
||||
moduleName,
|
||||
type,
|
||||
});
|
||||
},
|
||||
onSuccess: async (_, { moduleName, itemName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
"use server";
|
||||
|
||||
import { ItemInDay } from "@/app/course/[courseName]/calendar/day/ItemInDay";
|
||||
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
|
||||
import {
|
||||
CourseItemReturnType,
|
||||
CourseItemType,
|
||||
} from "@/models/local/courseItemTypes";
|
||||
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
|
||||
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
|
||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||
|
||||
export async function getAllItemsFromServer<T extends CourseItemType>({
|
||||
@@ -68,3 +71,160 @@ export async function getItemFromServer<T extends CourseItemType>({
|
||||
);
|
||||
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 { axiosClient } from "@/services/axiosUtils";
|
||||
import {
|
||||
useMutation,
|
||||
useQueryClient,
|
||||
@@ -10,15 +9,20 @@ import { localCourseKeys } from "./localCourseKeys";
|
||||
import { getAllAssignmentsQueryConfig } from "./assignmentHooks";
|
||||
import { getAllQuizzesQueryConfig } from "./quizHooks";
|
||||
import { getAllItemsQueryConfig } from "./courseItemHooks";
|
||||
import {
|
||||
createModuleOnServer,
|
||||
getModuleNamesFromServer,
|
||||
} from "./localCourseModuleServerActions";
|
||||
|
||||
export const useModuleNamesQuery = () => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery({
|
||||
queryKey: localCourseKeys.moduleNames(courseName),
|
||||
queryFn: async (): Promise<string[]> => {
|
||||
const url = `/api/courses/${courseName}/modules`;
|
||||
const response = await axiosClient.get(url);
|
||||
return response.data;
|
||||
// const url = `/api/courses/${courseName}/modules`;
|
||||
// const response = await axiosClient.get(url);
|
||||
// return response.data;
|
||||
return await getModuleNamesFromServer({ courseName });
|
||||
},
|
||||
});
|
||||
};
|
||||
@@ -28,9 +32,10 @@ export const useCreateModuleMutation = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async (moduleName: string) => {
|
||||
const url = `/api/courses/${courseName}/modules`;
|
||||
const response = await axiosClient.post(url, { moduleName });
|
||||
return response.data;
|
||||
// const url = `/api/courses/${courseName}/modules`;
|
||||
// const response = await axiosClient.post(url, { moduleName });
|
||||
// return response.data;
|
||||
await createModuleOnServer({ courseName, moduleName });
|
||||
},
|
||||
onSuccess: () => {
|
||||
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 { axiosClient } from "@/services/axiosUtils";
|
||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||
import {
|
||||
createCourseOnServer,
|
||||
getAllCoursesSettingsFromServer,
|
||||
getCourseSettingsFromServer,
|
||||
updateCourseSettingsOnServer,
|
||||
} from "./localCoursesServerActions";
|
||||
|
||||
export const useLocalCoursesSettingsQuery = () =>
|
||||
useSuspenseQuery({
|
||||
queryKey: localCourseKeys.allCoursesSettings,
|
||||
queryFn: async () => {
|
||||
const url = `/api/courses/settings`;
|
||||
const response = await axiosClient.get<LocalCourseSettings[]>(url);
|
||||
return response.data;
|
||||
// const url = `/api/courses/settings`;
|
||||
// const response = await axiosClient.get<LocalCourseSettings[]>(url);
|
||||
// return response.data;
|
||||
return await getAllCoursesSettingsFromServer();
|
||||
},
|
||||
});
|
||||
|
||||
@@ -39,8 +46,9 @@ export const useCreateLocalCourseMutation = () => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async (newCourse: LocalCourse) => {
|
||||
const url = `/api/courses`;
|
||||
await axiosClient.post(url, newCourse);
|
||||
// const url = `/api/courses`;
|
||||
// await axiosClient.post(url, newCourse);
|
||||
await createCourseOnServer({ course: newCourse });
|
||||
},
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({
|
||||
@@ -59,8 +67,9 @@ export const useUpdateLocalCourseSettingsMutation = () => {
|
||||
localCourseKeys.settings(courseName),
|
||||
updatedSettings
|
||||
);
|
||||
const url = `/api/courses/${courseName}/settings`;
|
||||
await axiosClient.put(url, updatedSettings);
|
||||
// const url = `/api/courses/${courseName}/settings`;
|
||||
// await axiosClient.put(url, updatedSettings);
|
||||
await updateCourseSettingsOnServer({ courseName, settings: updatedSettings });
|
||||
},
|
||||
onSuccess: () => {
|
||||
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