server actions

This commit is contained in:
2024-10-29 13:19:34 -06:00
parent 09a0e0b6c9
commit 6b59960189
14 changed files with 347 additions and 436 deletions

View File

@@ -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({});
});

View File

@@ -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);
});

View File

@@ -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({});
});

View File

@@ -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);
});

View File

@@ -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({});
});

View File

@@ -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);
});

View File

@@ -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({});
});

View File

@@ -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({});
});

View File

@@ -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({

View File

@@ -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,
});
}
}

View File

@@ -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({

View File

@@ -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);
}

View File

@@ -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({

View 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);
}