46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { SingleChapterResult } from "./types/slightlyDifferentStory";
|
|
import { IChapter } from "~/models/stories/chapter";
|
|
import { IStory } from "~/models/stories";
|
|
import { messages } from "~/lib/server/constants";
|
|
|
|
export const storyMiddleware = defineNuxtRouteMiddleware(async (to, from) => {
|
|
const { getSession } = useAuth();
|
|
await getSession({ force: true });
|
|
const { data } = useAuth();
|
|
console.log("to n from", to, from, data);
|
|
const { data: story, error } = await useApiFetch<SingleChapterResult>(
|
|
to.path,
|
|
);
|
|
if (error.value) {
|
|
return showError(error.value);
|
|
} else if (!story.value) {
|
|
return showError({ statusCode: 404, message: messages[404] });
|
|
}
|
|
console.log("fns", story, error);
|
|
if (!data?.value?.user && story.value?.currentChapter.loggedInOnly) {
|
|
return navigateTo("/login");
|
|
}
|
|
});
|
|
|
|
export const storyEditMiddleware = defineNuxtRouteMiddleware(
|
|
async (to, from) => {
|
|
const { data: curU } = useAuth();
|
|
const rtr = useRoute();
|
|
const { data: storyInfo } = await useApiFetch<
|
|
({ chapters: (IChapter & { text: string })[] } & IStory) | null
|
|
>(`/story/${rtr.params.id}/full`);
|
|
if (!storyInfo.value) {
|
|
return showError({ statusCode: 404, message: messages[404] });
|
|
}
|
|
if (
|
|
curU.value?.user?._id !== storyInfo.value?.author._id &&
|
|
curU.value?.user?._id !== storyInfo.value?.coAuthor?._id
|
|
) {
|
|
return showError({
|
|
statusCode: 403,
|
|
message: messages[403],
|
|
});
|
|
}
|
|
},
|
|
);
|