refactoring queries

This commit is contained in:
2024-08-30 09:22:54 -06:00
parent 5d9ece63fa
commit 2b11c65bc8
3 changed files with 54 additions and 4 deletions

View File

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

View File

@@ -1,4 +1,5 @@
import { LocalCourse, LocalCourseSettings } from "@/models/local/localCourse"; import { LocalCourse, LocalCourseSettings } from "@/models/local/localCourse";
import { LocalModule } from "@/models/local/localModules";
import { import {
useMutation, useMutation,
useQueryClient, useQueryClient,
@@ -8,8 +9,21 @@ import axios from "axios";
export const localCourseKeys = { export const localCourseKeys = {
allCourses: ["all courses"] as const, allCourses: ["all courses"] as const,
courseSettings: (courseName: string) => settings: (courseName: string) =>
["course details", courseName, "settings"] as const, ["course details", courseName, "settings"] as const,
moduleNames: (courseName: string) =>
[
"course details",
courseName,
"modules",
{ type: "names" } as const,
] as const,
moduleAssignmentNames: (courseName: string, moduleName: string) =>
["course details", courseName, "modules", moduleName, "assignments"] as const,
moduleQuizzeNames: (courseName: string, moduleName: string) =>
["course details", courseName, "modules", moduleName, "quizzes"] as const,
modulePageNames: (courseName: string, moduleName: string) =>
["course details", courseName, "modules", moduleName, "pages"] as const,
}; };
export const useLocalCourseNamesQuery = () => export const useLocalCourseNamesQuery = () =>
@@ -24,7 +38,7 @@ export const useLocalCourseNamesQuery = () =>
export const useLocalCourseSettingsQuery = (courseName: string) => export const useLocalCourseSettingsQuery = (courseName: string) =>
useSuspenseQuery({ useSuspenseQuery({
queryKey: localCourseKeys.courseSettings(courseName), queryKey: localCourseKeys.settings(courseName),
queryFn: async (): Promise<LocalCourseSettings> => { queryFn: async (): Promise<LocalCourseSettings> => {
const url = `/api/courses/${courseName}/settings`; const url = `/api/courses/${courseName}/settings`;
const response = await axios.get(url); const response = await axios.get(url);
@@ -32,6 +46,17 @@ export const useLocalCourseSettingsQuery = (courseName: string) =>
}, },
}); });
export const useLocalCourseModuleNamesQuery = (courseName: string) =>
useSuspenseQuery({
queryKey: localCourseKeys.moduleNames(courseName),
queryFn: async (): Promise<string[]> => {
const url = `/api/courses/${courseName}/modules`;
const response = await axios.get(url);
return response.data;
},
});
export const useUpdateCourseMutation = (courseName: string) => { export const useUpdateCourseMutation = (courseName: string) => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
@@ -44,7 +69,7 @@ export const useUpdateCourseMutation = (courseName: string) => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: localCourseKeys.courseSettings(courseName), queryKey: localCourseKeys.settings(courseName),
}); });
}, },
scope: { scope: {

View File

@@ -63,6 +63,22 @@ export const fileStorageService = {
return { ...settings, name: folderName }; return { ...settings, name: folderName };
}, },
async getModuleNames(courseName: string) {
const courseDirectory = path.join(basePath, courseName);
const moduleDirectories = await fs.readdir(courseDirectory, {
withFileTypes: true,
});
const modulePromises = moduleDirectories
.filter((dirent) => dirent.isDirectory())
.map((dirent) =>
dirent.name
);
const modules = await Promise.all(modulePromises);
return modules.sort((a, b) => a.localeCompare(b));
},
async getEmptyDirectories(): Promise<string[]> { async getEmptyDirectories(): Promise<string[]> {
if (!(await directoryOrFileExists(basePath))) { if (!(await directoryOrFileExists(basePath))) {
throw new Error( throw new Error(