consolodating types

This commit is contained in:
2024-09-27 11:13:05 -06:00
parent f990619e05
commit 6539acec76
5 changed files with 92 additions and 54 deletions

View File

@@ -124,7 +124,11 @@ const hydrateModuleData = async (
queryClient: QueryClient
) => {
await queryClient.prefetchQuery({
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
queryKey: localCourseKeys.allItemsOfType(
courseName,
moduleName,
"Assignment"
),
queryFn: () => assignments,
});
await queryClient.prefetchQuery({
@@ -139,10 +143,11 @@ const hydrateModuleData = async (
assignments.map(
async (assignment) =>
await queryClient.prefetchQuery({
queryKey: localCourseKeys.assignment(
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
assignment.name
assignment.name,
"Assignment"
),
queryFn: () => assignment,
})

View File

@@ -15,7 +15,7 @@ export const getAllAssignmentsQueryConfig = (
courseName: string,
moduleName: string
) => ({
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
queryFn: async (): Promise<LocalAssignment[]> => {
const url =
"/api/courses/" +
@@ -39,10 +39,11 @@ export const getAssignmentQueryConfig = (
assignmentName: string
) => {
return {
queryKey: localCourseKeys.assignment(
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
assignmentName
assignmentName,
"Assignment"
),
queryFn: async () => {
const url =
@@ -105,22 +106,29 @@ export const useUpdateAssignmentMutation = () => {
previousModuleName !== moduleName
) {
queryClient.removeQueries({
queryKey: localCourseKeys.assignment(
queryKey: localCourseKeys.itemOfType(
courseName,
previousModuleName,
previousAssignmentName
previousAssignmentName,
"Assignment"
),
});
queryClient.removeQueries({
queryKey: localCourseKeys.allAssignments(
queryKey: localCourseKeys.allItemsOfType(
courseName,
previousModuleName
previousModuleName,
"Assignment"
),
});
}
queryClient.setQueryData(
localCourseKeys.assignment(courseName, moduleName, assignmentName),
localCourseKeys.itemOfType(
courseName,
moduleName,
assignmentName,
"Assignment"
),
assignment
);
const url =
@@ -138,13 +146,14 @@ export const useUpdateAssignmentMutation = () => {
},
onSuccess: async (_, { moduleName, assignmentName }) => {
await queryClient.invalidateQueries({
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
});
await queryClient.invalidateQueries({
queryKey: localCourseKeys.assignment(
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
assignmentName
assignmentName,
"Assignment"
),
});
},
@@ -165,7 +174,12 @@ export const useCreateAssignmentMutation = () => {
assignmentName: string;
}) => {
queryClient.setQueryData(
localCourseKeys.assignment(courseName, moduleName, assignmentName),
localCourseKeys.itemOfType(
courseName,
moduleName,
assignmentName,
"Assignment"
),
assignment
);
const url =
@@ -179,13 +193,14 @@ export const useCreateAssignmentMutation = () => {
},
onSuccess: async (_, { moduleName, assignmentName }) => {
await queryClient.invalidateQueries({
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
});
await queryClient.invalidateQueries({
queryKey: localCourseKeys.assignment(
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
assignmentName
assignmentName,
"Assignment"
),
});
},
@@ -204,14 +219,15 @@ export const useDeleteAssignmentMutation = () => {
assignmentName: string;
}) => {
queryClient.removeQueries({
queryKey: localCourseKeys.assignment(
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
assignmentName
assignmentName,
"Assignment"
),
});
queryClient.removeQueries({
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
});
const url =
"/api/courses/" +
@@ -224,7 +240,7 @@ export const useDeleteAssignmentMutation = () => {
},
onSuccess: async (_, { moduleName, assignmentName }) => {
queryClient.invalidateQueries({
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
});
},
});

View File

@@ -1,3 +1,5 @@
import { CourseItemType, typeToFolder } from "@/models/local/courseItemTypes";
export const localCourseKeys = {
allCoursesSettings: ["all courses settings"] as const,
allCoursesNames: ["all courses names"] as const,
@@ -10,14 +12,32 @@ export const localCourseKeys = {
"modules",
{ type: "names" } as const,
] as const,
allAssignments: (courseName: string, moduleName: string) =>
allItemsOfType: (
courseName: string,
moduleName: string,
type: CourseItemType
) =>
[
"course details",
courseName,
"modules",
moduleName,
"assignments",
{ type: "all assignments" },
typeToFolder[type],
{ type: "all" },
] as const,
itemOfType: (
courseName: string,
moduleName: string,
name: string,
type: CourseItemType
) =>
[
"course details",
courseName,
"modules",
moduleName,
typeToFolder[type],
name,
] as const,
allQuizzes: (courseName: string, moduleName: string) =>
[
@@ -26,7 +46,7 @@ export const localCourseKeys = {
"modules",
moduleName,
"quizzes",
{ type: "all quizzes" },
{ type: "all" },
] as const,
allPages: (courseName: string, moduleName: string) =>
[
@@ -35,20 +55,7 @@ export const localCourseKeys = {
"modules",
moduleName,
"pages",
{ type: "all pages" },
] as const,
assignment: (
courseName: string,
moduleName: string,
assignmentName: string
) =>
[
"course details",
courseName,
"modules",
moduleName,
"assignments",
assignmentName,
{ type: "all" },
] as const,
quiz: (courseName: string, moduleName: string, quizName: string) =>
[

View File

@@ -0,0 +1,17 @@
import { LocalAssignment } from "./assignment/localAssignment";
import { LocalCoursePage } from "./page/localCoursePage";
import { LocalQuiz } from "./quiz/localQuiz";
export type CourseItemType = "Assignment" | "Quiz" | "Page";
export type CourseItemReturnType<T extends CourseItemType> = T extends "Assignment"
? LocalAssignment
: T extends "Quiz"
? LocalQuiz
: LocalCoursePage;
export const typeToFolder = {
Assignment: "assignments",
Quiz: "quizzes",
Page: "pages",
} as const;

View File

@@ -15,14 +15,11 @@ import {
} from "@/models/local/page/localCoursePage";
import { assignmentMarkdownSerializer } from "@/models/local/assignment/utils/assignmentMarkdownSerializer";
import { quizMarkdownUtils } from "@/models/local/quiz/utils/quizMarkdownUtils";
const typeToFolder = {
Assignment: "assignments",
Quiz: "quizzes",
Page: "pages",
} as const;
export type CourseItemType = "Assignment" | "Quiz" | "Page";
import {
CourseItemReturnType,
CourseItemType,
typeToFolder,
} from "@/models/local/courseItemTypes";
const getItemFileNames = async (
courseName: string,
@@ -41,11 +38,6 @@ const getItemFileNames = async (
const itemFiles = await fs.readdir(filePath);
return itemFiles.map((f) => f.replace(/\.md$/, ""));
};
type CourseItemReturnType<T extends CourseItemType> = T extends "Assignment"
? LocalAssignment
: T extends "Quiz"
? LocalQuiz
: LocalCoursePage;
const getItem = async <T extends CourseItemType>(
courseName: string,
@@ -129,7 +121,8 @@ export const courseItemFileStorageService = {
const markdownDictionary: {
[key in CourseItemType]: () => string;
} = {
Assignment: () => assignmentMarkdownSerializer.toMarkdown(item as LocalAssignment),
Assignment: () =>
assignmentMarkdownSerializer.toMarkdown(item as LocalAssignment),
Quiz: () => quizMarkdownUtils.toMarkdown(item as LocalQuiz),
Page: () => localPageMarkdownUtils.toMarkdown(item as LocalCoursePage),
};