mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
starting to move over settings
This commit is contained in:
@@ -1,16 +1,14 @@
|
|||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
import { axiosClient } from "@/services/axiosUtils";
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
import { withErrorHandling } from "@/services/withErrorHandling";
|
||||||
import {
|
import { isAxiosError } from "axios";
|
||||||
isAxiosError,
|
|
||||||
} from "axios";
|
|
||||||
|
|
||||||
|
|
||||||
const appendQueryParams = (url: URL, req: NextRequest) => {
|
const appendQueryParams = (url: URL, req: NextRequest) => {
|
||||||
req.nextUrl.searchParams.forEach((value, key) => {
|
req.nextUrl.searchParams.forEach((value, key) => {
|
||||||
url.searchParams.set(key, value);
|
url.searchParams.set(key, value);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUrl = (params: { rest: string[] }, req: NextRequest) => {
|
const getUrl = (params: { rest: string[] }, req: NextRequest) => {
|
||||||
const { rest } = params;
|
const { rest } = params;
|
||||||
const path = rest.join("/");
|
const path = rest.join("/");
|
||||||
@@ -19,7 +17,8 @@ const getUrl = (params: { rest: string[] }, req: NextRequest) => {
|
|||||||
|
|
||||||
appendQueryParams(url, req);
|
appendQueryParams(url, req);
|
||||||
|
|
||||||
return url;};
|
return url;
|
||||||
|
};
|
||||||
|
|
||||||
const proxyResponseHeaders = (response: any) => {
|
const proxyResponseHeaders = (response: any) => {
|
||||||
const headers = new Headers();
|
const headers = new Headers();
|
||||||
@@ -31,15 +30,13 @@ const proxyResponseHeaders = (response: any) => {
|
|||||||
|
|
||||||
export async function GET(
|
export async function GET(
|
||||||
req: NextRequest,
|
req: NextRequest,
|
||||||
{ params }: { params: { rest: string[] } }
|
{ params }: { params: Promise<{ rest: string[] }> }
|
||||||
) {
|
) {
|
||||||
return withErrorHandling(async () => {
|
return withErrorHandling(async () => {
|
||||||
try {
|
try {
|
||||||
const url = getUrl(params, req);
|
const url = getUrl(await params, req);
|
||||||
|
|
||||||
const response = await axiosClient.get(
|
const response = await axiosClient.get(url.toString());
|
||||||
url.toString()
|
|
||||||
);
|
|
||||||
|
|
||||||
const headers = proxyResponseHeaders(response);
|
const headers = proxyResponseHeaders(response);
|
||||||
return new NextResponse(JSON.stringify(response.data), { headers });
|
return new NextResponse(JSON.stringify(response.data), { headers });
|
||||||
@@ -54,10 +51,10 @@ export async function GET(
|
|||||||
|
|
||||||
export async function POST(
|
export async function POST(
|
||||||
req: NextRequest,
|
req: NextRequest,
|
||||||
{ params }: { params: { rest: string[] } }
|
{ params }: { params: Promise<{ rest: string[] }> }
|
||||||
) {
|
) {
|
||||||
return withErrorHandling(async () => {
|
return withErrorHandling(async () => {
|
||||||
const url = getUrl(params, req);
|
const url = getUrl(await params, req);
|
||||||
const body = await req.json();
|
const body = await req.json();
|
||||||
let response;
|
let response;
|
||||||
try {
|
try {
|
||||||
@@ -83,10 +80,10 @@ export async function POST(
|
|||||||
|
|
||||||
export async function PUT(
|
export async function PUT(
|
||||||
req: NextRequest,
|
req: NextRequest,
|
||||||
{ params }: { params: { rest: string[] } }
|
{ params }: { params: Promise<{ rest: string[] }> }
|
||||||
) {
|
) {
|
||||||
return withErrorHandling(async () => {
|
return withErrorHandling(async () => {
|
||||||
const url = getUrl(params, req);
|
const url = getUrl(await params, req);
|
||||||
const body = await req.json();
|
const body = await req.json();
|
||||||
try {
|
try {
|
||||||
const response = await axiosClient.put(url.toString(), body);
|
const response = await axiosClient.put(url.toString(), body);
|
||||||
@@ -118,11 +115,11 @@ export async function PUT(
|
|||||||
|
|
||||||
export async function DELETE(
|
export async function DELETE(
|
||||||
req: NextRequest,
|
req: NextRequest,
|
||||||
{ params }: { params: { rest: string[] } }
|
{ params }: { params: Promise<{ rest: string[] }> }
|
||||||
) {
|
) {
|
||||||
return withErrorHandling(async () => {
|
return withErrorHandling(async () => {
|
||||||
try {
|
try {
|
||||||
const url = getUrl(params, req);
|
const url = getUrl(await params, req);
|
||||||
const response = await axiosClient.delete(url.toString());
|
const response = await axiosClient.delete(url.toString());
|
||||||
|
|
||||||
const headers = proxyResponseHeaders(response);
|
const headers = proxyResponseHeaders(response);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHoo
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
export function CourseNavigation() {
|
export function CourseNavigation() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
return (
|
return (
|
||||||
<div className="pb-1 ps-5 flex flex-row gap-3">
|
<div className="pb-1 ps-5 flex flex-row gap-3">
|
||||||
<Link href={"/"} className="btn">
|
<Link href={"/"} className="btn">
|
||||||
|
|||||||
@@ -7,12 +7,16 @@ import { getCourseSettingsUrl } from "@/services/urlUtils";
|
|||||||
|
|
||||||
export default function CourseSettingsLink() {
|
export default function CourseSettingsLink() {
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{settings.name}
|
{settings.name}
|
||||||
|
|
||||||
<Link className="mx-3 underline" href={getCourseSettingsUrl(courseName)} shallow={true}>
|
<Link
|
||||||
|
className="mx-3 underline"
|
||||||
|
href={getCourseSettingsUrl(courseName)}
|
||||||
|
shallow={true}
|
||||||
|
>
|
||||||
Course Settings
|
Course Settings
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export function CalendarWeek({
|
|||||||
week: string[]; //date strings
|
week: string[]; //date strings
|
||||||
monthNumber: number;
|
monthNumber: number;
|
||||||
}) {
|
}) {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings]= useLocalCourseSettingsQuery();
|
||||||
const startDate = getDateFromStringOrThrow(
|
const startDate = getDateFromStringOrThrow(
|
||||||
settings.startDate,
|
settings.startDate,
|
||||||
"week calculation start date"
|
"week calculation start date"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { useMemo } from "react";
|
|||||||
import CalendarItemsContextProvider from "../context/CalendarItemsContextProvider";
|
import CalendarItemsContextProvider from "../context/CalendarItemsContextProvider";
|
||||||
|
|
||||||
export default function CourseCalendar() {
|
export default function CourseCalendar() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
|
|
||||||
const startDateTime = useMemo(
|
const startDateTime = useMemo(
|
||||||
() => getDateFromStringOrThrow(settings.startDate, "course start date"),
|
() => getDateFromStringOrThrow(settings.startDate, "course start date"),
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export default function Day({ day, month }: { day: string; month: number }) {
|
|||||||
getDateOnlyMarkdownString(new Date()) ===
|
getDateOnlyMarkdownString(new Date()) ===
|
||||||
getDateOnlyMarkdownString(dayAsDate);
|
getDateOnlyMarkdownString(dayAsDate);
|
||||||
|
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const { itemDropOnDay } = useDraggingContext();
|
const { itemDropOnDay } = useDraggingContext();
|
||||||
|
|
||||||
const { todaysAssignments, todaysQuizzes, todaysPages } = useTodaysItems(day);
|
const { todaysAssignments, todaysQuizzes, todaysPages } = useTodaysItems(day);
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export function useItemDropOnDay({
|
|||||||
setIsLoading: Dispatch<SetStateAction<boolean>>;
|
setIsLoading: Dispatch<SetStateAction<boolean>>;
|
||||||
modal: { isOpen: boolean; openModal: () => void; closeModal: () => void };
|
modal: { isOpen: boolean; openModal: () => void; closeModal: () => void };
|
||||||
}) {
|
}) {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
// const { data: weeks } = useLecturesByWeekQuery();
|
// const { data: weeks } = useLecturesByWeekQuery();
|
||||||
const [weeks] = trpc.lectures.getLectures.useSuspenseQuery({
|
const [weeks] = trpc.lectures.getLectures.useSuspenseQuery({
|
||||||
courseName: settings.name,
|
courseName: settings.name,
|
||||||
|
|||||||
@@ -11,17 +11,14 @@ export default function EditLectureTitle({
|
|||||||
}: {
|
}: {
|
||||||
lectureDay: string;
|
lectureDay: string;
|
||||||
}) {
|
}) {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const lectureDate = getDateFromString(lectureDay);
|
const lectureDate = getDateFromString(lectureDay);
|
||||||
const lectureWeekName = getLectureWeekName(settings.startDate, lectureDay);
|
const lectureWeekName = getLectureWeekName(settings.startDate, lectureDay);
|
||||||
return (
|
return (
|
||||||
<div className="flex justify-between sm:flex-row flex-col">
|
<div className="flex justify-between sm:flex-row flex-col">
|
||||||
<div className="my-auto">
|
<div className="my-auto">
|
||||||
<Link
|
<Link className="btn hidden sm:inline" href={getCourseUrl(courseName)}>
|
||||||
className="btn hidden sm:inline"
|
|
||||||
href={getCourseUrl(courseName)}
|
|
||||||
>
|
|
||||||
{courseName}
|
{courseName}
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { lectureKeys } from "@/hooks/localCourse/lectureKeys";
|
|||||||
export default function LectureButtons({ lectureDay }: { lectureDay: string }) {
|
export default function LectureButtons({ lectureDay }: { lectureDay: string }) {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
const modal = useModal();
|
const modal = useModal();
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ export default function ModuleList() {
|
|||||||
const { data: moduleNames } = useModuleNamesQuery();
|
const { data: moduleNames } = useModuleNamesQuery();
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{moduleNames.map((m) => (
|
{/* {moduleNames.map((m) => (
|
||||||
<ExpandableModule key={m} moduleName={m} />
|
<ExpandableModule key={m} moduleName={m} />
|
||||||
))}
|
))} */}
|
||||||
<div className="flex flex-col justify-center">
|
<div className="flex flex-col justify-center">
|
||||||
<CreateModule />
|
<CreateModule />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export default function NewItemForm({
|
|||||||
creationDate?: string;
|
creationDate?: string;
|
||||||
onCreate?: () => void;
|
onCreate?: () => void;
|
||||||
}) {
|
}) {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: modules } = useModuleNamesQuery();
|
const { data: modules } = useModuleNamesQuery();
|
||||||
const [type, setType] = useState<"Assignment" | "Quiz" | "Page">(
|
const [type, setType] = useState<"Assignment" | "Quiz" | "Page">(
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export function AssignmentButtons({
|
|||||||
}) {
|
}) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const {
|
const {
|
||||||
data: canvasAssignments,
|
data: canvasAssignments,
|
||||||
isPending: canvasIsPending,
|
isPending: canvasIsPending,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export default function EditAssignment({
|
|||||||
}) {
|
}) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const [assignment] = useAssignmentQuery(moduleName, assignmentName);
|
const [assignment] = useAssignmentQuery(moduleName, assignmentName);
|
||||||
const updateAssignment = useUpdateAssignmentMutation();
|
const updateAssignment = useUpdateAssignmentMutation();
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export default function EditPage({
|
|||||||
localPageMarkdownUtils.toMarkdown(page)
|
localPageMarkdownUtils.toMarkdown(page)
|
||||||
);
|
);
|
||||||
const [error, setError] = useState("");
|
const [error, setError] = useState("");
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const delay = 500;
|
const delay = 500;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export default function EditPageButtons({
|
|||||||
}) {
|
}) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const { data: page } = usePageQuery(moduleName, pageName);
|
const { data: page } = usePageQuery(moduleName, pageName);
|
||||||
const { data: canvasPages } = useCanvasPagesQuery();
|
const { data: canvasPages } = useCanvasPagesQuery();
|
||||||
const createPageInCanvas = useCreateCanvasPageMutation();
|
const createPageInCanvas = useCreateCanvasPageMutation();
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ import {
|
|||||||
useAddQuizToCanvasMutation,
|
useAddQuizToCanvasMutation,
|
||||||
useDeleteQuizFromCanvasMutation,
|
useDeleteQuizFromCanvasMutation,
|
||||||
} from "@/hooks/canvas/canvasQuizHooks";
|
} from "@/hooks/canvas/canvasQuizHooks";
|
||||||
import { useDeleteItemMutation, useItemQuery } from "@/hooks/localCourse/courseItemHooks";
|
import {
|
||||||
|
useDeleteItemMutation,
|
||||||
|
useItemQuery,
|
||||||
|
} from "@/hooks/localCourse/courseItemHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
||||||
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
||||||
import { getCourseUrl } from "@/services/urlUtils";
|
import { getCourseUrl } from "@/services/urlUtils";
|
||||||
@@ -24,7 +27,7 @@ export function QuizButtons({
|
|||||||
}) {
|
}) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const { data: canvasQuizzes } = useCanvasQuizzesQuery();
|
const { data: canvasQuizzes } = useCanvasQuizzesQuery();
|
||||||
const { data: quiz } = useItemQuery(moduleName, quizName, "Quiz");
|
const { data: quiz } = useItemQuery(moduleName, quizName, "Quiz");
|
||||||
const addToCanvas = useAddQuizToCanvasMutation();
|
const addToCanvas = useAddQuizToCanvasMutation();
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import TextInput from "../../../../components/form/TextInput";
|
|||||||
import { useSetAssignmentGroupsMutation } from "@/hooks/canvas/canvasCourseHooks";
|
import { useSetAssignmentGroupsMutation } from "@/hooks/canvas/canvasCourseHooks";
|
||||||
|
|
||||||
export default function AssignmentGroupManagement() {
|
export default function AssignmentGroupManagement() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||||
const applyInCanvas = useSetAssignmentGroupsMutation(settings.canvasId); // untested
|
const applyInCanvas = useSetAssignmentGroupsMutation(settings.canvasId); // untested
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
export default function DaysOfWeekSettings() {
|
export default function DaysOfWeekSettings() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { useState } from "react";
|
|||||||
import DefaultLockOffset from "./DefaultLockOffset";
|
import DefaultLockOffset from "./DefaultLockOffset";
|
||||||
|
|
||||||
export default function DefaultDueTime() {
|
export default function DefaultDueTime() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||||
const [haveLockOffset, setHaveLockOffset] = useState(
|
const [haveLockOffset, setHaveLockOffset] = useState(
|
||||||
!!settings.defaultLockHoursOffset
|
!!settings.defaultLockHoursOffset
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
|
|
||||||
export default function DefaultFileUploadTypes() {
|
export default function DefaultFileUploadTypes() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const [defaultFileUploadTypes, setDefaultFileUploadTypes] = useState<
|
const [defaultFileUploadTypes, setDefaultFileUploadTypes] = useState<
|
||||||
string[]
|
string[]
|
||||||
>(settings.defaultFileUploadTypes);
|
>(settings.defaultFileUploadTypes);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
export default function DefaultLockOffset() {
|
export default function DefaultLockOffset() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||||
const [hoursOffset, setHoursOffset] = useState(
|
const [hoursOffset, setHoursOffset] = useState(
|
||||||
settings.defaultLockHoursOffset?.toString() ?? "0"
|
settings.defaultLockHoursOffset?.toString() ?? "0"
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ export default function HolidayConfig() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
function InnerHolidayConfig() {
|
function InnerHolidayConfig() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
console.log(settings.holidays);
|
console.log(settings.holidays);
|
||||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||||
|
|
||||||
|
|||||||
@@ -7,23 +7,20 @@ import { useCourseContext } from "../context/courseContext";
|
|||||||
|
|
||||||
export default function SettingsHeader() {
|
export default function SettingsHeader() {
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="flex flex-row justify-between">
|
<div className="flex flex-row justify-between">
|
||||||
<div className="my-auto">
|
<div className="my-auto">
|
||||||
|
<Link className="btn" href={getCourseUrl(courseName)}>
|
||||||
<Link className="btn" href={getCourseUrl(courseName)}>
|
Back To Course
|
||||||
Back To Course
|
</Link>
|
||||||
</Link>
|
|
||||||
</div>
|
</div>
|
||||||
<h3 className="text-center mb-3">
|
<h3 className="text-center mb-3">
|
||||||
{settings.name}{" "}
|
{settings.name}{" "}
|
||||||
<span className="text-slate-500 text-xl"> settings</span>
|
<span className="text-slate-500 text-xl"> settings</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div>
|
<div></div>
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { getDateOnlyMarkdownString } from "@/models/local/timeUtils";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
export default function StartAndEndDate() {
|
export default function StartAndEndDate() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const startDate = new Date(settings.startDate);
|
const startDate = new Date(settings.startDate);
|
||||||
const endDate = new Date(settings.endDate);
|
const endDate = new Date(settings.endDate);
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
|
|
||||||
export default function SubmissionDefaults() {
|
export default function SubmissionDefaults() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const [defaultSubmissionTypes, setDefaultSubmissionTypes] = useState<
|
const [defaultSubmissionTypes, setDefaultSubmissionTypes] = useState<
|
||||||
AssignmentSubmissionType[]
|
AssignmentSubmissionType[]
|
||||||
>(settings.defaultAssignmentSubmissionTypes);
|
>(settings.defaultAssignmentSubmissionTypes);
|
||||||
@@ -29,8 +29,6 @@ export default function SubmissionDefaults() {
|
|||||||
}
|
}
|
||||||
}, [defaultSubmissionTypes, settings, updateSettings]);
|
}, [defaultSubmissionTypes, settings, updateSettings]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="border w-fit p-3 m-3 rounded-md">
|
<div className="border w-fit p-3 m-3 rounded-md">
|
||||||
<div className="text-center">Default Assignment Submission Type</div>
|
<div className="text-center">Default Assignment Submission Type</div>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export default async function RootLayout({
|
|||||||
<MyToaster />
|
<MyToaster />
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<Providers>
|
<Providers>
|
||||||
{children}
|
<DataHydration>{children}</DataHydration>
|
||||||
</Providers>
|
</Providers>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</div>
|
</div>
|
||||||
@@ -41,3 +41,52 @@ export default async function RootLayout({
|
|||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function DataHydration({
|
||||||
|
children,
|
||||||
|
}: Readonly<{
|
||||||
|
children: React.ReactNode;
|
||||||
|
}>) {
|
||||||
|
console.log("starting hydration");
|
||||||
|
const trpcHelper = createServerSideHelpers({
|
||||||
|
router: trpcAppRouter,
|
||||||
|
ctx: createTrpcContext(),
|
||||||
|
transformer: superjson,
|
||||||
|
});
|
||||||
|
const allSettings = await fileStorageService.settings.getAllCoursesSettings();
|
||||||
|
await Promise.all(
|
||||||
|
allSettings.map(async (settings) => {
|
||||||
|
const courseName = settings.name;
|
||||||
|
const moduleNames = await fileStorageService.modules.getModuleNames(
|
||||||
|
courseName
|
||||||
|
);
|
||||||
|
await Promise.all(
|
||||||
|
moduleNames.map(
|
||||||
|
async (moduleName) =>
|
||||||
|
await trpcHelper.assignment.getAllAssignments.prefetch({
|
||||||
|
courseName,
|
||||||
|
moduleName,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
allSettings.map(
|
||||||
|
async (settings) =>
|
||||||
|
await trpcHelper.lectures.getLectures.prefetch({
|
||||||
|
courseName: settings.name,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
await hydrateCourses(trpcHelper.queryClient);
|
||||||
|
|
||||||
|
const dehydratedState = dehydrate(trpcHelper.queryClient);
|
||||||
|
console.log("ran hydration");
|
||||||
|
|
||||||
|
return (
|
||||||
|
<HydrationBoundary state={dehydratedState}>{children}</HydrationBoundary>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,70 +1,25 @@
|
|||||||
import { hydrateCourses } from "@/hooks/hookHydration";
|
|
||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
||||||
import { createTrpcContext } from "@/services/trpc/context";
|
|
||||||
import { trpcAppRouter } from "@/services/trpc/router/app";
|
|
||||||
import { dehydrate, HydrationBoundary } from "@tanstack/react-query";
|
|
||||||
import { createServerSideHelpers } from "@trpc/react-query/server";
|
|
||||||
import CourseList from "./CourseList";
|
import CourseList from "./CourseList";
|
||||||
import AddNewCourse from "./newCourse/AddNewCourse";
|
import AddNewCourse from "./newCourse/AddNewCourse";
|
||||||
import TodaysLectures from "./todaysLectures/TodaysLectures";
|
import TodaysLectures from "./todaysLectures/TodaysLectures";
|
||||||
import superjson from "superjson";
|
|
||||||
import { trpc } from "@/services/trpc/utils";
|
|
||||||
|
|
||||||
export default async function Home() {
|
export default async function Home() {
|
||||||
const trpcHelper = createServerSideHelpers({
|
|
||||||
router: trpcAppRouter,
|
|
||||||
ctx: createTrpcContext(),
|
|
||||||
transformer: superjson,
|
|
||||||
});
|
|
||||||
const allSettings = await fileStorageService.settings.getAllCoursesSettings();
|
|
||||||
await Promise.all(
|
|
||||||
allSettings.map(async (settings) => {
|
|
||||||
const courseName = settings.name;
|
|
||||||
const moduleNames = await fileStorageService.modules.getModuleNames(
|
|
||||||
courseName
|
|
||||||
);
|
|
||||||
await Promise.all(
|
|
||||||
moduleNames.map(
|
|
||||||
async (moduleName) =>
|
|
||||||
await trpcHelper.assignment.getAllAssignments.fetch({
|
|
||||||
courseName,
|
|
||||||
moduleName,
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
await Promise.all(
|
|
||||||
allSettings.map(
|
|
||||||
async (settings) =>
|
|
||||||
await trpcHelper.lectures.getLectures.prefetch({ courseName: settings.name })
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
await hydrateCourses(trpcHelper.queryClient);
|
|
||||||
|
|
||||||
const dehydratedState = dehydrate(trpcHelper.queryClient);
|
|
||||||
// console.log("dehydratedState", dehydratedState);
|
|
||||||
return (
|
return (
|
||||||
<HydrationBoundary state={dehydratedState}>
|
<main className="h-full flex justify-center overflow-auto">
|
||||||
<main className="h-full flex justify-center overflow-auto">
|
<div className="xl:w-[900px] mx-auto">
|
||||||
<div className="xl:w-[900px] mx-auto">
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<div className=" flex justify-center">
|
||||||
<div className=" flex justify-center">
|
<CourseList />
|
||||||
<CourseList />
|
|
||||||
</div>
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<TodaysLectures />
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<AddNewCourse />
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
<br />
|
||||||
</HydrationBoundary>
|
<br />
|
||||||
|
<TodaysLectures />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<AddNewCourse />
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export const canvasAssignmentKeys = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useCanvasAssignmentsQuery = () => {
|
export const useCanvasAssignmentsQuery = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
|
|
||||||
return useSuspenseQuery({
|
return useSuspenseQuery({
|
||||||
queryKey: canvasAssignmentKeys.assignments(settings.canvasId),
|
queryKey: canvasAssignmentKeys.assignments(settings.canvasId),
|
||||||
@@ -31,7 +31,7 @@ export const useCanvasAssignmentsQuery = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// export const useCanvasAssignmentsQuery = () => {
|
// export const useCanvasAssignmentsQuery = () => {
|
||||||
// const { data: settings } = useLocalCourseSettingsQuery();
|
// const [settings] = useLocalCourseSettingsQuery();
|
||||||
// const { data: allAssignments } = useInnerCanvasAssignmentsQuery();
|
// const { data: allAssignments } = useInnerCanvasAssignmentsQuery();
|
||||||
|
|
||||||
// return useSuspenseQueries({
|
// return useSuspenseQueries({
|
||||||
@@ -47,7 +47,7 @@ export const useCanvasAssignmentsQuery = () => {
|
|||||||
// };
|
// };
|
||||||
|
|
||||||
export const useAddAssignmentToCanvasMutation = () => {
|
export const useAddAssignmentToCanvasMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const { data: canvasModules } = useCanvasModulesQuery();
|
const { data: canvasModules } = useCanvasModulesQuery();
|
||||||
const addModule = useAddCanvasModuleMutation();
|
const addModule = useAddCanvasModuleMutation();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
@@ -90,7 +90,7 @@ export const useAddAssignmentToCanvasMutation = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useUpdateAssignmentInCanvasMutation = () => {
|
export const useUpdateAssignmentInCanvasMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
return useMutation({
|
return useMutation({
|
||||||
@@ -120,7 +120,7 @@ export const useUpdateAssignmentInCanvasMutation = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useDeleteAssignmentFromCanvasMutation = () => {
|
export const useDeleteAssignmentFromCanvasMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async ({
|
mutationFn: async ({
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export const canvasCourseModuleKeys = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useCanvasModulesQuery = () => {
|
export const useCanvasModulesQuery = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
return useSuspenseQuery({
|
return useSuspenseQuery({
|
||||||
queryKey: canvasCourseModuleKeys.modules(settings.canvasId),
|
queryKey: canvasCourseModuleKeys.modules(settings.canvasId),
|
||||||
queryFn: async () =>
|
queryFn: async () =>
|
||||||
@@ -20,7 +20,7 @@ export const useCanvasModulesQuery = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useAddCanvasModuleMutation = () => {
|
export const useAddCanvasModuleMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async (moduleName: string) =>
|
mutationFn: async (moduleName: string) =>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export const canvasPageKeys = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useCanvasPagesQuery = () => {
|
export const useCanvasPagesQuery = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
return useSuspenseQuery({
|
return useSuspenseQuery({
|
||||||
queryKey: canvasPageKeys.pagesInCourse(settings.canvasId),
|
queryKey: canvasPageKeys.pagesInCourse(settings.canvasId),
|
||||||
queryFn: async () => await canvasPageService.getAll(settings.canvasId),
|
queryFn: async () => await canvasPageService.getAll(settings.canvasId),
|
||||||
@@ -29,7 +29,7 @@ export const useCanvasPagesQuery = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useCreateCanvasPageMutation = () => {
|
export const useCreateCanvasPageMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const { data: canvasModules } = useCanvasModulesQuery();
|
const { data: canvasModules } = useCanvasModulesQuery();
|
||||||
const addModule = useAddCanvasModuleMutation();
|
const addModule = useAddCanvasModuleMutation();
|
||||||
@@ -69,7 +69,7 @@ export const useCreateCanvasPageMutation = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useUpdateCanvasPageMutation = () => {
|
export const useUpdateCanvasPageMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async ({
|
mutationFn: async ({
|
||||||
@@ -88,7 +88,7 @@ export const useUpdateCanvasPageMutation = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useDeleteCanvasPageMutation = () => {
|
export const useDeleteCanvasPageMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async (canvasPageId: number) =>
|
mutationFn: async (canvasPageId: number) =>
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ import {
|
|||||||
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
||||||
import { canvasQuizService } from "@/services/canvas/canvasQuizService";
|
import { canvasQuizService } from "@/services/canvas/canvasQuizService";
|
||||||
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
|
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
|
||||||
import { useAddCanvasModuleMutation, useCanvasModulesQuery } from "./canvasModuleHooks";
|
import {
|
||||||
|
useAddCanvasModuleMutation,
|
||||||
|
useCanvasModulesQuery,
|
||||||
|
} from "./canvasModuleHooks";
|
||||||
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
||||||
|
|
||||||
export const canvasQuizKeys = {
|
export const canvasQuizKeys = {
|
||||||
@@ -15,7 +18,7 @@ export const canvasQuizKeys = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useCanvasQuizzesQuery = () => {
|
export const useCanvasQuizzesQuery = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
|
|
||||||
return useSuspenseQuery({
|
return useSuspenseQuery({
|
||||||
queryKey: canvasQuizKeys.quizzes(settings.canvasId),
|
queryKey: canvasQuizKeys.quizzes(settings.canvasId),
|
||||||
@@ -24,7 +27,7 @@ export const useCanvasQuizzesQuery = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useAddQuizToCanvasMutation = () => {
|
export const useAddQuizToCanvasMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const { data: canvasModules } = useCanvasModulesQuery();
|
const { data: canvasModules } = useCanvasModulesQuery();
|
||||||
const addModule = useAddCanvasModuleMutation();
|
const addModule = useAddCanvasModuleMutation();
|
||||||
@@ -68,7 +71,7 @@ export const useAddQuizToCanvasMutation = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useDeleteQuizFromCanvasMutation = () => {
|
export const useDeleteQuizFromCanvasMutation = () => {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async (canvasQuizId: number) => {
|
mutationFn: async (canvasQuizId: number) => {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import { useLocalCourseSettingsQuery } from "./localCoursesHooks";
|
|||||||
|
|
||||||
export const useLectureUpdateMutation = () => {
|
export const useLectureUpdateMutation = () => {
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async ({
|
mutationFn: async ({
|
||||||
|
|||||||
@@ -9,33 +9,35 @@ import { localCourseKeys } from "./localCourseKeys";
|
|||||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||||
import {
|
import {
|
||||||
createCourseOnServer,
|
createCourseOnServer,
|
||||||
getAllCoursesSettingsFromServer,
|
|
||||||
updateCourseSettingsOnServer,
|
updateCourseSettingsOnServer,
|
||||||
} from "./localCoursesServerActions";
|
} from "./localCoursesServerActions";
|
||||||
|
import { trpc } from "@/services/trpc/utils";
|
||||||
|
|
||||||
export const useLocalCoursesSettingsQuery = () =>
|
export const useLocalCoursesSettingsQuery = () =>
|
||||||
useSuspenseQuery({
|
trpc.settings.allCoursesSettings.useSuspenseQuery();
|
||||||
queryKey: localCourseKeys.allCoursesSettings,
|
// useSuspenseQuery({
|
||||||
queryFn: async () => {
|
// queryKey: localCourseKeys.allCoursesSettings,
|
||||||
return await getAllCoursesSettingsFromServer();
|
// queryFn: async () => {
|
||||||
},
|
// return await getAllCoursesSettingsFromServer();
|
||||||
});
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
export const useLocalCourseSettingsQuery = () => {
|
export const useLocalCourseSettingsQuery = () => {
|
||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
// const { data: settingsList } = useLocalCoursesSettingsQuery();
|
// const { data: settingsList } = useLocalCoursesSettingsQuery();
|
||||||
return useSuspenseQuery({
|
return trpc.settings.courseSettings.useSuspenseQuery({ courseName });
|
||||||
queryKey: localCourseKeys.settings(courseName),
|
// return useSuspenseQuery({
|
||||||
queryFn: async () => {
|
// queryKey: localCourseKeys.settings(courseName),
|
||||||
const settingsList = await getAllCoursesSettingsFromServer();
|
// queryFn: async () => {
|
||||||
const s = settingsList.find((s) => s.name === courseName);
|
// const settingsList = await getAllCoursesSettingsFromServer();
|
||||||
if (!s) {
|
// const s = settingsList.find((s) => s.name === courseName);
|
||||||
console.log(courseName, settingsList);
|
// if (!s) {
|
||||||
throw Error("Could not find settings for course " + courseName);
|
// console.log(courseName, settingsList);
|
||||||
}
|
// throw Error("Could not find settings for course " + courseName);
|
||||||
return s;
|
// }
|
||||||
},
|
// return s;
|
||||||
});
|
// },
|
||||||
|
// });
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useCreateLocalCourseMutation = () => {
|
export const useCreateLocalCourseMutation = () => {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import publicProcedure from "../procedures/public";
|
|||||||
import { createCallerFactory, router } from "../trpc";
|
import { createCallerFactory, router } from "../trpc";
|
||||||
import { assignmentRouter } from "./assignmentRouter";
|
import { assignmentRouter } from "./assignmentRouter";
|
||||||
import { lectureRouter } from "./lectureRouter";
|
import { lectureRouter } from "./lectureRouter";
|
||||||
|
import { settingsRouter } from "./settingsRouter";
|
||||||
|
|
||||||
export const helloRouter = router({
|
export const helloRouter = router({
|
||||||
sayHello: publicProcedure.query(() => {
|
sayHello: publicProcedure.query(() => {
|
||||||
@@ -16,6 +17,7 @@ export const trpcAppRouter = router({
|
|||||||
hello: helloRouter,
|
hello: helloRouter,
|
||||||
assignment: assignmentRouter,
|
assignment: assignmentRouter,
|
||||||
lectures: lectureRouter,
|
lectures: lectureRouter,
|
||||||
|
settings: settingsRouter,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const createCaller = createCallerFactory(trpcAppRouter);
|
export const createCaller = createCallerFactory(trpcAppRouter);
|
||||||
|
|||||||
26
nextjs/src/services/trpc/router/settingsRouter.ts
Normal file
26
nextjs/src/services/trpc/router/settingsRouter.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import publicProcedure from "../procedures/public";
|
||||||
|
import { z } from "zod";
|
||||||
|
import { router } from "../trpc";
|
||||||
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
|
|
||||||
|
export const settingsRouter = router({
|
||||||
|
allCoursesSettings: publicProcedure.query(async () => {
|
||||||
|
return await fileStorageService.settings.getAllCoursesSettings();
|
||||||
|
}),
|
||||||
|
courseSettings: publicProcedure
|
||||||
|
.input(
|
||||||
|
z.object({
|
||||||
|
courseName: z.string(),
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.query(async ({ input: { courseName } }) => {
|
||||||
|
const settingsList =
|
||||||
|
await fileStorageService.settings.getAllCoursesSettings();
|
||||||
|
const s = settingsList.find((s) => s.name === courseName);
|
||||||
|
if (!s) {
|
||||||
|
console.log(courseName, settingsList);
|
||||||
|
throw Error("Could not find settings for course " + courseName);
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}),
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user